최근 수정 시각 : 2022-10-20 21:15:05

소프트웨어


파일:나무위키+유도.png  
은(는) 여기로 연결됩니다.
SW가 약자인 동음이의어에 대한 내용은 SW 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.
파일:하위 문서 아이콘.svg   하위 문서: 소프트웨어/목록
,
,
,
,
,
#!wiki style="display: inline; display: none;"
, }}}
소프트웨어 관련 정보
{{{#!wiki style="margin: 0px -10px -5px"
{{{#!folding [ 펼치기ㆍ접기 ]
{{{#!wiki style="margin:-5px -2px -12px"
<colbgcolor=#64C3FA,#548FB2> 소프트웨어
<colcolor=#000,#fff> 기능에 따른 구분 시스템 소프트웨어(플랫폼)
응용 소프트웨어
유틸리티
펌웨어
권한에 따른 구분 사유 소프트웨어 프리웨어, 셰어웨어, 애드웨어
오픈 소스, 자유 소프트웨어
직업 프로그래머(개발자), 분석가, QA, DB Admin, 디자이너
목록 소프트웨어/목록
}}}}}}}}}||


1. 개요

컴퓨터, 통신, 자동화 등의 장비와 그 주변장치에 대하여 명령·제어·입력·처리·저장·출력·상호작용이 가능하게 하는 지시·명령(음성이나 영상정보 등을 포함한다)의 집합과 이를 작성하기 위하여 사용된 기술서(記述書)나 그 밖의 관련 자료
- 소프트웨어 진흥법 제2조 제1호(舊 소프트웨어산업 진흥법)

Software

응용 프로그램데이터처럼, 컴퓨터의 하드웨어 상에서 구동되거나 처리되는 무형물을 뭉뚱그려 지칭하는 말이다.

소프트웨어는 컴퓨터의 시스템을 구성하는 주요 요소 중 하나이다(컴퓨터 = 하드웨어 + 소프트웨어 + 펌웨어).

우리가 컴퓨터를 사용하는 목적은 소프트웨어를 이용하거나 처리하기 위함이며, 소프트웨어가 없는 컴퓨터(즉 하드웨어)는 그냥 빈 껍질이다. 그런 컴퓨터에 전원을 넣어봐야 아무 일도 일어나지 않는다.

간혹 소프트웨어의 반대말이 하드웨어라고 생각하는 이들이 있으나[1], 둘 다 컴퓨터 시스템을 구성하는 구성요소이며 상호 보완적인 기능을 한다. 반대말이 아니다.[2]

1953년Paul Niquette가 만들어낸 신조어로, 본래 하드웨어가 냄비나 망치 따위의 철물, 말그대로 '단단한 물건'을 의미하는 단어였고[3] 이를 컴퓨터를 구성하는 기계 부분을 일컫는 단어로 의미가 확장되면서 반대로 컴퓨터 내부에서 구동되는 프로그램을 가리켜 '소프트웨어'라는 단어가 생긴 것이다.

원래는 문자 그대로의 “컴퓨터”, 즉 메인프레임, 미니컴퓨터, 마이크로컴퓨터, 퍼스널 컴퓨터에서 동작하거나 처리되는 것(프로그램, 데이터 등)만을 소프트웨어라 불렀으나, 전화를 필두로 손목시계, 자동차, 텔레비전, 심지어 냉장고에 이르기까지 세상 만물이 컴퓨터화하는 현대에는 소프트웨어의 의미가 점점 넓어지고 있다. 예를 들어 20세기에는 아무도 영화, 음악, 책, 지도 등을 소프트웨어라 부르지 않았지만 오늘날엔 비디오소프트, 오디오소프트 같은 신조어가 생겨날 정도로 동영상과 음원을 소프트웨어로 간주한다. 전자책 역시 마찬가지로 소프트웨어 취급받으며, 내비게이션 등에 탑재되는 지도 역시 소프트웨어로 간주된다.

인류가 만든 것 중 가장 거대하고 널리 이용되는 소프트웨어는 뭐니뭐니해도 인터넷이다. 물론 수많은 서버와 통신망으로 구성된, 하드웨어에 해당하는 인터넷 인프라스트럭처가 없으면 인터넷이라는 소프트웨어를 구동할 수 없지만, 반대로 인터넷이란 소프트웨어가 없다면 이런 비싸고 거대한 하드웨어를 운용할 필요도 없음은 물론이다.

인공지능 역시 소프트웨어의 일종이며, 프로그램과 데이터 중에서 하나로 분류하자면 프로그램에 가깝다. 허나 오늘날 사용되는 인공지능들은 대부분이 빅 데이터 기반이라 그 기반을 이루는 데이터와 인공지능 프로그램을 칼같이 분리하기가 어렵다.[4]

흔히 SW라는 약자로 지칭한다. 하드웨어는 HW.

2. 구분

