메뉴 건너뛰기

[담론과 문화]1. 코난의 별별이야기


IT기술과 인간 3 – 소프트웨어 이야기


코난(진보교육연구소 연구원)

  이번에는 소프트웨어 이야기를 하겠습니다. 하드웨어가 컴퓨터의 모든 물리적 부품을 가리킨다면, 소프트웨어란 ‘하드웨어가 특정한 작업을 수행하도록 하는 명령어 묶음’이라고 말할 수 있습니다(컴퓨터를 사람에 비유할 경우, 몸은 하드웨어에 정신은 소프트웨어에 비유하기도 합니다). 여기서 말하는 명령어 묶음은 기본적인 판단 기능을 포함합니다. 물론 컴퓨터와 같은 기계는 인간과 같이 추론하거나 임기응변을 해낼 수 없으므로 컴퓨터가 판단을 하게 하려면 모든 판단 기준을 미리 지정해 줘야 합니다. 실제로 컴퓨터 프로그램을 짜보면 알 수 있지만, 있을 수 있는 모든 상황에 대해 판단 기준을 빠짐없이 지정해줄 때라야 컴퓨터가 오류 없이 작동합니다. 무엇인가 빠진 것이 있을 경우 예상하지 못한 동작을 하거나, 오류를 일으키거나, 해킹에 악용될 수 있습니다.

  간단한 예로 에스컬레이터와 엘리베이터의 작동을 견주어 보겠습니다. 에스컬레이터는 스위치를 켜면 무조건 움직이고, 스위치를 끄면 무조건 멈춥니다. 사람의 신발이 끼어도, 에스켈레이터에 아무도 타고 있지 않아도 계속 움직입니다(요즘에는 사람이 타면 작동하고, 사람이 없으며 작동하지 않는 에스컬레이터가 있는데, 그 경우 사람이 탔는지 아닌지에 따라 작동과 중지를 조절할 판단 기능과 센서가 필요할 것입니다). 별도의 프로그램이 필요하지 않습니다.
  하지만 엘리베이터는 에스컬레이터와 달리 계속 움직이지 않습니다. 엘리베이터의 작동은 내부에 있는 층별 버튼과 여닫기 버튼, 그리고 외부에 있는 층별 버튼에 의해 조절됩니다. 기본 작동방식은 사람이 엘리베이터에 타서 이동할 층의 버튼을 누르면 그 층으로 이동하여 문을 열어 주는 식입니다. 아무 버튼도 눌리지 않으면 그 자리에 서서 대기합니다. 그러다가 다른 층에서 외부 버튼이 눌리면 엘리베이터는 그 층으로 이동하여 문을 열고 사람을 태우게 됩니다.
  이런 식으로 눌린 버튼의 명령에 따라 차례로 엘리베이터가 작동하면 별다른 문제가 없을 것 같지만, 실제로는 여러 가지 혼란스런 상황이 생깁니다. 예를 들어 1층에 있던 엘리베이터가 10층 외부 버튼의 호출을 받고 올라가는 도중에 5층의 외부 버튼이 눌렸다고 칩시다. 이 때 엘리베이터는 무조건 10층으로 간 다음에 사람을 태우고서 5층으로 옮아가야 할까요? 아니면 5층으로 이동하여 사람을 태우고 10층으로 가야 할까요? 엘리베이터가 5층을 이미 지나쳤다면 일단 10층까지 갔다가 다시 내려오는 것이 효율적일 것입니다. 5층을 지나치지 않았다면 5층에서 버튼을 누른 사람이 위로 올라가고자 하는 경우는 멈춰서 태우고 올라가는 것이 효율적이고, 5층에서 버튼을 누른 사람이 내려가려고 하는 경우는 10층에 갔다가 내려오는 길에 5층에서 사람을 태우는 것이 효율적일 것입니다. 따라서 이런 경우 어떻게 할지 제대로 판단하려면, 5층에서 눌린 외부 버튼이 상행 버튼인지 하행 버튼인지와 함께 외부 버튼이 눌린 순간에 엘리베이트의 위치가 어디인지를 알아야 합니다. 또한 그 정보를 이용하여 어떻게 작동할지를 판단해야 합니다. 그밖에도 용량을 초과했을 때 경고음을 울리고 작동을 중지시키기 위해, 탑승 무게를 감지하고 적정 용량의 초과 여부를 판단하는 등 안전한 운행을 위해 고려해야 할 사항은 더 많습니다. 단순하긴 해도 프로그램이 필요합니다.
  이 때 엘리베이터 본체나 모터, 내외부 버튼, 여닫이 문, 무게 센서 등의 물리적 부품이 하드웨어라면, 엘리베이터가 효율적이고 안전하게 작동하도록 해주는 내부 알고리즘(상황에 대한 판단 기준과 작동 명령의 집합)을 구현해 놓은 것이 프로그램(소프트웨어)입니다. 물론 컴퓨터 소프트웨어는 이보다 훨씬 더 복잡하겠지만, 그 근본 원리는 같습니다.

  한편 엘리베이터는 한 가지의 목적을 위해 사용되므로 내부 알고리즘이 고정되어 소프트웨어가 기계 자체에 내장되어 있지만, 컴퓨터는 다양한 용도(사무용, 교육용, 게임용, 오락용 등)로 사용되므로 필요에 따라 소프트웨어를 별도로 설치하거나 삭제할 수 있어야 합니다. 용량만 허락된다면 여러 가지 소프트웨어를 설치해 놓은 뒤, 필요에 따라 기억장치로 불러 들여 실행시키기도 하고, 여러 소프트웨어를 동시에 실행시키기도 합니다. 따라서 컴퓨터는 하드웨어를 관리하고 응용 소프트웨어를 실행시켜 주는 운영체제(OS, Operating System)와 다른 소프트웨어를 만드는 데에 이용하는 프로그래밍 언어라는 독특한 소프트웨어를 필요로 합니다. 그밖에도 흔히 말하는 컴퓨터 프로그램이나 어플리케이션Application(스마트폰에서는 줄여서 앱App) 등이 모두 특정한 목적을 위해 사용하는 소프트웨어를 가리키는 말입니다.

  컴퓨터가 발달함에 따라 하드웨어에 대한 소프트웨어의 독립성과 중요성이 점점 커졌습니다. 그 중에서도 컴퓨터를 돌아가게 만들어주는 운영체제의 역할이 핵심입니다. 초창기 PC 혁명을 주도한 애플II 컴퓨터의 경우, 스티브 잡스와 애플이 공동으로 창업한 ⌜천재 엔지니어 스티브 워즈니악⌝이 하드웨어와 기본 시스템 소프트웨어(운영체제 포함)를 거의 도맡아 설계하고 개발한 것으로 알려져 있습니다. 그 뒤로 애플의 성공에 자극받은 기존 컴퓨터 업계의 거인 IBM이 PC 시장에 진출해서 IBM 호환기종(지금 쓰는 일반적인 PC들)이 나오게 되는데, 이 때 IBM은 운영체계를 직접 개발하지 않고 외주[外注]를 주었습니다. 이 때 빌 게이츠의 마이크로소프트사가  MS-DOS를 출시해서 IBM 호환 PC의 운영체제를 사실상 장악하고 거대한 소프트웨어 왕국을 건설했습니다. 운영체제 없이 작동하는 컴퓨터는 있을 수 없고, 어떤 응용프로그램이든 운영체제에 의존하기 마련이니까요. 그 뒤로 그래픽 기반 운영체제인 윈도우를 출시해서 그 영향력이 더욱 커졌습니다. 빌 게이츠가 세계 최고 갑부가 됐지요. 인터넷 백과사전에 서술된 바로는 그가  하루 16시간을 일했다고 가정할 때 1초마다 140 달러를 벌었다는 군요. 1시간마다 509만 달러랍니다. 우리 돈으로 대략 5억 원이지요. 8시간을 일했다면 한 시간마다 10억 원을 벌었답니다. 이것, 그 사람을 찬양해야 할 일일까요?  

  소프트웨어는 하드웨어와는 달리 물리적인 것이 아니라서 마이크로소프트같이 소프트웨어만 파는 회사의 경우 한 번 소프트웨어를 개발하면 소프트웨어를 저장할 매체(플로피 디스켓, CD, 요즘은 그냥 인터넷으로 다운로드하는 경우도 많음)의 값 말고는 별도의 비용이 그리 들지 않습니다. 몇 백원짜리 CD에 수십 만원짜리 프로그램을 저장하여 파는 것입니다(책과 비슷한 점이 있는데, 책보다 단가가 더 쌀 것 같습니다). 그런데 운영체제 없이 작동할 수 없는 컴퓨터는 없으니 컴퓨터 수요 증가와 함께 벌어들이는 돈이 엄청나게 커지는 것입니다. 게다가 MS-DOS나 윈도우는 거의 독점적 지위를 누리는 탓에 가격이 비싸서, 우리나라의 경우 불법 복제판 사용이 성행하기도 했습니다. 그리고 끊임없이 운영체제를 업그레이드 하면서 돈을 긁어 모으고 있습니다(윈도우 95, 98, ME, NT, 2000, XP, Vista, 7, 8). 비판경제학자들은 그가 벌어들이는 돈이 ‘독점 지대[rent]’에 해당한다는군요. ‘이윤’은 어찌 됐든 자본주의를 굴려가는 힘으로 작동하는데, 지대는 이와 달리 자본체제에 대해서조차 비-생산적인 존재입니다.  

  컴퓨터 프로그래밍 분야에는 이것과 정반대로 ‘오픈 소스[open source]‘라는 흐름이 있습니다. 자신이 작성한 소프트웨어의 소스를 아예 공개해서 다른 사람들이 자유롭게[곧 무료로] 사용할 수 있게 허용하는 것입니다. 컴퓨터 분야에는 알게 모르게(무료로 사용하는 것은 잘 의식하지 못하기 마련입니다) 오픈소스의 혜택을 입고 있는 부분들이 있으며, 그 중에서도 가장 유명한 것이 오픈소스 운영체제인 리눅스입니다. 리눅스의 탄생으로 오픈소스 소프트웨어만으로 구성된 컴퓨터가 생길 수 있게 됩니다. 리눅스라는 이름은 리눅스의 개발자인 핀란드의 리누스 토르발스의 이름을 딴 것입니다. 리누스라는 사람은 리눅스로 직접적인 경제적 이득을 얻지 않았으며, 지금도 프로그래머로서 일하고 있다고 알려져 있습니다.

  PC 시장에서 왕좌를 차지한 마이크로소프트가 위기에 빠진 것은 인터넷의 등장 때문입니다. 물론 아직도 PC는 사무용이나 여러 작업용으로 사용되지만, 일반적으로 가장 많이 사용하는 것은 인터넷 접속용입니다. 이 때 인터넷에 접속하기 위해 사용하는 응응프로그램을 웹브라우저라고 일컫습니다. 초창기 웹브라우저의 표준은 넷스케이프라는 회사의 네비게이터였습니다. 이후 인터넷 접속의 중요성을 간파하고 마이크로소프트에서 만든 웹브라우저가 인터넷 익스플로러인데, 마이크로소프트사는 운영체제를 장악한 거대 소프트웨어 업체로서 익스플로러를 방어하고 넷스케이프를 밀어내려고 끼워팔기 등의 갖가지 악행[惡行]을 저질렀습니다. 이후 웹브라우저의 독점적 지위를 장악한 익스플로러는 인터넷 표준을 무시한 액티브X 기술을 발표했습니다. 마이크로소프트 윈도우와 익스플로러로 거의 통일(우리나라는 좋다면 한가지로 통일되는 경향이 있는 것 같습니다. 다양성이 무시되기 일쑤입니다. 지금 우리나라 스마트폰 중 안드로이드가 차지하는 비율은 다른 나라보다 유난히 높습니다. 아이폰말고는 다른 것이 있다는 사실조차 잘 모릅니다)된 우리나라 인터넷 이용은 액티브X에 과도하게 의존하게 되었고, 그러한 역사가 과거 IT 강국을 선도했지만 지금은 오히려 우리나라 IT산업에 걸림돌이 되고 있다는 이야기도 들려옵니다. 어쨌든 이런 노력(?) 덕분인지 인터넷의 등장이라는 위기의 시대에도 PC와 마이크로소프트는 거뜬하게 살아남았습니다.

  하지만 또 다른 위기가 그들에게 닥쳐왔습니다. 스마트폰의 등장이 그것이지요. 스마트폰이 폭발적으로 대중화된 것은 애플의 아이폰 때문입니다. 애플은 운영체제 개발 경로가 좀 다릅니다. IBM 호환기종과 달리 애플은 하드웨어는 물론 운영체제도 스스로 꾸준히 개발했습니다. 애플은 IBM PC 등장 이후 개인용 컴퓨터 시장에서 밀리면서도 출판시장 등에 특화된 매킨토시라 불리는 컴퓨터로 명맥을 유지해 왔습니다(우리나라에서는 특히 구경조차 하기 힘든 것이 매킨토시입니다). 그 시절에 매킨토시는 마이크로소프트 윈도우보다 먼저 자체 개발한 그래픽 기반 운영체제인 Mac OS를 탑재했고, 이 운영체제는 현재의 Mac OS X를 거쳐 애플 아이폰의 운영체제인 iOS로 이어졌습니다(스마트폰은 똑똑한 핸드폰이라기보다는, 전화도 되는 컴퓨터에 가깝습니다).
  다시 말해 애플은 처음부터 지금까지 하드웨어와 소프트웨어를 함께 개발하고 있는 회사입니다. 애플은 아이폰으로 다시 한편 스마트폰 혁명을 주도하지만, 얼마 지나지 않아서 구글이라는 신흥 강자가 개발한 안드로이드라는 운영체제를 탑재한 스마트폰에 주도권을 빼앗겼습니다. 구글이라는 회사는 전통적 강자인 애플이나 마이크로소프트보다 훨씬 늦은 1998년에 생긴 회사로, 뛰어난 검색엔진을 기반으로 검색 서비스를 시작하여 뛰어난 검색 성능덕분에 전통적인 검색 엔진인 야후 등을 밀어내고 최고의 검색엔진이 됐습니다(누구나 새로운 사이트에 접속할 때 거의 다 검색 엔진을 거칩니다. 따라서 검색을 장악했다는 것은 인터넷을 장악했다는 말이 됩니다). 이후 검색 기능을 광고 판매와 연결시키는 비즈니스 모델(이윤 창출 방법)로 성공해서 엄청난 성장을 하게 됩니다. 예를 들어 꽃집을 검색했을 때, 검색 결과 화면에서 잘 보이는 곳에 꽃집 광고를 넣어주고 클릭수에 따라 광고비를 받는 것입니다. 검색 기능으로 인터넷을 장악한 이 회사는 PC에서도 인터넷을 기반으로 영향력을 높이려고 구글 크롬이라는 웹브라우저를 개발하여 마이크로소프트의 웹브라우저 인터넷 익스플로러에 강력한 도전장을 내밀었습니다. 이후 스마트폰의 등장과 함께, 스마트폰 쪽 인터넷 시장과 주도권 장악을 위해 구글이 야심차게 개발을 시작한 것이 안드로이드라는 스마트폰 운영체제입니다. 구글은 기존에 PC 운영체제 시장을 장악한 마이크로소프트 윈도우에 맞서 스마트폰 운영체제인 안드로이드를 공짜로 배포합니다(안드로이드는 오픈소스 운영체제 리눅스를 기반으로 만들었다고 합니다). 현재 우리나라 삼성, LG등 스마트폰 업체에서 개발한 스마트폰의 운영체제가 거의 다 이 안드로이드 운영체제를 탑재하고 있습니다. 여기에 맞서 마이크로소프트가 스마트폰용 운영체제로 내놓은 것이 윈도우 Phone입니다만, 아직 큰 세력을 형성하지 못하고 있습니다. 우리나라에서 살 수나 있는지 모르겠습니다. PC용 윈도우 8의 디자인이 기존의 아이콘 형식을 버리고, 꽉 찬 화면에 다양한 크기의 사각형 모양의 타일 형태로 바뀐 것은 스마트폰 운영체제를 염두에 둔 것으로도 보입니다.

  애플로 시작된 PC 혁명이 운영체체 등의 소프트웨어 개발로 주도권을 잡은 마이크로소프트 쪽으로 넘어갔다면, 인터넷이 생겨나고부터는 마이크로소프트의 주도권이 흔들리고 구글이라는 신흥 강자가 등장했습니다. 그 후 애플은 다시 한 번 아이폰으로 스마트폰 혁명을 일으키지만, 이번에는 신흥 강자인 구글의 운영체제(안드로이드)에 주도권을 빼앗기는 과정이 흥미롭습니다. 앞으로 또 어떤 위기와 변화가 찾아올 지 기대됩니다.

  지난 11월 정부가 소프트웨어(SW) 교육을 앞으로 초중고 교육과정에 포함시키겠다고 발표했습니다. 소프트웨어 교육의 목적은 프로그래밍 언어를 가르쳐서 프로그래밍 작성 능력을 키우기 위해서라고 합니다. 하드웨어 분야에서는 세계 수준에 올라와 있는 우리나라가 상대적으로 취약한 소프트웨어 분야도 키우겠다고 나서는 것이야 당연한 생각이지만, 그러려고 ‘소프트웨어 교과를 만들겠다’는 발상은 수긍할 수 없습니다. 소프트웨어 교육이 어린이의 보편적 발달에 온전히 기여할까요? 모든 어린이를 당장의 돈벌이가 될 사업을 키우는 데에 몰아넣다니요! 그 사업이 신통찮게 됐을 때는 그것만 주로 습득한 어린이들의 인생은 또 어찌 될까요?
  소프트웨어 개발은 그 특성상 단기적인 경제적 접근은 오히려 독이 됩니다. 컴퓨터 초창기에는 간결하고 효율적인 프로그램이 우수한 것으로 간주되기도 했지만, 컴퓨터가 발달하고 소프트웨어가 방대해지면서 유지 보수 및 관리의 문제가 커졌습니다. 따라서 초기 설계와 프로그래밍에 대한 체계적 접근과 재사용 문제 등이 매우 중요합니다. 이런 상황에서 눈앞의 실적을 위해 서둘러 프로그램을 만든다면 당장은 써먹을 수 있어도 훗날의 유지 보수나 업그레이드가 어려워서 나중의 발전에 오히려 걸림돌이 될 수 있습니다. 따라서 우리의 황폐한 소프트웨어 개발 토양부터 북돋아야 합니다. 오래 걸린다 하더라도 말입니다. IT분야의 기술의 발전과 변화가 빠르기 때문에, 좋은 프로그래머가 되려면 끊임없이 다시 공부하고 자기 개발을 해야 합니다. 그러려면 지금 산업현장에서 눈앞의 프로그램 개발에 소모품처럼 쓰이고 있는 프로그래머들의 처지부터 바꿔줘야 할 것입니다. 당장 뭔가 만들어 내라고 밤낮없이 채찍질 당하는 그들의 처지 말입니다.

  프로그래밍이란 매우 절차 지향적이고, 높은 추상적인 사고를 요구하는 작업입니다. 수학적, 논리적 사고를 잘 할 줄 알아야 합니다. 게다가 인터넷의 발전이나 스마트폰의 예에서 보듯이 소프트웨어 분야에도 프로그램만 잘 짜는 것이 아닌 ‘새로운 발상’이 필요합니다. 어느 정도까지는 프로그래밍 실력이 중요하지만, 어느 수준을 넘어서면 무엇을 만들 것인지가 더 중요한 문제가 됩니다(무언가를 정해주고 시키면 잘하지만, 아무거나 하라고 하면 아무것도 못하는 사람이 되어서는 안 됩니다). 프로그램도 인간이 사용하는 것이므로 사람들에 대한 깊은 이해가 있어야 무엇을 개발할지, 그 아이디어도 떠오릅니다. 길게 봐서는 보편적 인문교육을 풍부하게 습득한 사람만이 훌륭한 프로그래머로 성장하겠지요. 소프트웨어 교육이 별도로 필요하다면 그 목표도 눈앞의 단기적 성과 창출이 아니라 학생들의 추상적 사고를 한껏 북돋는 것이 돼야 합니다. 그런데 과연 ‘소프트웨어 교과’가 그런 교과가 될 수 있을까요?