아마 고등학교에 갓 입학 했을 때의 일이었을거다. 내 친구가 흥미로운 논쟁 거리를 가지고 와서 그 친구와 잠시 토론을 벌였었다. 그 친구의 주장에 따르면 나올만한 소프트웨어는 이미 다 개발 되었으니 앞으로 게임을 제외하고는 새로운 형태의 소프트웨어가 나오지 않을것이라는 것이었다. 운영체제, 컴파일러, 스프레드시트, 워드 프로세서, 웹 브라우저, 그래픽 편집기, 멀티미디어 재생기 등 나올만한 물건들은 이미 다 나왔기 때문에, 새로운 소프트웨어가 개발된다고 해도 그건 어디까지나 이전부터 존재했던 형태의 소프트웨어를 응용하거나 개선하는 정도지, 더이상 완전히 새로운 형태의 소프트웨어는 나올 수가 없다는게 골자였다. 그 친구의 주장은 어딘가 묘하게 설득력이 있었는데, 난 쉽게 그 친구의 의견에 동의할 수 없었다. 소프트웨어 엔지니어로서의 꿈을 가지고 있던 고딩 꼬꼬마였던 나에게는 어쩌면 그 친구의 주장이 나의 미래의 밥줄(?)을 위협하는것 같이 들렸을지도 모른다.

10년 전, 그러니까 내가 고딩 새내기였을 때, 일반인들이 접할 수 있는 컴퓨터의 형태는 매우 제한되어 있었다. 데스크탑과 랩탑이 주를 이뤘고, PDA를 들고 다니는 사람들도 있었지만 굉장히 드문 일이었다. 그 당시의 휴대 전화기는 컴퓨터라는 단어의 정의상 컴퓨터는 맞지만, 범용 컴퓨터라기보다는 전화와 문자 메세지 기능이 주를 이루는 특수 목적 장비에 가까웠다. 입력 장치도 키보드와 마우스가 주를 이뤘었다. 터치 스크린이 있긴 했었지만, 오늘날 흔히 볼 수 있는 정전식 터치 스크린이 아니라 감압식 터치 스크린이 대부분이라 즉각적인 반응을 보여주는 자연스러운 터치 동작 인식을 구현하기도 힘들었다.

그로부터 무려 10년이 지난 지금, 문득 그 친구가 했던 말이 떠올라서 이렇게 글을 쓰게 됐다. 지난 10년간 소프트웨어 세상에서 일어났던 많은 일들이 말해주듯, 그 친구의 예언은 보기 좋게 빗나갔다. 나의 밥줄이 무사하다는 것이 귀납적으로 증명된 것이다(!) 하나하나 증거를 제시하기 시작하면 얘기가 너무 길어지니까 그 중에 몇가지만 추려서 얘기해보겠다.

소프트웨어 이야기를 하기에 앞서, 먼저 컴퓨터라는 단어가 가지는 의미부터 다시 짚어보자. 10년 전과는 다르게 모바일 컴퓨터의 성능이 눈에 띄게 발전했고, 그에 따라서 모바일 컴퓨터들의 쓰임새가 다양해졌다. 각종 스마트폰과 태블릿, 그리고 MP3 플레이어들까지 이제는 제법 범용 컴퓨터에 가까워졌다. 우리가 흔히 보는 각종 스마트폰들은 분명히 ‘전화기’이지만 다양한 앱들을 이용해서 전화와 문자 이외의 여러가지 일을 처리할 수 있게 됐다. 스마트폰에서 웹서핑을 하고 이메일을 작성하는 것은 물론, 여러장의 사진을 합쳐 파노라마 사진을 찍는가 하면1, 주변 장치의 도움을 받아 신용카드를 ‘긁을’ 수 있고, 혈압과 혈당도 확인할 수 있다.