소프트웨어는 프로그램데이터로 구분된다. 디지털 컴퓨터에[5] 탑재되는 프로그램과 데이터는 모두 비트(0과 1)로 구성되어 있기에, 인간이 (충분한 시간과 집중력만 있다면) 종이에 적을 수 있다. 실제로 초창기 컴퓨터의 프로그램과 데이터는 천공 카드라는 종이에 담겨 있었으며 이 카드에서 구멍이 뚫린(천공된) 자리는 1, 구멍이 안 뚫린 자리는 0을 나타냈다. 물론 이렇게 0과 1만 잔뜩 나열되어 있는 종이는 인간에게 아무 소용도 없으며, 이를 하드웨어에 입력해 탑재시켜야만 구동(프로그램)이나 처리(데이터)가 가능하다.

프로그램에는 컴퓨터를 구동시켜주는 운영체제 및 컴퓨터에서 구동되는 애플리케이션(응용 프로그램), 유틸리티, 악성코드 등이 포함된다.

데이터는 프로그램 이외의 모든 소프트웨어를 가리킨다. 프로그램을 실행하는 데 필요한 데이터, MP3 음원, 디카로 찍은 사진, 각종 동영상 파일, 워드 프로세서를 이용해 작성한 문서 등 매우 다양한 유형의 데이터가 있다. 오늘날엔 이 중에서 특히 사용자(소비자)에게 가치를 제공하는 데이터를 콘텐츠라 따로 지칭하기도 한다. 즉 콘텐츠 역시 데이터의 일종이다.

컴퓨터의 태동기에는 하드웨어의 가격이 매우 높았기에, 일반인은 대개 하드웨어의 가치가 소프트웨어의 가치를 크게 상회한다고 인식하였다. 오늘날에도 이런 인식을 가진 이들이 (특히 고연령층에) 의외로 많으나, 너나 할것 없이 초소형 개인용 컴퓨터 단말(스마트폰)을 가지고 있으며 이를 2~3년 주기로 교체하는 시대에서 아직도 하드웨어의 가치가 소프트웨어의 가치를 상회한다고 생각하는 이들은 많지 않다. 사용자 스스로는 소프트웨어의 가치를 인식하지 못할지라도, 스마트폰을 새로 장만하면서 이전 스마트폰 안에 있던 연락처, 사진, 동영상 등의 데이터(즉 소프트웨어)를 그냥 버리는 사람은 아무도 없다. 그러긴 커녕 애지중지하며 자신의 컴퓨터에 백업을 받아놓는 이들이 대부분이다. 즉 많은 이들이 이미 소프트웨어(데이터)의 소중함을 이미 체득하고 있는 것이다.[6]

소프트웨어 중에서도 데이터, 특히 사용자가 직접 생성한 데이터[7]는 하드웨어와 프로그램을 아득히 상회하는 높은 가치를 지닌다.[8] 하드웨어는 전자상가 가서 새로 사면 그만이고, 프로그램은 제작사 웹사이트에서 다시 다운로드받거나 새로 하나 더 사면 그만이지만, 사용자 자신이 생성한 데이터를 잃어버릴 경우 이는 영영 되찾을 수 없다. 수많은 백업 솔루션과 데이터 복원 전문업체가 존재하는 것이 바로 이 때문이다. 향후 암호화폐의 거래 및 소유가 보다 일반화될 경우, 보다 많은 이들이 데이터의 소중함에 대해 알게 될 것이다(암호화폐도 데이터이므로).

2.1. 프로그램

입력물(Input)에 대한 사용자의 명령(Instruction)에 따라 일련의 산출물(Output)을 제공하는 소프트웨어를 말한다. 통상적으로 프로그램은 소프트웨어의 동의어로 사용되나, 소프트웨어가 보다 큰 개념으로 프로그램을 포함하고 있다.

옛날에는 프로그램을 시스템 소프트웨어, 응용 소프트웨어, 유틸리티의 세 가지로 분류했다. 하지만 오늘날엔 유틸리티라는 개념이 점차 사라지며, 프로그램을 주로 시스템 소프트웨어, 응용 소프트웨어, 악성코드(멀웨어)로 분류한다.

2.1.1. 시스템 소프트웨어

응용 소프트웨어가 작동하는 환경을 만들거나 컴퓨터를 유지, 관리하는데 사용되는 소프트웨어. 때문에 "플랫폼"이라고도 부른다.

가장 대표적인 시스템 소프트웨어로는 마이크로소프트 윈도, 맥 OS, 리눅스 등의 운영체제가 있으나, 그 외에도 Java, .NET 같은 가상 머신, 언리얼 엔진이나 이드텍 엔진 같은 게임 엔진, SaaS 등 다양한 유형의 시스템 소프트웨어들이 있다. 아래에서는 응용 소프트웨어로 구분했지만 웹 브라우저도 시스템 소프트웨어로 볼 수 있는데 웹 사이트라는 소프트웨어의 구동 플랫폼이기 때문이다. 실제로도 웹 기술을 기반으로 만든 응용 프로그램이 많다.

유틸리티와 일부 펌웨어를 제외한 시스템 소프트웨어는 "플랫폼"의 역할을 한다. 시스템 소프트웨어 아래에는 컴퓨터 하드웨어나 운영체제 등 하위 단계가 있으며, 시스템 소프트웨어 위에는 응용 소프트웨어(프로그램)라는 상위 단계가 있다. 또한 시스템 소프트웨어의 아래에 또 다른 시스템 소프트웨어가 있을 수 있고, 시스템 소프트웨어 위에 또 다른 시스템 소프트웨어가 있을 수 있다.

예를 들어 윈도 플랫폼 컴퓨터로 비디오게임을 플레이하는데, 이 비디오게임이 언리얼 게임 엔진 기반이라고 해 보자. 이 게임은 언리얼 게임 엔진 위에 게임 코드(스크립트 등)와 각종 자산(애셋, 예를 들어 사운드, 텍스처 등등)을 얹은 물건이다. 즉 게임 엔진이 시스템 소프트웨어다. 게임 엔진 또한 컴퓨터의 운영체제(시스템 소프트웨어)인 윈도라는 플랫폼 위에서 구동되고 있다.[9]

이 예에서는 윈도 위에 언리얼 엔진으로 시스템 소프트웨어가 두 층을 이루고 있지만, 극단적인 경우 세 층, 네 층의 시스템 소프트웨어가 쌓여서 돌아갈 수 있다.

초창기(예를 들어 버전 3.1) 마이크로소프트 윈도우MS-DOS라는 시스템 소프트웨어 위에 얹혀진 시스템 소프트웨어였다.[10] 컴퓨터를 우선 DOS로 부팅시킨 후에 윈도우를 실행하는 방식. 물론 DOS 부팅과 동시에 윈도우가 실행되도록 Autoexec.bat을 설정하는 수도 있었지만 그래도 우선 DOS가 돌아가야 윈도우가 작동된다는 점은 마찬가지다.

진정한 컴맹을 위해 극도로 단순하게 설명하자면, 시스템 소프트웨어란 과묵한 아버지(하드웨어에 해당)와 자식들(응용 소프트웨어에 해당) 사이를 이어주는 어머니 같은 소프트웨어라고 이해하면 대충 맞는다. 이런 집에서 어머니가 없어지면 아버지와 자식들 간에 상호작용이 일어날 수 없듯이, 시스템 소프트웨어가 없는 시스템은 전혀 돌아가질 않는다.
2.1.1.1. 운영 체제
파일:상세 내용 아이콘.svg   자세한 내용은 운영체제/목록 문서
번 문단을
부분을
참고하십시오.
  • MS 계열
    • MS-DOS
    • Microsoft Windows: 전세계 점유율이 90%에 육박하는 OS. 사실상 독과점이다. 때문에 악성코드와 해킹 방법이 가장 집중적으로 개발되고 있어 보안이 취약한 플랫폼이기도 하며, 때문에 반드시 보안 솔루션(“안티바이러스”)을 이용해야 한다. 이처럼 단점이 많지만 압도적인 보급율 때문에 거대한 소프트웨어 라이브러리를 자랑하며, 아예 대체재가 없는 경우도 종종 있다(즉 윈도 버전만 있고 맥이나 리눅스로는 출시되지 않은 소프트웨어가 매우 많다). 특히 컴퓨터용 비디오게임은 윈도용이 압도적으로 많다.
    • 엑스박스 원 시스템 소프트웨어
  • 유닉스 및 유닉스 계열
    • 유닉스: 유닉스 계열 운영체제의 원조. 벨 연구소에서 개발하였다.
    • 리눅스: 컴덕후 리누스 토르발스심심해서 만든 커널을 기반으로 개발한 OS. 자유 소프트웨어 진영 중심으로 수많은 배포판을 쏟아내며 여러 컴덕후들의 사랑을 받고 있다. 그리고 여러분이 접속하는 웹사이트 서버의 대부분이 리눅스 기반이다. 또한 요새 스마트폰에서 쓰이는 안드로이드도 리눅스 기반이다.
    • macOS: Mach 커널과 BSD를 기반으로 만들어진 애플의 Mac 전용 OS. IBM 계열의 PC에서 사용하기 위해 일부 사용자들이 변형한 해킨토시도 있다. 공식 개조판으론 아이폰에서 쓰이는 iOS가 있다.
    • 안드로이드: 주로 모바일 기기(스마트폰 등)를 운영하기 위해 만들어진 운영체제. 비교적 가벼우며 범용성이 높다. 21세기에 급격히 확산되며 세계에서 가장 많이 쓰이는 OS의 자리를 넘보는 중.
    • BSD
    • 솔라리스
  • 그 밖에
    • OS/2
    • CP/M: 사실상 최초의 퍼스널 컴퓨터용 운영 체제이며 8비트 컴퓨터 시대를 풍미했었으나 16비트 시대에 MS-DOS와의 경쟁에서 패배하여 사라졌다. 자세한 내용은 문서 참조.
    • Apple DOS: 옛 애플 2 컴퓨터의 운영체제. 이름에 DOS가 들어있지만 MS-DOS와는 무관하며, SMI라는 회사가 스티브 워즈니악이 제시한 사양에 따라 제작하였다. 첫번째 버전이 3.1이었기 때문에(이전 버전은 모두 제작단계) "Apple DOS 3.1"이라고도 알려져 있으며, 나중에 "ProDOS"라는 차세대 버전이 나오기도 했다.