입력 장치도 다양해졌다. 10년 전에는 키보드와 마우스가 주된 입력 장치였지만, 오늘날에는 그 이외에도 정전식 터치 스크린, 가속도 감지기(accelerometer), 근접각 센서(proximity sensor), 자기장 센서(magnetometer), 자이로스코프(gyroscope), GPS 등 다양한 형태로 데이터를 입력 받는 일이 가능해졌다. 스마트폰에 장착된 가속도 감지기 덕분에 버튼을 누르는 형태가 아닌 스마트폰을 흔들거나 기울여서 사용하는 앱들도 많이 출시되었다2. 키보드로 타이핑을 하는 대신 사용자의 음성을 인식해서 비서 역할을 수행하는 Siri 같은 물건들도 나왔고, 나의 지리적 위치가 프로그램의 입력값이 되기도 한다. 일반적인 가시광선 카메라와 적외선 카메라를 이용하여 사용자의 동작을 인지할 수 있는 Microsoft의 Kinect를 생각해보자. Fruit Ninja와 같은 게임을 손가락이 아닌 온 몸으로 즐기는 일이 가능해졌다.

우리가 일상 생활에서 흔히 접하는 웹 서비스에서도 많은 변화가 있었다. Ajax라는 개념조차 생소하던 시절 웹 애플리케이션이 수행할 수 있는 일은 굉장히 제한적이었다. 상태 유지가 되지 않는(stateless) 프로토콜인 HTTP의 특성상 클라이언트가 서버에 요청을 보내고 서버가 그에 대한 적당한 응답을 해주면 그걸로 HTTP 통신은 끝이었다. 그 당시 웹 애플리케이션들도 HTTP의 이러한 특성을 반영했었는데, 한번 웹 페이지가 로드(load) 되면 그 페이지가 새로 로드되기 전 까지는 서버와의 상호작용이 없는 것이 일반적이었다. 이러한 고정 관념을 깨는데 큰 공을 세운 기업 중 하나가 구글이라고 생각한다. 내가 Gmail을 본격적으로 사용하기 시작한것이 2004년 무렵이었는데, 그 당시 Gmail의 웹 인터페이스가 보여줬던 사용자 경험(UX)은 신선한 충격으로 다가왔었다. “웹 앱3으로 이런것도 가능하구나” 하는걸 깨닫게 해줬다고나 할까. 구글은 그 후로 Google Docs4, Google Maps, Google Wave5 등 웹 애플리케이션에 대한 기존의 고정관념을 깨는 서비스들을 속속 공개했었다.

비 전문가들에게는 잘 알려져있지 않지만, 분산형 소스코드 형상 관리 도구(DRCS)인 Git이나 Mercurial도 2005년 중반이 되어서야 등장했다. 분산형 형상 관리 도구들은 기존의 형상 관리 도구들과는 큰 차이를 보이는데6, 이러한 차이점들이 오픈소스의 특성과 잘 들어맞아서 굉장한 동반 상승 효과를 내고 있다[citation needed]. 지금까지 그래왔듯이 앞으로도 오픈소스 프로젝트 발전에 있어서 견인차 역할을 하지 않을까 한다.

분산 컴퓨팅 분야에 있어서도 많은 변화가 있었다. 전통적으로 확장 가능한(scalable) 시스템을 구축한다는 것은 수직적 확장성(vertical scalability)을 의미했었다. 단일 시스템에 추가적인 프로세서와 메모리를 장착하거나, 더 많은 하드디스크를 장착함으로써 더 큰 용량을 갖는 시스템을 구축하는 것이다7. 하지만, 단일 시스템이 가질 수 있는 프로세서, 메모리, 하드디스크의 개수에는 분명히 상한선이 있다. 한 대의 컴퓨터에 50,000개의 하드디스크를 장착할 수는 없는 노릇이다. 그와 상반되는 개념으로 수평적 확장성(horizontal scalability)이 있는데, 단일 시스템의 용량을 늘리는 것이 아니라 컴퓨터 대수를 늘리는 것이다. 수직적 확장성을 가지는 시스템과 비교했을 때 가지는 가장 큰 장점은 확장하는 비용이 상대적으로 적다는 것이다. 노드(node)들 간의 통신 문제만 해결할 수 있다면 거의 무한대로 확장하는것도 가능하다.