2.1.1.2. 드라이버
하드웨어를 추상화시켜 운영체제와 연결해 주는 역할을 한다.

하는 일은 펌웨어와 비슷하지만 펌웨어와 달리 드라이버는 컴퓨터의 CPU에서 처리된다는 점이 다르다.

물론 펌웨어 자체에 기본적인 주변장치 드라이버가 들어있는 경우도 많으므로 펌웨어와 드라이버를 칼처럼 구분하기는 어렵다. 예를 들어 거의 모든 PC의 바이오스(펌웨어)에는 기본적인 키보드와 마우스 드라이버가 탑재되어 있어, OS조차 탑재되지 않은 빈껍데기 컴퓨터에서도 키보드와 마우스를 이용해 바이오스 셋업을 할 수 있다. 하지만 이런 내장 드라이버는 정말 기본적인 기능만 갖고 있기 때문에 특정 주변기기의 성능을 모두 활용할 수 있게 해주지는 않는다. 예를 들어 당신의 마우스가 버튼 8개짜리 비디오게임용 마우스라고 해도, 바이오스 드라이버는 좌클릭 하나만 인식한다. 이런 기능까지 모두 이용하려면 전용 드라이버를 설치해야 하는데, 이런 전용 드라이버는 펌웨어와 달리 CPU에서 처리된다.
2.1.1.3. 유틸리티
컴퓨터를 관리하기 위해 사용하는 소프트웨어.

유틸리티와 응용 소프트웨어를 구분하는 중요 기준은 "프로그램을 위한 컴퓨터냐, 컴퓨터를 위한 프로그램이냐"로 정해진다. 즉 "이 프로그램을 구동할 목적으로 컴퓨터를 장만했다"는 말이 나올 가능성이 있다면 그건 응용 소프트웨어고, 그렇지 않다면 그건 유틸리티다. 예를 들어 오직 노턴 안티바이러스를 구동할 목적으로 컴퓨터를 사는 사람은 없을 것이다. 안티바이러스(유틸리티)는 우리가 워드 프로세서나 인터넷 브라우저(응용 소프트웨어) 등을 사용하는 과정에서 악성코드나 해킹 등으로부터 시스템을 보호하기 위해 (대개는 마지못해) 구비하는 프로그램이다.[11]

유틸리티는 컴퓨터의 발전과 더불어 그 의미가 많이 달라진 용어다. 컴퓨터라면 메인프레임, 미니컴퓨터 등을 의미하던 시절에는 UNIX 운영체제가 널리 이용되었으며, 유틸리티는 원래 UNIX 용어였다. UNIX에서는 컴퓨터 소프트웨어를 커널, , 유틸리티로 삼분하였으며 당시엔 오늘날 우리가 말하는 응용 소프트웨어를 모두 유틸리티라 불렀다.

1970~1980년대에는 퍼스널 컴퓨터가 널리 보급되며 CP/M, DOS 등의 비UNIX 운영체제의 사용이 늘어났고, 이런 환경에서 유틸리티는 커널이나 셸에 대립되는 개념이 아니라 컴퓨터의 관리에 이용되는 응용 소프트웨어를 지칭하는 용어로 의미가 변경되었다. 즉 프로그램 = 시스템 소프트웨어, 응용 소프트웨어, 유틸리티로 구분했던 것이다.

허나 오늘날엔 가장 널리 이용되는 시스템 소프트웨어인 마이크로소프트 윈도가 각종 유틸리티(디스크 정리, 파일 압축, 네트워크 구축, 방화벽 등)를 포함하고 있어서 유틸리티의 입지가 점차 줄어들고, 일반 사용자가 유틸리티를 따로, 즉 독립된 제품으로 접할 기회도 많이 줄어들었다. 때문에 오늘날엔 유틸리티를 독립된 범주로 보는 이들도 적어졌다.[12] 넓게 보면 운영체제의 계정 권한 관리나 자동적인 메모리 관리 등도 유틸리티라도 볼 수 있다.

반면 과거 유틸리티로 분류되던 안티바이러스 프로그램은 컴퓨터 관련 범죄와 위협이 급증하며 점점 세를 불려, 오늘날엔 단순히 유틸리티의 하나가 아니라 "보안 소프트웨어"(security software)라는 독립 범주로 인식되는 추세이다.