2013년 2월을 기준으로 시장 가격을 비교해보자. Intel Xeon E5-2690으로 듀얼 프로세서 시스템을 구축한다고 했을 때, 프로세서 개당 가격은 약 $2,070이고, 호환되는 메인보드의 가격은 $290부터 $790까지 다양하다. 하지만 Intel Core i5-3330을 탑재한 시스템 네 대로 비슷한 성능을 낼 수 있는데8, 이 프로세서의 개당 가격은 약 $190이고, 호환되는 메인 보드의 가격은 $40부터 시작한다. Xeon 프로세서로 고성능 단일 시스템을 구축할 경우 프로세서와 메인보드의 가격만으로 최소 $4,430의 비용이 소요되지만, i5의 경우는 $1,400이 요구될 뿐이다. 고성능 시스템 한 대 보다 적당한 성능의 시스템을 여러대 갖춰서 일을 처리하는 쪽이 비용면에서 효율적이라는 얘기다.

하지만 컴퓨터만 여러대가 있다고 해서 누구나 이렇게 수평적으로 확장 가능한 시스템을 구축할 수 있는 것은 아니다. 사실 분산 처리는 상당한 수준의 수학적 배경 지식과 고도의 기술이 요구되는 작업이다. 분산 컴퓨팅 관련 기술이나 분산 컴퓨팅 환경을 제공해주는 서비스는 굉장히 많은데, 나는 구글이 가진 기술에 초점을 맞춰서 얘기해보고자 한다.

2004년에 구글에서 내놓은 MapReduce에 대한 논문은 분산 컴퓨팅의 역사에 한 획을 긋게 된다9. MapReduce는 여러대의 일반적인 컴퓨터(commodity hardware; 높은 성능을 내기 위한 특별한 장치를 갖추지 않은 컴퓨터)로 대용량의 데이터를 효율적으로 처리할 수 있는 방법을 제시하는 프로그래밍 모델인데, 대표적인 구현체(implementation)로는 구글의 데이터가 저장되는 데이터베이스인 BigTable이 있다. 구글은 백만대에 가까운 서버를 운영하고 있는 것으로 추정되는데10 11, 이 수많은 서버들이 서로 협력하여 규모가 큰 일을 단시간 내에 처리할 수 있는 것을 가능하게 하는것도 MapReduce 이다. 전 세계에서 수많은 사람들이 동시에 구글 검색 서비스를 이용해도, 조 단위 개수의 웹 페이지들 중에서 내가 원하는 검색 결과를 돌려주는데 채 0.2초가 걸리지 않는것도 MapReduce 덕분이다12.

MapReduce의 영향력은 여기서 끝나지 않았다. 논문이 발표된 이후 아파치 재단을 비롯한 다른 조직에서도 여러가지 형태의 MapReduce 구현체를 내놓기 시작했다. 구글 이외의 조직에서 내놓은 MapReduce 구현체로는 아파치 재단의 Hadoop이 유명한데, Hadoop과 HDFS, HBase, Cassandra 등의 관련 프로젝트들은 2004년 당시에 존재하지 않았던 것들이었다. 2010년에는 Hadoop을 기반으로 동작하는 분산형 데이터베이스인 Hypertable도 등장했다. Hypertable은 C++로 구현된 덕분인지 Java로 구현된 HBase보다 성능이 좋은 것으로 알려져있다13. 요즘 유행병처럼 번지고 있는 유행어중 하나인 빅 데이터(big data)가 그 유명세를 얻게 된 이유중 하나가 바로 MapReduce 모델이 아닐까 한다.

클라우드 컴퓨팅도 요즘 유행이다. 심지어 클라우드 컴퓨팅과 별 관련이 없거나 클라우드 컴퓨팅을 도입하는데 들어가는 비용이 얻을 수 읻는 이득보다 큰 경우에도 클라우드 컴퓨팅을 가져다 붙이는 사람들도 있다[citation needed]. 클라우드 컴퓨팅을 얘기하자면 아마존을 빼놓을 수가 없는데, 1994년에 온라인 서점으로 사업을 시작한 아마존은 지금 세계 최대의 클라우드 컴퓨팅 서비스(IaaS14) 제공자가 됐다15. 이건 어디까지나 내 추측일 뿐이긴 하지만, 아마존에서 발생하는 거래 수가 급격하게 증가함에 따라서 전통적인 기술로는 더이상 그 수요를 감당할 수 없어서 자체적으로 여러가지 분산 컴퓨팅 기술을 연구하고 실제 서버에 도입하다 보니 자신들이 가진 기술을 상용화 하여 외부 고객들에게도 제공하게 된게 아닐까 한다.

아마존에서 제공하는 클라우드 컴퓨팅 서비스를 통틀어 Amazon Web Services (AWS)라고 칭하는데, 일반적으로 잘 알려진 EC2와 S3 이외에도 수많은 서비스들이 존재한다. 시간당 일정 요금을 내고 아마존 클라우드에 있는 가상 컴퓨터(virtual machine)를 사용하는 EC2나, 읽기 전용 오브젝트 스토리지 서비스인 S3도 2003년 당시에는 존재하지 않았던 것들이다. 그리고 이런 서비스를 기반으로 해서 최종 사용자들한테 실질적인 가치를 제공하는 드랍박스Spotify 같은 서비스들도 그 당시에는 존재하지 않았었다.

구글도 여러가지 클라우드 컴퓨팅 서비스를 제공하는데, 그 중 하나가 구글 앱 엔진(Google App Engine)이다. 나의 실험실도 GAE에서 호스팅 되고 있다. 전통적인 웹 호스팅 서비스에서는 사용자가 자신의 웹 서비스가 어느정도의 자원을 사용할 것인가를 예측해서 거기에 맞는 요금을 지불하는게 일반적이다. 예를 들면, 이번에 런칭하는 웹 서비스는 100GB 정도의 저장 공간이 필요하고, 월 1,000GB 정도의 트래픽이 발생할 것으로 예상 되니 연간 $200을 호스팅 업체에 지불하고 서비스를 받는 방식이다. 내가 사용하게 될 서버와 IP 주소도 정해져있다. 하지만 GAE는 이러한 웹 호스팅 서비스와는 큰 차이를 보인다. 요금 지불도 내가 사용한 만큼만 내고, 내 웹 서비스가 어떤 서버에 호스팅 될것인지는 알 수 없다. 수많은 구글의 서버 중 일부에 내 웹 서비스 코드와 데이터의 복사본(replica)이 올라가고, 접속자의 지리적 위치나 다른 여러가지 매개 변수(parameter)에 의해서 어떤 서버가 실제로 내 웹 서비스를 구동하게 될 것인지가 결정된다. 어제는 장사가 안 돼서 트래픽이 5GB밖에 발생하지 않았는데, 오늘은 내 서비스가 뉴스에 보도 되는 바람에 100GB의 트래픽이 발생했다면 거기에 맞는 요금을 지불하면 된다16. 사실 전통적인 웹 호스팅 서비스에서는 요금의 유연성 뿐만이 아니라, 이용자가 갑자기 증가하면 서비스가 눈에 띄게 느려지거나 아예 먹통이 되는 경우가 발생하는게 더 심각한 문제였다. GAE에서는 적어도 그러한 문제들에 대해서 고민할 필요가 없다17. GAE는 2008년 4월에 일반에 공개된 서비스이고, 구글 클라우드에 내 웹 앱을 배치(deploy)하는 소프트웨어는 분명히 이전까지 존재하지 않았던 새로운 형태의 소프트웨어이다.

사실 VMware같은 가상화 솔루션이나 BigTable, MongoDB, Hypertable 같은 비관계형 데이터베이스(non-relational database)에 대해서도 얘기해 보고 싶지만, 한번 얘기를 시작하면 포스팅이 굉장히 길어질것 같으므로 이들 주제에 관한 얘기는 나중에 따로 시간을 내어서 하는게 좋을것 같다.