물론 윈도나 맥OS 플랫폼이 아닌 시스템들, 예를 들어 유닉스 계열인 리눅스, 안드로이드 등의 OS 들은 내장 유틸리티가 비교적 적기 때문에 사용자들이 원하는 유틸리티를 스스로 장만하는 일이 많다.
2.1.1.4. 펌웨어
펌웨어는 컴퓨터에 내장되어 컴퓨터의 동작을 제어하는 기본적인 프로그램이다. 일반적인 소프트웨어는 보조기억장치(하드 디스크 등)에 저장되어 있다가 작동되는 반면, 펌웨어는 ROM 등의 읽기 전용 메모리에 새겨져 있으며 그 내용을 바꿔쓰는 것이 쉽지 않다.

BIOS 또한 대표적인 펌웨어다. 개인용 컴퓨터를 능숙하게 사용하는 사용자라면 시스템의 BIOS 설정을 변경해본 적도 있을 것이다.

단순한 제어만을 필요로 하는 기기는 대부분 응용 프로그램 수준의 펌웨어를 탑재하고 있어 펌웨어 만으로 작동한다. 사실 20세기 기계들은 컴퓨터를 빼고는 대부분이 그랬다. 당시 사람들은 펌웨어로 구동되는 기계류에 둘러싸여 살면서도 펌웨어라는 단어를 들어본 적도 없는 이들이 대부분이었다(펌웨어라는 용어는 1967년에 나왔는데도).

하지만 21세기 들어 전화를 비롯해 점점 많은 기계들이 CPU와 소프트웨어를 탑재한 컴퓨터 시스템으로 변모해감에 따라, 일반적인 소프트웨어와 펌웨어의 차이를 알 필요가 생겨났으며 오늘날 많은 이들이 펌웨어라는 단어를 알고 있다. 그 의미를 정확히는 모르더라도 "펌웨어를 바꿔쓰는(업데이트하는) 동안에 전원이 꺼지면 안된다"는 정도는 대개 안다. 사실 일반 사용자 수준에서는 그게 제일 중요하다.

펌웨어라고 칭하는 소프트웨어의 범위는 스마트폰 같은 기기의 운영체제부터, 단순한 제어를 담당하는 시스템 소프트웨어보다는 응용 소프트웨어에 가까운 수준의 내장 소프트웨어로 넓다. 그러나 이들 모두가 하드웨어를 제어하는 기초적인 소프트웨어라는 점에서 공통점을 가진다.

간혹 개인이 컴퓨터의 펌웨어를 임의로 개조하거나 아예 완전히 다른 것으로 바꿔 사용하는 경우도 있다. 이를 커스텀 펌웨어라 부른다. 펌웨어 개조는 응용 프로그램 제작과는 차원이 다른 작업으로 난이도가 높으며 위험도 크다. 커스텀 펌웨어를 설치하다가 오류가 나면 그 하드웨어를 영영 못쓰게 되는 수도 있다.

자세한 내용은 펌웨어 문서에 나와 있으며, 여기서는 펌웨어란 좀 특별한 소프트웨어로서 하드웨어와 소프트웨어의 중간 정도에 위치하는 물건이라는 정도만 알자. 애당초 펌웨어라는 이름 자체가 그런 의미의 말장난이다(딱딱한 하드웨어 - 굳은 펌웨어 - 무른 소프트웨어).
2.1.1.5. 런타임 환경
소프트웨어가 작동하는 환경을 만들어주는 소프트웨어. 플래시를 예로 들면 플래시 플레이어가 플래시 컨텐츠(.swf)에 포함된 액션스크립트의 제어를 받아 애니메이션이나 동영상을 화면에 표시하고 통신이 필요할때면 XML이나 JSON등을 인터넷을 통해 보내고 받을수 있게 해주는 등 플래시 컨텐츠가 작동하는 환경을 만들어 주는 런타임 환경이다. 기반이 되는 플래시 플레이어가 없으면 플래시를 사용할수 없다. 플래시가 윈도우, macOS, 리눅스 심지어는 ARM기반의 휴대전화에서도 작동할수 있는 이유도 플래시 컨텐츠가 직접 운영체제의 API를 사용하거나 CPU에서 네이티브 코드를 실행시킬수 없고 대신 컨텐츠가 플래시 플레이어의 특정 기능을 실행시키면 플레이어가 그에 맞는 운영체제의 API나 네이티브 코드를 실행시키기 때문에 운영체제나 CPU가 달라져도 플레이어만 바꾸어 주면 어디서든지 실행이 가능한 것이다. 또 다른 예시를 들자면 게임기 에뮬레이터가 있는데 게임기와 컴퓨터는 운영체제 뿐만이 아니라 CPU, 그래픽카드, 사운드카드 등의 하드웨어까지도 완전히 달라서 콘솔용으로 만들어진 게임을 컴퓨터에서 바로 실행하는 것은 불가능하다. 하지만 에뮬레이터가 게임기와 유사한 실행 환경을 소프트웨어적으로 만들어냄으로서 컴퓨터에서도 콘솔 게임을 할수 있는것이다.

운영체제도 각종 API를 통해 하드웨어 입출력 등을 수행한다는 점에서 런타임 환경의 일종으로 볼수 있다. 극단적으로는 CPU자체도 바이너리 코드의 런타임 환경이다.

2.1.2. 응용 소프트웨어

시스템 소프트웨어라는 플랫폼 위에서 구동되는 프로그램으로, 사용자가 원하는 각종 기능을 제공한다.
가장 대표적인 프로그램이자 소프트웨어로, "프로그램"이나 "소프트웨어"라 하면 바로 응용 소프트웨어를 지칭하는 경우가 많다.
"응용"이 영어로 "application"이기 때문에, 응용 소프트웨어를 그냥 애플리케이션이라고도 부르며, 더 줄여서 그냥 (일본인들은 "아프리")이라고도 부른다.

일반인에게 "앱"이란 용어가 널리 퍼지게 된 것은 미국 애플 컴퓨터가 국내에 아이폰 3GS를 론칭하면서인데, 애플의 상용 프로그램 생태계가 "앱스토어"라는 이름이었고 여기서 거래되는 응용 소프트웨어를 앱이라 불렀기에 일반인들도 앱이라는 이름에 익숙해진 것이다. 심지어 스마트폰 대중화 초기에는 iOS 기반 앱만을 앱이라 부른다고 잘못 알고 있는 이들도 매우 많았으며(즉 안드로이드 기반 앱은 앱이라 부르지 않음), 오늘날까지도 데스크탑 컵퓨터의 응용 소프트웨어는 "프로그램", 모바일 기기의 응용 소프트웨어는 "앱"으로 구분된다고 잘못 아는 이들도 많다.

음악 및 동영상을 재생하거나, 재미있는 놀이(게임)를 할 수 있게 해 주거나, 글자를 입력해 문서를 만들 수 있게 해 주거나, 많은 양의 데이터를 받아들여 보관했다가 손쉽게 찾을 수 있게 해 주는 등 정말 부지기수의 응용 소프트웨어가 있다.
워드 프로세서, 스프레드시트, 인터넷 브라우저, 동영상 플레이어, 비디오 게임 등 다양한 응용 소프트웨어를 특징짓는 공통점은 이들이 우리가 컴퓨터를 사용하는 목적인 프로그램들로, "이걸 하기 위해 컴퓨터를 샀다"라고 말할 수 있는 프로그램들이라는 점이다.[14]
예를 들어 출시된 응용 소프트웨어가 하나도 없이 시스템 소프트웨어(+유틸리티)만 달랑 있는 컴퓨터가 있다면 아무도 그 컴퓨터를 사지 않을 것이다. 그런 컴퓨터는 아무런 용도도 없는, 그냥 전기 잡아먹는 기계에 불과하기 때문이다.

2.1.3. 악성 코드

컴퓨터 바이러스, , 트로얀 등으로 대표되는 나쁜 소프트웨어들.

품질이 나쁘다는 것이 아니라 애당초 제작자가 악의를 가지고 만든 소프트웨어다.

21세기 들어 가장 큰 문제가 되고 있는 랜섬웨어 역시 악성 코드로, 다른 악성 코드와 달리 제작자/유포자에게 경제적 이득을 가져다 줄 가능성이 높기 때문에 점점 증가하고 있다.

대부분의 악성 코드는 프로그램(응용 소프트웨어)지만, 데이터로만 이루어진 악성 코드도 있다. 예를 들어 특정 프로그램에서 정해진 동작을 실시하는 일종의 스크립트인 매크로만으로 구성된 악성 코드도 있다.

간혹 "취약점(vulnerability)"과 악성 코드를 혼동하기도 하는데, 취약점은 말 그대로 소프트웨어가 갖고 있는 결함이 악의적으로 이용될 수 있는 경우 이런 결함을 지칭하는 용어다. 다시 말해 취약점은 악성 코드가 아니다. 옛날에는 소프트웨어 개발자가 이런저런 목적을 가지고 의도적으로 설치해둔 "뒷문"이 해커에게 발견되어 취약점으로 악용되는 경우가 많았으나, 소프트웨어가 고도로 복잡해진 오늘날엔 개발자가 전혀 의도하지 않은 소프트웨어적 결함이 취약점으로 발견되는 경우가 점점 늘어나고 있다. 21세기에는 심지어 하드웨어의 취약점까지 발견되었다. 상당히 전문적인 내용이지만 관심이 있다면 스펙터와 멜트다운에 대한 문서를 읽어보자.

가장 널리 사용되는 운영체제인 윈도 플랫폼의 PC를 타겟으로 하는 악성 코드가 압도적으로 많다. 다른 OS 플랫폼에도 악성 코드가 없는 것은 아니지만, 맥OS나 안드로이드 사용자들 중 상당수가 아무런 보안 소프트웨어 없이 시스템을 사용할 정도로 상대적 위험도가 낮다.

2.2. 데이터