내 예상으로는 앞으로 5-10년 정도는 전 세계의 소프트웨어 기업들이 우리 눈에 보이는 모든 것들에서 앱을 실행시킬 수 있는 환경을 구축하는데 혈안이 되어있을것 같다. 냉장고에도, 세탁기에도, 화장실 거울에도 앱을 띄울 날도 멀지 않았다. 냉장고 안의 계란과 우유가 다 떨어져간다고 알려주는 앱, 세탁이 다 되었다고 내 폰에 알림을 보내줄 수 있는 앱, 오늘 날씨와 주요 신문 기사를 화장실 거울에 띄워주는 앱 말이다. 남성분들에게는 스포츠 관련 기사를, 여성분들에게는 피부 관리 팁을 보여줄 수도 있을것 같다. 화장실 거울에 아마존 앱이 설치되어 있다면 아마존은 내가 어제 봐뒀던 물건들을 구입하라고 살살 꼬득일게 뻔하다. 몇년 후에는 내가 지금 쓰고 있는 안경 대신 구글 안경을 쓰고 다닐지도 모른다18. 접을 수 있는 디스플레이가(flexible display) 활성화 되면 종이 신문이 아닌 디스플레이 신문이 나올 것이고, 신문에서 바로 YouTube 동영상을 보는 일도 가능해질 것이다. 원격으로 우리집의 가스 스토브를 끄는 일도, 차고 문이 닫혀있는지 확인하는것도 공상과학영화에서나 볼 수 있는 일이 아닌 생활의 일부가 될 날이 멀지 않았다.

깃헙에 호스팅 되고 있는 수많은 프로젝트들을 생각해보자. 나는 그 프로젝트들 하나하나가 무한한 가능성을 품고 있다고 생각한다. 나와 같은 소프트웨어 개발자들에게는 흥미진진한 일이 아닐 수 없다. 10년 후에 소프트웨어 세상은 어떻게 바뀌어있을까? 전 세계의 수많은 소프트웨어 엔지니어들이 만들어낼 수많은 작품들을 기대해본다.

  1. 파노라마 렌즈 없이 여러 장의 사진을 합쳐서 파노라마 사진을 찍게 해주는 앱이 있는데, 자이로스코프의 도움 없이는 힘든 일이다. 

  2. 요즘 유명세를 타고 있는 김재석의 원작을 이어받아 내가 2009년에 출시했던 아이폰 게임 CQube도 그 중 하나다. 

  3. 응용 프로그램을 뜻하는 애플리케이션(application)을 줄여서 앱(app)이라 부른다. 

  4. 현재의 이름은 Google Drive이다. 

  5. 2012년 4월에 서비스가 만료되어 지금은 읽기만 가능하다. 자세한 내용은 이 문서를 참고. 

  6. http://boxysystems.com/index.php/5-fundamental-differences-between-git-svn/ 

  7. http://en.wikipedia.org/wiki/Scalability#Scale_vertically_.28scale_up.29 

  8. http://www.cpubenchmark.net/cpu_list.php 

  9. 이전에도 여러번 얘기했지만, 구글을 세계 정복을 꿈꾸는 회사임이 틀림없다. 

  10. http://www.datacenterknowledge.com/archives/2011/08/01/report-google-uses-about-900000-servers/ 

  11. 네이버의 운영 주체인 NHN이 보유하고 있는 서버는 수만대 수준으로 추정된다19 20

  12. 구글에서 ‘cloud’로 검색해보면 약 1,470,000,000개의 결과가 있고, 검색 시간은 0.18초가 소요되었다고 나온다. 

  13. http://hypertable.com/why_hypertable/hypertable_vs_hbase_2/ 

  14. Infrastructure as a Service (IaaS)를 한국어로 어떻게 바꿔야 할지 몰라서 ‘클라우드 컴퓨팅 서비스’라고 뭉뚱그려 표현했다. 

  15. http://gevaperry.typepad.com/main/2010/09/have-google-app-engine-and-microsoft-azure-surpassed-rackspace.html 

  16. GAE는 무료로 이용할 수 있는 한도가 있는데, 내 실험실은 아직 접속자가 많지 않아서 무료 이용 한도 내에서 이용중이다. 

  17. 기술적인 고민 거리는 덜었지만, 그 대신에 경제적인 고민 거리를 안게 된다는 문제점은 있다. 

  18. 사실 지금 구글이 구글 안경 평가단을 모집하고 있는데, 구글 안경은 구글에서 제공해주는 것이 아니라 각자 $1,500을 지불하고 구입해야 한다. 가격이 더 많이 내려갈때 까지 구입할 의사는 없다. 

  19. http://blog.naver.com/PostView.nhn?blogId=hongjig&logNo=150012339140 

  20. http://gigglehd.com/zbxe/index.php?mid=bbs&document_srl=5307475