동작하지 않는 소프트웨어. 처리의 주체가 아니라 객체(대상)인 소프트웨어다. 소프트웨어에서 프로그램을 제외한 모든 것이라고 봐도 된다.

종류는 그야말로 부지기수로, 사진, 동영상, 텍스트, 오디오 등이 대표적이다. 대부분의 데이터는 알맞은 프로그램이 있어야만 열람과 처리가 가능하며, 데이터는 이런 응용 프로그램을 이용해 처리하기 위해 특정 형식으로 짜여져 있는데 이런 형식을 "포맷"이라 한다. 예를 들어 사진은 jpg, png, gif 등의 포맷이 널리 사용되며, 오디오는 mp3, flac, wma 등의 포맷이 있다.[15]

컴퓨터의 구성 요소 중 가장 값지고 소중한 것이 바로 데이터다. 사용자가 찍은 사진과 동영상, 힘들게 작업해 만들어낸 각종 문서, 공들여 진행한 비디오 게임의 세이브 파일, 온라인 롤플레잉 게임에서 운좋게 획득한 전설급 아이템, 많은 돈을 주고 구매한 암호화폐 등이 모두 데이터이며, 이들은 하드웨어나 프로그램과는 달리 한번 잃어버리면 다시 [데이터 회복]하기가 매우 힘들다.

컴퓨터 시스템의 보조기억장치(하드 디스크 같은)에서 가장 많은 용량을 차지하고 있는 것이 데이터다. 게다가 시스템을 사용하다 보면 축적되는 데이터는 계속 늘어나며, 오늘날 대부분의 PC 사용자들은 시스템 안에 백만개 단위의 데이터 파일들을 쌓아놓고 산다.[16]
사무직 종사자는 워드 프로세서 파일이나 스프레드시트, 프레젠테이션 파일 등을 주로 생성하며, 창작업에 종사하는 이들은 사진, 동영상, 음원 등의 멀티미디어 파일을 많이 생성한다. 비디오게임만 즐기는 이용자조차도 게임의 세이브 파일이나 게임 설정을 저장한 컨피겨레이션 파일 등을 생성한다. 이들 모두가 데이터로, 컴퓨터의 사용이란 곧 데이터의 생성 행위라 해도 과언이 아니다.

응용 프로그램을 제작하는 소프트웨어 개발자들조차도 프로그램만 만드는 것이 아니다. 소프트웨어 개발이란 프로그램을 개발하는 과정에서 나오는 모든 문서들(system documentation)과 유저들을 위한 사용 설명서(user documentation)까지 모두 포함하는 개념이다. 실제로는 코딩(프로그램의 설계도인 소스 코드를 제작하는 일)이 전체 소프트웨어 개발에 차지하는 비중은 20%도 안 된다! 70% 가량이 디버깅인 건 함정 당신이 컴퓨터 관련 직종에 종사하고 있는데, 개발자가 코딩만 하는 사람으로 인식하고 있다면 심각하게 문제가 있는 것이다.[17]

프로그램이 데이터가 되기도 하는데 예를 들어 프로그래밍을 하면서 작성한 코드는 프로그램이면서 동시에 데이터이다. 소스 코드를 번역하는 컴파일러도 예시로 들 수 있는데 컴파일러에게 프로그램은 번역 대상인 데이터이다.

3. 목록

문서 참조.

4. 관련 문서


[1] 하드와 소프트가 서로 반의어 관계에 있는 단어이기 때문에 자연스레 하드웨어와 소프트웨어도 같은 관계라고 착각하게 되는 것.[2] 예를 들어 "차"와 "찻잔", "책상"과 "걸상"이 서로 반대말이 아니듯이.[3] 때문에 영어권에서 'Hardware store'는 컴퓨터와는 일절 관계 없고 각종 공구와 자재를 파는 '철물점'을 가리킨다.[4] 예를 들어 알파고(바둑을 두는 인공지능)의 바둑 능력을 구성하는 두 요소인 알고리즘(프로그램)과 대량의 기보(데이터)를 서로 떼어놓고 생각하기가 어렵듯이.[5] "디지털 컴퓨터 말고 뭐가 있어?" 싶겠지만 과거에는 아날로그 컴퓨터가 있었으며 미래에는 양자 컴퓨터가 실용화될지도 모른다. 아날로그 컴퓨터는 그 안의 데이터를 정확하게 계측하는 것이 불가능하며 항상 근사치만을 얻을 수 있다(데이터가 전류량, 유체의 양 등으로 표현되므로). 양자 컴퓨터의 경우 비트가 아닌 큐비트를 이용하는데, 큐비트는 비트(0 아니면 1)와 달리 0과 1의 값을 동시에 가지므로 이를 인간이 종이에 옮겨 적는 것은 불가능할 것이다.[6] 다만 언론 쪽에서는 아직도 스마트폰 등의 가치를 논할 때 "원가"를 들먹이며, 부품 가격을 모두 합한 것을 그 제품의 가치라고 본다. 탑재된 소프트웨어의 가격은 물론이고 마케팅, 유통 등에 소요되는 제반 비용을 깡그리 무시하는 것. 아직도 갈 길이 멀다...[7] 예를 들어 워드 프로세서나 스프레드시트 증의 프로그램으로 작업한 문서, 촬영한 디지털 사진 등.[8] "나는 컴퓨터로 비디오게임만 하는 사람이라 나한테는 해당되지 않는다"라고 생각한다면, 힘들게 진행한 게임의 세이브 파일(데이터)을 한번 날려먹어 보라. 데이터의 값어치를 제대로 쳐주지 않는 것이 일반적인 우리나라에서, 가장 값비싸게 거래되는 데이터 중 하나가 비디오 게임의 "아이템"(게임 상의 데이터다)이다.[9] 보다 알기 쉬운 예가 쯔꾸르로 제작한 게임. 쯔꾸르는 게임 제작 툴인 동시에 게임 엔진이기도 하다(즉 시스템 소프트웨어). 쯔꾸르를 이용해 게임을 제작하면서 사용자가 추가한 요소들, 즉 스크립트 및 그래픽, 사운드 등이 자산(애셋)이다.[10] 당시 윈도우는 아예 시스템 소프트웨어가 아니라 프론트엔드였다는 시각도 있다.[11] 예를 들어 안티바이러스 프로그램, 디스크 최적화 유틸리티, 레지스트리 클리너 등을 사용할 목적으로 컴퓨터를 사는 사람은 없다. 유틸리티는 우리가 컴퓨터를 보다 편리하고 안전하게 사용할 수 있도록 돕고, 컴퓨터를 사용함에 있어 일어날 수 있는 문제들을 예방하거나 해결하는 역할을 하는 프로그램들이다.[12] 일례로 우리가 오늘날 윈도 자체의 기능이라고 여기는 바탕화면 테마 바꾸기나 화면에 표시되는 텍스트의 폰트 크기 변경, 화면 보호기 등은 20세기에는 모두 독립된 유틸리티였다. "세상에 화면 보호기를 돈주고 사는 사람이 있어?"라고 생각되겠지만, 미국 버클리 시스템즈의 "플라잉 토스터"(문자 그대로 날개가 달려 날아다니는 토스터가 나오는 화면 보호기다)와 "애프터 다크" 화면 보호기는 인기있는 유틸리티로 많이 팔렸다. 또한 안티바이러스 제품군으로 유명한 노턴은 "노턴 유틸리티"라는 인기 유틸리티 모음집을 판매하였으며, 여기에는 오늘날 윈도에 포함된 기능들인 하드디스크 점검, 디스크 파편화 개선 등의 유틸리티가 포함되어 있었다. 당시엔 윈도 자체에 그런 기능이 없었기 때문이다.[13] 요즘 JavaScript 엔진을 내장하지 않은 브라우저는 없을 것이다.[14] "나는 인터넷만 하려고 컴퓨터를 샀는데, 인터넷은 응용 소프트웨어가 아니잖아?"라고 말하는 이들도 있을 수 있다. 일리가 있는 말이기는 하지만, 자바 스크립트와 HTML로 만들어진 웹 사이트 또한 응용 소프트웨어라고 할 수 있다.[15] 참고로 파일 형식을 말하는 포맷은 하드 디스크나 램디스크(SSD를 초기화하는 작업인 포매팅과는 전혀 다른 것이다. 디스크를 사용하기 위해서는 디스크의 파일 시스템을 특정 규격에 맞춰 구축해줘야 하는데 이런 작업을 포매팅이라 부른다. 디스크를 포매팅하면 그 디스크에 저장된 내용물은 모두 소실된다. 시스템 명령어나 기능 중에 “포맷”이란 말이 나오면 디스크 초기화를 가리키는 것일 수 있으니 컴맹들은 반드시 확인하도록 하자.[16] 이걸 모두 사용자가 만들어낸 것은 아니다. 많은 응용 소프트웨어들이 설치되거나 작동될 때 스스로 데이터 파일을 내려받거나 만들어내기 때문에, 사용자들은 자기 컴퓨터에 쌓여있는 무수한 데이터 파일들 중 대부분이 뭐에 쓰이는 물건인지도 모른 채 컴퓨터를 사용한다.[17] 여담으로 이는 의외로 심각한 문제다. 우리나라 대기업들의 소프트웨어 개발자들 중 많은 수가 도큐멘테이션(문서 제작)에 매우 서툴다. 그냥 묵묵히 자기가 맡은 코드만 짜면 된다고 생각하는 이들이 많으며, 이들이 만든 도큐먼트는 거의 혼잣말 수준으로 남이 보고 이해하기 어려운 조잡한 물건들이다. 때문에 협업이 잘 되지 않으며 개발자 본인이 퇴사해버리면 그가 그때까지 작성한 코드도 무용지물이 되거나 디버깅이 힘들어지는 경우가 많다.