2018 코드게이트 해킹시연 공모전 장려상 수상

 IT, 정보보호  Comments Off on 2018 코드게이트 해킹시연 공모전 장려상 수상
Mar 262018
 

우리 학과 표상영, 정재훈, 황선홍 학생이 2018 코드게이트 해킹시연 공모전에서 장려상을 수상하였습니다. 제목은 “Bring Your Cook!e”…

대규모 웹사이트들에서 사용자의 편의성 향상을 위해 쿠키를 이용한 자동로그인 서비스를 제공하는데요, 로그인된 사용자에게 서버가 쿠키를 발급해주고 사용자가 다음번 접속시 쿠키를 제시하면 서버는 사용자가 로그인된 것으로 인정해줍니다. 문제는 이러한 쿠키로그인을 평문채널로 통신하는 경우 동일한 쿠키를 반복사용하는 것이므로 네트워크 도청공격자가 쿠키를 쉽게 탈취할 수 있고 사용자의 계정을 도용할 수 있다는 것입니다. 이러한 해킹 시연을 이해하기 쉽게 잘 만들었군요.

쿠키를 이용한 자동로그인은 https 암호화된 통신채널로 사용해야 하며 평문채널로 자동로그인 하는 것은 절대 금지해야 하겠습니다.

 

 Posted by at 10:17 AM

OWASP Top 10 – 2017년 발표

 IT, 정보보호  Comments Off on OWASP Top 10 – 2017년 발표
Apr 242017
 

http://www.boannews.com/media/view.asp?idx=54393 

OWASP Top 10 – 2017…4년마다 한 번씩 보안위협 발표
올해 버전, 취약한 공격 방어와 취약한 API 추가

[보안뉴스 원병철 기자] 4년마다 한 번씩 취약점 Top 10을 발표하는 OWASP(The Open Web Application Security Project)가 지난 4월 초 ‘OWASP Top 10 – 2017’을 발표했다. 비영리재단인 OWASP는 어떠한 기업과도 제휴나 협약을 맺지 않고, 상업적인 목적이나 이윤 압박이 없기 때문에 애플리케이션 보안에 대해 공정하고 실질적이며, 효율적인 정보를 제공하고 있다.

OWASP Top10은 8개의 컨설팅 회사와 3개의 제품 공급업체를 포함해 애플리케이션 보안전문 업체의 11개 대형 데이터셋을 기반으로 작성된다. 이번 2017 버전은 지난 2013년 이후 처음으로 두 개의 항목이 신설됐다. 첫 번째는 취약한 공격 방어항목이며, 또 하나는 취약한 API 항목이다.

△ 인젝션
SQL, OS, XXE, LDAP 인젝션 취약점은 신뢰할 수 없는 데이터가 명령어나 쿼리문의 일부분이 인터프리터로 보내질 때 발생한다. 공격자의 악의적인 데이터는 예상하지 못하는 명령을 실행하거나, 적절한 권한 없이 데이터에 접근하도록 인터프리터를 속일 수 있다.

▲ 자료제공 : 블랙팔콘 이지혜

△ 인증 및 세션관리 취약점
인증 및 세션 관리와 관련된 애플리케이션 기능이 종종 잘못 구현되어 공격자에게 취약한 암호, 키 또는 세션 토큰을 제공해 다른 사용자의 권한을 (일시적으로 또는 영구적으로) 얻도록 익스플로잇한다.

▲ 자료제공 : 블랙팔콘 이지혜

△ 크로스 사이트스크립팅(XSS)
XSS 취약점은 애플리케이션이 적절한 유효성 검사 또는 이스케이프처리 없이, 새 웹 페이지에 신뢰할 수 없는 데이터를 포함하거나, JavaScript를 생성할 수 있는 브라우저 API를 사용해 사용자가 제공한 데이터로 기존 웹 페이지를 업데이트한다. XSS를 사용하면 공격자가 희생자의 브라우저에서 사용자 세션을 도용하거나, 웹사이트를 변조시키거나, 악성사이트로 리다이렉션 시킬 수 있다.

▲ 자료제공 : 블랙팔콘 이지혜

△ 취약한 접근제어
취약한 접근제어는 인증된 사용자가 수행할 수 있는 작업에 대한 제한이 제대로 적용되지 않는 것을 의미한다. 공격자는 이러한 결함을 악용해 다른 사용자의 계정에 액세스하거나, 중요한 파일을 보고 다른 사용자의 데이터를 수정하거나, 접근 권한을 변경하는 등 권한 없는 기능 또는 데이터에 접근할 수 있다.

▲ 자료제공 : 블랙팔콘 이지혜

△ 보안 설정 오류
바람직한 보안은 애플리케이션, 프레임워크, WAS, 웹 서버, DB 서버 및 플랫폼에 대해 보안 설정이 정의되고 적용되어 있다. 보안 기본 설정은 대부분 안전하지 않기 때문에 정의와 구현, 그리고 유지라는 3박자가 잘 이루어져야 한다. 또한, 소프트웨어는 최신 버전으로 관리해야 한다.

▲ 자료제공 : 블랙팔콘 이지혜

△ 민감 데이터 노출
대부분의 웹 애플리케이션과 API는 금융정보, 건강정보, 개인식별정보와 같은 민감정보를 제대로 보호하지 못한다. 공격자는 신용카드사기, 신분도용 또는 다른 범죄를 수행하는 취약한 데이터를 훔치거나 변경할 수 있다. 브라우저에서 중요 데이터를 저장 또는 전송할 때 특별히 주의해야 하며, 암호화와 같은 보호조치를 취해야 한다.

▲ 자료제공 : 블랙팔콘 이지혜

△ 공격 방어 취약점
대부분의 애플리케이션과 API에는 수동 공격과 자동 공격을 모두 탐지하거나 방지·대응할 수 있는 기본 기능이 없다. 공격 보호는 기본 입력 유효성 검사를 훨씬 뛰어넘으며, 자동 탐지, 로깅, 응답, 익스플로잇 시도 차단을 포함한다. 애플리케이션 소유자는 공격으로부터 보호하기 위해 패치를 신속하게 배포할 수 있어야 한다.

▲ 자료제공 : 블랙팔콘 이지혜

△ 크로스 사이트 요청 변조(CSRF)
CSRF 공격은 로그인된 피해자의 취약한 웹 애플리케이션에 피해자의 세션 쿠키와 기타 인증정보를 포함해 위조된 HTTP 요청을 강제로 보내도록 한다. 예를 들어, 공격자가 취약한 어플리케이션이 피해자의 정당한 요청이라고 오해할 수 있는 요청들을 강제로 만들 수 있다.

▲ 자료제공 : 블랙팔콘 이지혜

△ 알려진 취약점이 있는 컴포넌트 사용
컴포넌트, 라이브러리, 프레임워크 및 다른 소프트웨어 모듈은 애플리케이션과 같은 권한으로 실행된다. 이런 취약한 컴포넌트를 악용해 공격하는 경우, 심각한 데이터 손실이 발생하거나 서버가 장악된다. 알려진 취약점이 있는 구성 요소를 사용하는 애플리케이션과 API는 어플리케이션을 약화시키고 다양한 공격과 영향을 줄 수 있다.

▲ 자료제공 : 블랙팔콘 이지혜

△ 취약한 API
최신 어플리케이션에는 일종의 API (SOAP / XML, REST / JSON, RPC, GWT 등)에 연결되는 브라우저 및 모바일 애플리케이션의 자바스크립트(JavaScript)와 같은 여러 클라이언트 애플리케이션 및 API가 포함되는 경우가 많다. 이러한 API는 대부분 보호되지 않으며 수많은 취약점을 포함한다.

▲ 자료제공 : 블랙팔콘 이지혜

OWASP 측은 이번 Top 10외에도 ‘OWASP Developer’s Guide’와 ‘OWASP Cheat Sheet Series’에서 수백 개의 웹 어플리케이션 위협요소를 다룬다며, 웹 애플리케이션 개발자라면 반드시 참고할 것을 권고했다. 또한, 보안 취약점은 아주 복합적이며 엄청난 코드 더미 사이에 숨어 있기 때문에 좋은 도구를 활용할 수 있는 보안전문가를 활용하라고 조언했다.

무엇보다 보안이 개발조직 전반에 걸쳐 필수적인 요소라고 인식하는 문화를 만드는 것이 중요하다고 OWASP는 강조했다.

한편, OWASP 한글 번역본은 블랙팔콘(Black Falcon) 이지혜 씨가 제공했으며. 전문은 블랙팔콘 블로그에서 받을 수 있다.

 Posted by at 8:47 AM

암호의 역사

 IT, 정보보호  Comments Off on 암호의 역사
Jun 122015
 

KISA에 있는 암호의 역사에 관한 다음 페이지에서 내가 저자로 참여한 “훤히 보이는 정보보호”의 내용을 거의 그대로 이용했군요. 내가 쓴 책의 내용이 이렇게 활용되는 것을 보니 매우 반갑습니다. 그런데 출처를 정확히 밝히고 이용하면 좋았을텐데요.

http://seed.kisa.or.kr/iwt/ko/intro/EgovHistory.do

인류의 수천 년 역사 속에서 위대한 왕과 장군들은 모두 효율적인 통신 수단에 의존해 나라를 다스리고 군대를 움직여 왔다 해도 과언이 아니다. 하지만 동시에 지도자들은 이러한 통신 내용이 적의 손에 들어가 귀중한 비밀이 누설되거나 중요한 정보가 들어가지 않을까 늘 우려했다. 그런 의미에서 적이 중요한 정보를 가로챌 수 있다는 위협이야말로 암호를 발시킨 원동력이었다고 할 수 있다. 이렇듯 비밀 보장이 절실히 필요해짐에 따라 각국 정부는 가능한 한 가장 안전한 암호를 만들어 내고, 이를 이용해 통신의 보안성을 확보하는 부서를 운영하게 된다.

이에 맞서 적국에서는 거기에 담긴 비밀을 빼내려는 암호 해독가를 동시에 양성했다. 암호 해독가들은 언어를 재료로 이용하는 연금술사로, 무작위로 모아놓은 듯한 부호에서 의미를 가진 단어를 뽑아내기 위해 일생을 바치는 신비하고도 특별한 분야의 사람들이다. 암호의 역사는 바로 암호를 만드는 사람들과 이를 해독하려는 사람들이 수백 년에 걸쳐 벌여온 전쟁의 역사이다. 지성을 무기로 한 이 군비 경쟁은 때로는 역사에 극적인 영향을 미치며 그 경로를 바꿔놓기도 했다.

암호의 어원은 그리스어의 비밀이란 뜻을 가진 크립토스(Kryptos)로 알려져 있다. 이는 평문을 해독 불가능한 형태로 변형하거나 암호화된 통신문을 원래의 해독 가능한 상태로 변환하기 위한 모든 수학적인 원리, 수단, 방법 등을 취급하는 기술이나 과학을 말한다. 즉, 암호란 중요한 정보를 다른 사람들이 보지 못하도록 하는 방법을 의미한다.

암호 기술의 발전 역사를 구분할 때 흔히 두 번의 큰 전환점을 기준으로 고대 암호, 근대 암호, 현대 암호 등의 세 단계로 나눠진다. 첫 번째 전환점은 1920년대, 1, 2차 세계 대전에서 무선 통신 기술의 발전을 기반으로 여러 가지 기계적, 전자적 암호 장치를 개발하고 사용한 것이었고, 두 번째 전환점은 1970년대 들어 컴퓨터 사용이 활발해지면서 컴퓨터를 이용한 암호 기술이 발전한 것이다.

이러한 전환점을 기준으로 고대로부터 1, 2차 세계 대전 이전가지 사용된 초보적인 암호 기술들을 고대 암호라고 하면, 1970년대까지 복잡한 기계 장치와 전자 장치들을 이용한 암호 기술을 근대 암호, 컴퓨터가 개발된 이후 컴퓨터를 이용하는 암호 기술을 현대 암호라고 부른다.

고대 암호

고대 봉건 사회에서는 황제나 군주가 지방 관리에게 보내는 비밀문서, 전쟁 중의 작전 지시와 보고, 첩자들과의 통신 등 전쟁이나 첩보 시에 정보를 전달해야 하는 경우에 다양한 비밀 통신 기법들이 사용되었다. 예를 들어, 멀리 기밀 정보를 전달해야 하는 경우에는 사자의 머리를 깎고 메시지를 쓴 후 머리를 길러서 보내면 받는 측에서는 사자의 머리를 깎고 메시지를 읽도록 하였다.

또 종이에 쓴 메시지가 그냥 보이지 않지만 불빛에 약품 처리를 하면 메시지가 나타나도록 하는 방법, 비밀 노출을 방지하기 위해 말로 전달하도록 하는 방법 등이 다양하게 사용되었다. 이러한 비밀 통신 방법을 스테가노그래피(Steganography)라고 하는데 적들도 이 통신 방식을 알고 있으면 비밀을 유지하기 어렵다는 한계를 갖고 있다.

스키테일 암호

기원전 400년경 고대 그리스의 군사들은 스키테일 암호라고 불리는 전치 암호(Transposition cipher, 문자의 위치를 서로 바꾸는 암호)를 사용한 기록이 있다. 특정 지름을 갖는 막대에 종이를 감고 평문을 횡으로 쓴 다음 종이를 풀면 평문의 각 문자는 재배치되어 정보를 인식할 수 없게 되는데, 암호문 수신자가 송신자가 사용한 막대와 지름이 같은 막대에 종이를 감고 횡으로 읽으면 평문을 읽을 수 있다. 여기서 막대의 지름은 송신자와 수신자 사이에 공유된 비밀키가 된다.

시저(Caesar) 암호

로마의 황제였던 줄리어스 시저(Julius Caesar)는 시저 암호라고 불리는 환자 암호(substitution cipher, 문자를 다른 문자로 치환하는 암호)를 사용하였다. 시저는 가족과 비밀 통신을 할 때 각 알파벳순으로 세자씩 뒤로 물려 읽는 방법으로 글을 작성했다. 즉 A는 D로, B는 E로 바꿔 읽는 방식이었다. 수신자가 암호문을 복호화하려면 암호문 문자를 좌측으로 3문자씩 당겨서 읽으면 원래의 평문을 얻을 수 있다. 송신자와 수신자는 몇 문자씩 이동할지를 비밀키로 하여 바꿔가면서 사용할 수 있다.

시저는 브루투스에게 암살당하기 전 가족들로부터 다음과 같은 긴급 통신문을 받았다. 시저가 받은 편지에는 ‘EH FDUHIXO IRU DVVDVVLQDWRU’라 되어 있었다. 3글자씩 당겨서 읽어보면 뜻은 ‘BE CAREFUL FOR ASSASSINATOR’, 즉 ‘암살자를 주의하라’는 것이었다. 당시 시저의 권세를 시기했던 일당은 시저를 살해할 암살 음호를 꾸미고 있었으며 시저 자신도 이를 어느 정도 눈치 채고 있었다. 하지만 시저는 구체적으로 암살자가 누구인지 알 수 없었다. 결국 암호문을 전달받은 당일 시저는 원로원에서 전혀 생각지도 못했던 브루투스에게 암살당하면서 “브루투스, 너마저…….”라는 말을 남겼다.

악보 암호

악보 암호는 전설적인 스파이 마타하리(본명은 마그레타 G. 젤러, Margaretha Geertruida Zelle)가 사용했던 방식이다. 마타하리는 일명 ‘첩보원 H21’이란 이름으로 프랑스 장교에 접근해 군사 기밀 정보를 독일에 빼돌렸는데, 이때 비밀 통신에 사용된 암호가 악보였다. 일정한 형태의 음표에 알파벳 하나씩을 대응시킨 형태로 얼핏 보기에 평범한 악보처럼 보이지만, 실제로 연주하면 전혀 ‘음악’이 되지 않는다. 마타하리의 첩보 활동은 20여만 명에 달하는 프랑스군을 죽음으로 몰고 갔다. 그녀는 제 1차 세계 대전이 끝나기 1년 전 프랑스 정보부에 체포돼 사형 당했다.

근대 암호

17세기 근대 수학의 발전과 함께 암호 기술도 발전하기 시작했는데, 프랑스 외교관이었던 Vigenere가 고안한 키워드를 이용한 복수 시저 암호형 방식, Playfair가 만든 2문자 조합 암호 등 다양한 암호 방식으로 발전하였다.

20세기 들어서는 통신 기술의 발전과 기계식 계산기에 대한 연구를 바탕으로 두 차례의 세계 대전을 통해 암호 설계와 해독에 대한 필요성이 높아지면서 암호에 대한 연구가 더욱 활발하게 진행되었다. 근대 암호의 이론적 기초가 된 논문은 1920년 Freidman이 발표한 ‘일치 반복률과 암호 응용’과 1949년 Shannon이 발표한 ‘비밀 시스템의 통신 이론’을 들 수 있다. Shannon은 논문에서 일회성 암호 체계가 안전함을 증명했고, 암호 체계 설계의 두 가지 기본 원칙인 ‘혼돈과 확신 이론’을 제시하였다. 암호 체계를 설계함에 있어 ‘혼돈(Confusion)’은 평문과 암호문 사이의 상관관계를 숨기는 반면, ‘확산(Diffusion)’은 평문의 통계적 성격을 암호문 전반에 확산시켜 숨기는 역할을 한다. 혼돈과 확산이라는 두 가지 개념은 오늘날의 암호 체계 설계에도 여전히 적용되고 있다.

Freidman은 2차 세계 대전 중 독일군이 사용하던 에니그마(Enigma) 암호와 일본군이 사용하던 무라사끼 암호를 해독한 사람으로 유명하다. 에니그마 암호는 각기 다른 몇 개의 암호판을 전기적으로 연결하여 원문을 입력하면 전기적 연결에 의해 새로운 암호문을 출력하는 방식으로 이 기계가 존재하지 않으면 암호를 풀 수 없다.

미드웨이 해전에서의 암호 전쟁

태평양 전쟁 당시 일본의 진주만 공습으로 큰 피해를 입고 전력이 약화됐던 미국은 일본의 그 다음 공격 목표가 어디인지를 알아내야 했다. 1942년 4월, 하와이 주둔 미국 해군 정보부의 암호 해독반 블랙 챔버는 일본군의 무전이 증가하고 있음을 발견했다. 이미 일본 해군의 암호 체계인 JN-25를 해독하고 있던 해독반은 AF라는 문자가 자주 나타난다는 사실에 주목했다. AH는 진주만을 뜻하는 것이었다. 암호 해독반의 지휘관이었던 조셉 로슈포르 중령은 AF를 미드웨이 섬이라고 생각했다. 일본의 정찰기가 ‘AF 근처를 지나고 있다’는 내용의 무선 보고를 해독한 적이 있었던 그는 정찰기의 비행경로를 추정해본 결과 AF가 미드웨이 섬일 것이라는 심증을 갖게 된 것이다.

로슈포르 중령은 체스터 니미츠 제독에게 일본군의 침공이 임박했다는 것과 AF가 자주 언급된다는 점, 그리고 AF가 미드웨이 섬일 것이라는 보고를 한 후, 미드웨이 섬의 담수 시설이 고장 났다는 내용의 가짜 전문을 하와이로 평문 송신하게 하자고 건의했다. 3월에 미드웨이 섬 근처에 일본 해군의 비행정이 정찰 왔던 것을 알고 있던 니미츠 제독은 이 건의를 받아들였다. 사실 미드웨이 섬의 정수 시설은 아무런 문제가 없었다. 이틀 후, 도청된 일본군 암호 중 ‘AF에 물 부족’이라는 내용이 해독되었다. 이로써 일본군의 다음 공격 목표가 미드웨이 섬이라는 것이 분명해진 것이다.

미군은 암호 해독을 통해 일본의 공격 목표가 미드웨이라는 사실을 알아낸 후 전투에 대비하고 반격을 준비하여 일본의 태평양 함대를 격파하고 전쟁을 승리로 이끌 수 있었다.

현대 암호

현대 암호는 1970년대 후반 스탠퍼드 대학과 MIT 대학에서 시작되었다. 1976년 스탠퍼드 대학의 Diffie와 Hellman은 ‘암호의 새로운 방향(New Directions in Cryptography)’이라는 논문에서 처음으로 공개키 암호의 개념을 발표하였다. 종래의 관용 암호 방식 또는 대칭키 암호 방식에서는 암호화키와 복호화키가 동일한 비밀키를 사용하기 때문에 송신자와 수신자는 비밀 통신을 하기 전에 비밀키를 공유하고 있어야 한다. 반면 공개키 암호 방식에서는 하나의 쌍이 되는 공개키와 비밀키를 생성하여 암호화에 사용되는 공개키는 공개하고, 복호화에 사용되는 비밀키는 사용자가 안전하게 보관하도록 한다. 공개키 암호 방식에서는 송신자와 수신자가 사전에 키를 공유할 필요가 없기 때문에 불특정 다수 사용자 간에 사전 준비가 없이도 암호 통신망을 구축하는데 유용하게 사용할 수 있다.

이어 1978년 MIT 대학의 Rivest, Shamir, Adleman은 소인수 분해 문제에 기반을 둔 RSA 공개키 암호를 개발했는데, 이것은 오늘까지도 가장 널리 사용되는 공개키 암호 방식이다. 공개키 암호의 도입은 현대 암호의 발전에 중요한 계기가 되었다.

한편, 1977년 미국 상무성 표준국(NBS, 현 NIST)은 전자계산기 데이터 보호를 위한 암호 알고리즘을 공개 모집하여, IBM 사가 제안한 DES (Data Encryption Standard)를 표준 암호 알고리즘으로 채택했다. DES의 표준화를 계기로 하여 금융 시스템을 중심으로 상업용 암호화의 이용이 증가하게 되었고 컴퓨터 통신망을 이용한 문서 전송, 전자 자금 이체 등이 활성화되었으며 암호 방식이 일반인들에게 알려지고 널리 사용되는 계기가 되었다.

이전의 암호 방식에서는 사용하는 키뿐만 아니라 암호 알고리즘도 비밀로 하여 암호문의 비밀을 지키려고 하는 경우도 있었으나, 현대 암호에서는 암호 알고리즘을 공개하도록 하고 있다. 1883년 Auguste Kerckhoff는 암호 시스템의 안전성에 대해 ‘키 이외에 암호 시스템의 모든 것이 공개되어도 안전해야 한다’고 했는데 이것을 Kerckhoff’s principle이라고 한다. 이렇게 함으로써 암호 방식의 안전성을 공개적으로 검토하게 하여 안전성을 확인하는 것이다.

표준화된 암호와 표준화된 컴퓨팅 기기들을 사용하는 현대 암호에서는 암호 알고리즘을 감추기가 매우 어렵다. 또한 암호 알고리즘을 감춘다고 해서 암호의 보안성이 높아지는 것도 아니다. 비밀로 다루어진 암호 알고리즘이 일단 공개되고 나면 그 안전성에 문제가 발견되는 사례가 많다. 그러므로 암호 분야에서는 어떤 암호 알고리즘이 많은 암호 학자들에 의해 장기간 세부적으로 수행된 분석에서도 잘 견디어 낼 때까지는 그 알고리즘을 안전하다고 인정하지 않는다. 즉, 암호 체계는 ‘무죄가 증명될 때까지는 유죄’이다.

 

 Posted by at 5:28 PM

Node.js 내가 쓰기로 선택한 이유

 IT  Comments Off on Node.js 내가 쓰기로 선택한 이유
Jan 152015
 

퍼온 글

https://vinebrancho.wordpress.com/2014/03/24/node-js-%EB%82%B4%EA%B0%80-%EC%93%B0%EA%B8%B0%EB%A1%9C-%EC%84%A0%ED%83%9D%ED%95%9C-%EC%9D%B4%EC%9C%A0/

 

개인 프로젝트에서 RESTful API를 구현하기 위해서 어떤 서버사이드 플랫폼을 사용할까 고민하다가 node.js 를 선택했다. 2000년초반, PC 웹이 한창 성장하고 있을 때만 해도 서버사이드 플랫폼으로는 asp, jsp, php 정도였던 걸로 기억한다. 그 때 취미삼아 웹사이트를 만들어본 경험이 있는데 고민했던 게 위 3가지 정도였다^^; 그러나 지금은 선택할 수 있는 서버 사이드 플랫폼이 상당히 많아졌다. 언어별로 대표적인 플랫폼을 나열해보았다.

  • Javascript : node.js
  • Ruby : Ruby on Rails (+ EventMachine for event loop)
  • Pyhon : Django (+ Twisted for event loop), Pyramid, Bottle, Nimble
  • Java : Play, Spring, Vert.x
  • PHP : cakePHP, Code igniter
  • Scala : Play
  • Erlang : inets, misultin

서버사이드 개발자들에겐 익숙한 것들이겠지만, 이번에 서버사이드 플랫폼을 들여다보기 시작한 나에게는 대부분이 낯설었다. 위의 모든 플랫폼에 경험이 있다면 각각 장, 단점을 기반으로 내 서비스에 적합한 것을 쏙 하나 집어 낼텐데, 나는 그렇지 못하기 때문에 내 나름의 기준에 맞는 플랫폼을 몇개 추려내고 그 중 하나를 선택하기로 했다.

내가 선택하는 서버사이드 플랫폼은 다음을 만족해야 했다.

  • 시간이 많지 않기 때문에 당장 쓸수 있는 언어 기반이어야 한다.
  • 소셜 서비스 성격상 수많은 사용자의 동시 접속과 요청을 빠르게 처리할 수 있어야 한다.
  • 이를 위해 제약된 하드웨어 인프라에서 확장성이 좋아야 한다.
  • 개발 시간을 단축하기 위해서 유틸리티 성격의 확장 모듈들도 많아야 한다.
  • 문서화 및 개발자 커뮤니티가 활성화되어 있어야 한다.

이렇게 기준을 정하고 나니 node.js와 django 두개로 압축할 수 있었다. 대부분은 1번 기준으로 제외되었다 -_-;; 그리고 twitter나 github가 Ruby on Rails(RoR)를 사용하고 있어서 한번 써보고 싶기는 했으나 Ruby 언어를 익혀야 하니 일단은 제외시켰다. 자, 그럼 node.js와 django 중 어떤 걸 할까. 2009년에 개발자 Ryan Dahl에 의해 공개된 후 실리콘밸리 개발자들을 열광하게 만들면서 급성장하게 된 node.js. Yahoo, VMWare, Microsoft, LinkedIn 같은 쟁쟁한 회사들이 쓰고 있는 node.js. 현재 5만개가 넘는 모듈을 갖고 있는 node.js. 직접 경험해보고 싶었다. 얼마나 좋길래. 그래서node.js를 개인 프로젝트의 서버사이드 플랫폼으로 쓰기로 결정했다.

지금부터는 node.js의 기술적인 특징에 대해 몇가지 나누고자 한다. 먼저 node.js는 공식사이트에서 다음과 같이 소개되고 있다.

Node.js is a platform built on Chrome’s JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.

– nodejs.org

이 문장 안에 사실 node.js에 대한 주요 특징들이 다 포함되어 있는 거 같다. node.js는 javascript 코드를 실행시키고, event driven 및 non-blocking I/O 모델을 사용한다. 그 결과 확장성 있고 데이터 중심의 실시간 네트워크 어플리케이션 개발을 가능하게 해준다라고 한다. 추상적으로 이해될수도 있는 부분인데 특징을 하나씩 살펴 좀 구체적으로 이해를 해보자.

Javascript 언어 실행

node.js를 만든 Ryan Dahl은 개발 언어로 javascript를 선택했다. 히스토리를 보면 C, Rua를 고려하다가 몇개월 뒤에 javascript가 적합하다고 판단하였다고 한다[1]. 아마도 javascript 언어가 가진 특징 때문이지 않을까 싶다. javascript 는 언어 자체적으로 event driven 모델을 이미 지원한다[2]. 이 때문에 클라이언트 사이드인 웹페이지에서 버튼을 하나 클릭하면 바로 화면에 어떤 작업이 수행된다. 서버 사이드로 예를 들면 http 요청이 한개 들어오면 바로 연결을 맺으면서 어떤 작업을 수행시키게 될 것이다. 잠시 뒤에서 좀 더 다루겠다. 또한 javascript는 내부 함수로써 외부 함수의 변수에 접근할 수 있는 closures란 기능을 지원한다[3]. 콜백함수를 파라미터로 지정하는 event driven 모델에서 매우 유용한 기능이다. 보통 함수는 자신의 scope에 지정된 변수만 접근 가능하기 때문에 콜백 함수로 사용된 어떤 함수가 외부의 변수에 접근하려면 콜백 함수를 호출하는 쪽에서 반드시 사용할 해당 변수를 지정해줘야 한다. closure 덕분에 javascript 코딩시 이런 것을 신경쓰지 않아도 된다.

node.js는 CommonJS 라는 스펙을 따르고 있다[4]. CommonJS는 특정 코드가 아니라, 웹브라우저 외 서버사이드나 독립적인 애플리케이션으로 사용하기 위해 필요한 기능을 정의한 스펙이다.node.js 로 개발하다 보면, module, exports 그리고 require 같이 브라우저용 자바스크립트 언어에는 없는 지시어들을 보게 될 텐데 그러한 것들은 CommonJS 인한 것으로 보면 된다.

node.js 이전에도 helma, appjet, jaxer 등 javascript 기반 서버사이드 플랫폼이 있었으나 활성화가 되지 못했다. 이유가 궁금하여 구글링을 해보니 node.js 가 성공한 이유는 javascript 언어에 대한 인식 변화, javascript engine의 성능 향상 그리고 Blocking I/O을 제거했기 때문이라는 분석글을 봤다[5]. 반대로 이전에 서버사이드 플랫폼들은 이 세가지를 갖고 있지 못했기 때문에 활성화가 되지 않았다는 건데 설득력이 있다. 첫째, 웹이 성장하면서 javascript 언어의 가치도 함께 올라갔고 그만큼 개발자들도 늘어났다. 이제 더이상 javascript 언어를 부정적으로 보거나 사라질 언어로 보질 않는다.둘째, 구글이 javascript 코드를 동적으로 컴파일하여 기계어로 바꾸는 V8 엔진을 개발하면서 javascript 실행 성능이 크게 좋아졌다. 그리고 V8이 컴파일된 기계어 코드를 캐슁(caching)하기 때문, 동일한 로직을 많이 수행할 수 밖에 없는 서버사이드에서는 더욱 효과적일 것이다.셋째, Ryan dahl이 unix/linux의 시스템 레벨에서 blocking I/O 처리되던 라이브러리들을 node.js에서 사용될 때 non-blocking I/O로 동작하도록 바꾸면서 서버 확장성의 문제를 해결한 것이다. non-blocking I/O에 대해서는 잠시 뒤에서 다루겠다.  아무튼 이 3박자가 잘 들어맞아 현재의 node.js 가 많은 개발자와 회사들로부터 사랑을 받는게 아닌가 싶다.

Single thread event-driven 그리고 Non-blocking I/O 모델

event driven은 event 기반, 즉 특정 사건이 발생할 때 작업이 수행되는것을 의미한다. UI를 가지면서 유저와 상호작용해야 하는 프로그램에선 유저가 언제 터치 같은 입력(즉, event)을 줄지 모르기 때문에 event driven 모델 사용이 일반적이다. javascript 언어가 event-driven 모델기반이기 때문에,node.js 는 javascript를 채택함으로써 개발자들이 서버사이드의 모든 작업을 event-driven 모델로 개발하도록 한다.실제로 node.js 가 기본으로 제공하는 javascript API 원형들을 보면 파라미터로써 callback을 입력하도록 요구하고 있다[6].

전통적인 서버사이드 개발 모델은 적절한 표현일지 모르겠지만 thread driven 모델이었다. 즉,  서버에 요청이 들어오면 서버는 이를 처리하기 위해 매번 별도의 thread를 생성했었다. apache같은 웹서버가 이런 모델인데, 이유는 POSIX 기반 함수들이 blocking I/O 방식으로 file을 엑세스한다라는 사실에서 찾을 수 있다. blocking I/O 방식은 filesystem, database 리소스 접근시 결과가 리턴될 때까지 코드 수행을 멈추고 다른 작업이 수행되지 못하게 하기 때문에, 하나의 thread로는 추가적으로 들어오는 클라이언트 요청을 처리할 수 없다. thread driven 모델은 클라이언트 별 thread로 인해 메모리 사용량이 증가하는 문제와 컨텍스트 스위칭 비용이 발생하는 문제가 있고 이는 클라이언트 수가 증가할수록 각각 확장성과 반응성을 떨어뜨리게 한다. Ryan Dahl이 2009년 JSConf에서 apache vs. nginex(event driven모델 서버중 하나) 성능 벤치마크 자료를 통해 수많은 클라이언트가 동시 요청시 event driven 모델이 초당 더 많은 요청을 받을 수 있고 메모리를 훨씬 덜 사용한다고 소개하기도 했다[7]. thread driven 모델에서 확장성과 반응성을 올리려면 서버 하드웨어 스펙을 올리던지 여러대의 서버를 운영하여 적절히 로드밸런싱이 되도록 해야 한다. 물론 그에 따른 경제적 비용이 만만치 않겠지만 말이다.

node.js는 event loop과 non-blocking I/O를 통해 전통적인 서버 사이드 모델에서의 이러한 문제들을 해결한다. node.js 서버(하나의 프로세스)는 한개의 event-loop thread(보통 main thread)로 동작한다. v8과 그 위에서 동작하는 서버사이드 javascript 코드는 모두 event loop thread에서 동작한다. 그리고 이 thread가 모든 클라이언트 요청을 받고 처리한다. node.js는 javascript 언어에서 기본적으로 제공되지 않는 filesystem, network (tcp/udp, http/https)등 시스템 리소스에 서버사이드 개발자가 접근하도록 하기 위해서 v8의 interface[8]에 맞게 c++로 구현(<node.js>/src/*.cc javascript로 바인딩하여 콜백 파라미터를 가진 javascript API set을 제공(<node.js>/lib/*.js다[9]. blocking I/O 작업을 해야하는 리소스에 대해서는 thread pool을 이용해 node.js가 event loop thread가 아닌 별도의 thread에 그 일을 위임한다. blocking I/O 작업을 하는 thread의 작업이 끝나면, event loop thread가 이를 인지하고 v8을 통해 해당 리소스에 매핑되어 있는 javascript 콜백을 바로 호출한다. 즉, event loop thread에서 수행되는 javascript 컨텍스트에선 시스템 리소스 접근이 non-blocking I/O 처럼 동작하는 것이다. 아래 그림은 이런 flow를 잘 설명해주고 있다.

<source : https://www.udemy.com/blog/learn-node-js/>

기본적으로 node.js는 단일 event loop을 가진 thread로 동작하기 때문에 클라이언트 요청 증가에 대해 thread driven 모델보다는 좀 더 좋은 확장성(scalability)을 보인다. 그리고 별도의 thread에서 blocking I/O 작업이 처리되는 동안 event loop thread에선 다른 작업을 수행할 수 있으므로 동시에 발생하는 클라이언트 요청에 대해 좋은 반응성(responsiblity)을 보여줄 수 있다. 하지만 thread driven 대비 동시접속에 대한 요청당 처리시간이 빠르다고는 하지만 동시접속수가 많아질수록 반응성은 떨어질 수 밖에 없기 때문에 node.js 서버를 사용하더라도 여러개의 node.js를 띄워서 로드밸런싱을 해줘야 하지 않을까 싶다[10].

node.js를 들여다볼수록 node.js의 핵심은 blocking I/O로 동작하던 filesystem, network 기능들을 non-blocking I/O로 동작하도록 바꾼 것이란 생각이 든다. node.js는 javascript와 low level system 사이의 glue 역할을 하고 있는데 non-blocking I/O가 없었다면 지금의 node.js도 없지 않았을까. 시간이 될때 이부분을 소스레벨에서 hacking 해봐야겠다 ^^

node.js로 추천하지 않는 usecase

node.js는 한개의 event loop thread로 서버로의 모든 요청을 처리하기 때문에, 특정 요청을 처리하는 javascript 콜백에서 연산등의 cpu intensive한 작업을 오랫동안 한다면 그 시간만큼 다른 요청들은 대기할 수밖에 없다. 물론 cluster 모듈을 이용해서 멀티코어에서 코어 갯수만큼 동일한 node.js프로세스를 띄워서 다른 코어 위에 동작하는 node.js 프로세스로 요청을 분산되도록 할 수 있으나, 같은 tcp port 로 들어오는 클라이언트 요청을 여러 코어로 분산되도록 하는건 node.js 가 아닌 커널레벨의 정책에 따른 것이라 어떻게 동작할지 예측하기가 어려울 것 같다. (node.js의 현재 공식 stable version 0.10.26 까지는 커널이 몇몇 특정 worker 프로세스로만 요청을 보내는 문제가 발생하여, 0.11 버전 때부터 로드밸런스를 커널에게 맡기지 않고 node.js가 직접하기 위해서 cluster master 프로세스가 직접 모든 요청을 받고 자기가 생성한 worker 프로세스들에게 round robin (디폴트 정책)으로 분산을 해주는 패치가 적용됐다[11][12]. stable version 0.12부터 해당 내용이 적용될 것이다.). 더군다가 클라이언트 요청이 몇 천, 몇만 건으로 들어오면 이런 류의 cpu-intensive 한 서비스는 제대로 처리해주기 어려우므로 node.js에 적합하지 않다. 그러나 굳이 꼭 node.js를 써야 한다면.. cpu intensive 작업을 c++ native 모듈을 만들되 node.js의 non-blocking 인터페이스 (uv_*함수들)나 v8의 멀티쓰레딩 인터페이스를 활용하여 v8에 binding한다면 별도의 쓰레드로 cpu intensive한 작업을 수행시키는 것이므로 괜찮지 않을까 싶다. node.js로 흔히 사용되는 usecase는 CRUD 작업을 주로 하는 RESTful 서비스나 notification push 같은 real time web application에 유용하다고 한다. realtime 지원은 node.js의 socket.io 모듈을 이용하면 쉽게 구현이 가능하다. 다음은 node.js의 usecase 관련 글이다.

http://nodeguide.com/convincing_the_boss.html

http://www.toptal.com/nodejs/why-the-hell-would-i-use-node-js

node.js에서 많이 사용되는 주요 모듈

node.js 서버 개발을 시작한지 며칠되지 않아서 다양한 모듈을 사용해보질 못했다. 하지만 현재 express 모듈로 RESTful API처리하는 부분을 코딩해보니 헉,, 그 편리함에 놀라고 있다. 모듈 개발자들에게 고마운 마음이;; ㅎㅎ. 계속 개발을 하다보면, 내 삶을 더욱 편하게 만들어줄 여러 모듈들이 있을거라 생각하는데 혹시나 없다면 직접 만들어서 npm 모듈로도 공개해봐야겠다. 참고로 현재 공개된 npm 모듈은 5만개이상이다.

https://www.npmjs.org

https://nodejsmodules.org/tags/build

http://www.queness.com/post/16219/29-nodejs-frameworks-for-fast-javascript-development

 

node.js 튜토리얼

node.js의 API는 공식사이트의 documentation에 잘 정리되어 있다. 그 외 아주 기본적인 내용들은 아래 사이트를 참고하면 될 것 같다.

http://www.nodebeginner.org/index-kr.html

http://howtonode.org/

http://pismute.github.io/nodeguide.com/beginner.html

http://nodeschool.io/

node.js 적용 사례에 대한 글

http://nodejs.org/industry/

https://github.com/joyent/node/wiki/Projects,-Applications,-and-Companies-Using-Node

http://readme.skplanet.com/wp-content/uploads/Tech_Planet_2013_baek.pdf

https://queue.acm.org/detail.cfm?id=2567673

http://venturebeat.com/2011/08/16/linkedin-node/

마치며…

단말용 tizen의 C++기반 web runtime을 개발하면서 주로 테스트 용도로만 javascript 언어를 사용했었다. 그 덕분에 node.js 로 javascript 코딩을 하는데 언어적인 거부감이나 어려움은 없다. 그리고 초반부에 서버사이드 플랫폼을 선정하는 내 나름의 기준들을 node.js 가 잘 만족시켜주는 것 같다. 에효 드디어 정했다. (ps. 혹시나 제가 쓴 글 중에 잘못된 부분이 있다면 주저말고 지적해주세요.)

< References >

[1] http://www.theregister.co.uk/2011/03/01/the_rise_and_rise_of_node_dot_js/?page=3
[2] http://www.launchacademy.com/codecabulary/learn-javascript/event-driven-asynchronous-callbacks
[3] http://javascriptissexy.com/understand-javascript-closures-with-ease/
[4] http://en.wikipedia.org/wiki/CommonJS
[5] http://programming.oreilly.com/2011/06/node-javascript-success.html
[6] http://nodejs.org/api/addons.html
[7] http://www.scribd.com/doc/23801896/Node-js-JSConf-2009
[8] https://developers.google.com/v8/embed
[9] http://nodejs.org/api/
[10] http://zgadzaj.com/benchmarking-nodejs-basic-performance-tests-against-apache-php
[11] http://strongloop.com/strongblog/whats-new-in-node-js-v0-12-cluster-round-robin-load-balancing/
[12] https://github.com/joyent/node/commit/e72cd41?__utma=108008000.708719925.1395624487.1395790930.1395792961.3&__utmb=108008000.2.10.1395792961&__utmc=108008000&__utmx=-&__utmz=108008000.1395792961.3.3.utmcsr=google%7Cutmccn=(organic)%7Cutmcmd=organic%7Cutmctr=(not%20provided)&__utmv=-&__utmk=101010433

 

 Posted by at 10:22 PM

node.js 에 대해 잘 소개한 자료

 IT  Comments Off on node.js 에 대해 잘 소개한 자료
Jan 032015
 

node.js 에 대해 잘 소개한 자료
http://pyrasis.com/nodejs/nodejs-HOWTO

 

2009년 라이언 달이라는 프로그래머가 구글의 V8 자바스크립트 엔진을 웹 브라우저가 아닌 서버로 사용할 수 있도록 만든 것이 Node.js입니다. 즉, 우리가 흔히 봐왔던 PHP, ASP.NET, JSP 등의 서버 사이드 플랫폼과 같습니다.

자바스크립트의 간결함과 V8 자바스크립트 엔진의 월등한 속도 그리고 단일 스레드 Non-bloking I/O로 빠른 성능을 내면서 전 세계적으로 큰 인기를 끌게 되었습니다.

기존에는 소켓으로 서버 프로그래밍을 하려면 유닉스/리눅스의 socket(select, poll, epoll)이나 윈도우에서 IOCP를 이용해서 C++로 만들어야 했습니다. C++로 만들면 처리 속도는 빠르지만 코드가 길어지고 디버깅도 힘들어서 일부 서버 프로그래머들만의 영역이었습니다.

Node.js가 나오면서 소켓 서버 프로그래밍에 대한 장벽이 무너졌습니다. 누구든지 자바스크립트로 패킷을 주고 받을 수 있고, 서버를 간단하게 구현할 수 있게 된 것입니다. C++ 소켓 프로그래밍에 비해 정말 간단해졌습니다.

단언컨대, Node.js는 가장 생산성이 좋은 플랫폼입니다.

일반적인 소켓 통신 뿐만 아니라 Node.js 자체를 HTTP 웹 서버로 실행할 수 있고, WebSocket(socket.io) 등의 HTTP 기반 실시간 프로토콜도 손쉽게 사용할 수 있습니다. 실시간 통신을 자바스크립트 단 몇줄로 구현할 수 있게 된 것이죠.

결과적으로 Node.js는 자바스크립트를 웹 브라우저 속에서만 사용되던 언어에서 범용 스크립트 언어로 탈바꿈 시켰습니다. Python이나 Perl, Ruby와 같은 레벨이 된 것입니다.

 Posted by at 4:24 PM

비트코인

 IT, 정보보호  Comments Off on 비트코인
Apr 052014
 

비트코인, 우리가 은행이다 (We are a Bank in Bitcoin) February 22, 2014
<이전 포스트: 연결이 지배하는 세상, 화폐의 필연적 진화>
http://organicmedialab.com/2014/02/22/we-are-a-bank-in-bitcoin/ 

지난 포스트에서는 오가닉 미디어 세상에서 왜 새로운 화폐 시스템이 출현할 수밖에 없는지 논의했다. 이번에는 시대가 요구하는 대안으로 비트코인을 다룰 것이다. 비트코인은 아직 검증되지 않았다. 그러나 이 글에서 비트코인은 답이 아니라 ‘현상’이니 안심하기 바란다. 연결이 지배하는 세상에서 화폐(거래시스템)가 진화하는 방향을 짚고 그 흐름을 해석하는 것이 목적이다.

처음에는 네트워크 현상을 연구하는 사람으로서 비트코인이 신기하고 반가웠다. 어떻게 이렇게 오가닉 미디어 현상을 한몸에 설명하는 시스템이 있는지 놀라웠고 한번은 정리해야겠다고 결심했던 것이다. 그런데 마음처럼 쉽지가 않았다. 내용을 파면 팔수록 미궁에 빠졌고 모든 이슈는 서로 네트워크로 얽혀 있었으며 구조는 상상을 초월하게 정교했다. 이런 과정에서 도출한 하나의 사실은, 비트코인은 이전 화폐 시스템과의 완전한 결별이며, 그 자체가 ‘유기체’라는 것이다. 무슨 의미인지 지금부터 3가지 관점에서 알아보도록 하겠다.

첫째, 비트코인에서 화폐가 노드가 아닌 ‘링크’가 되는 현상(여기서 문제의 핵심이 시작된다) 을 알아본다. 둘째, 거래가 단발적인 1:1 관계가 아니라 왜 ‘연결’의 연속인지(여기서 네트워크 기반이 정립된다) 살펴볼 것이다. 세째, 이런 네트워크에서 우리들 각자가 어떻게 협력하여 은행이 될 수 있는지(여기서 자생적 네트워크가 발전한다) 설명하고 시사점을 정리하도록 하겠다.

1. 비트코인은 노드가 아닌 링크다(Bitcoin as a Link)
백원, 천원 하는 돈이 링크라니 이 무슨 어처구니 없는 말인가? 돈은 받아서 손에 쥐고 주머니에 넣고 하는 것인데, 그게 네트워크의 링크라니 말이 되는가? 납득이 어렵겠지만 그렇다. 비트코인에서는 코인이 (노드가 아닌) 링크가 됨에 따라 기존의 화폐 시스템과 근본적인 차이가 생긴다. 이것은 조개에서 금으로, 금에서 종이, 종이에서 데이터로 화폐를 상징하는 컨테이너가 바뀌는 것이 아니다. 화폐의 개념 자체가 바뀌는 근본적인 문제의 시작이다.

비트코인은 항상 송신자와 수신자 관계를 내포하며, 비트코인을 보낸다(지불한다)는 것은 신규의 비트코인을 2번 발행(To 수신자, To 나)하는 것과 같다. 비트코인은 From과 To를 내포하는 ‘링크’인 것이다.
비트코인은 항상 송신자와 수신자 관계를 내포하며, 비트코인을 보낸다(지불한다)는 것은 신규의 비트코인을 2번 발행(To 수신자, To 나)하는 것과 같다. 비트코인은 From과 To를 내포하는 ‘링크’인 것이다.

비트코인 거래에서는 코인과 거래가 1:1로 매핑이 된다. 즉 거래횟수만큼 비트코인이 새로 생성되는데, 비트코인 거래를 할 때마다 여러분이 코인을 발행한다고 생각할 수 있다. 위의 스키마를 보면서 하나씩 살펴보자.

내가 1비트코인을 가지고 있는데 판매자에게 0.7비트코인을 지불하는 경우이다. 보통은 내가 가진 만원에서 7천원 내고 3천원을 거스름돈으로 받는 것을 떠올릴 것이고 왜 새로운 비트코인의 발행이라고 하는지 이해가 안 갈 것이다. 그런데 비트코인에서는 이 거래를 완료하기 위해 두개의 코인이 새로 만들어지는 구조로 되어 있다. 하나는 내가 판매자에게 보내는 액면 0.7 비트코인(BTC) 코인이다. 다른 하나는 내가 나에게 보내는 액면 0.3BTC 코인이다. (이 거래가 이뤄지면 내가 가지고 있던 1 비트코인(BTC) 코인은 폐기된다.)

이때 0.7비트코인은 누가 보냈고 어디로 갔는지 즉 수신자와 송신자 관계를 반드시 내포하게 되어 있다(편지나 부동산 등기를 떠올리면 된다). 그러므로 비트코인에서는 금액이 같다고 해도 같은 코인이 아니다. 설령 내가 친구에게서 0.7비트코인을 받아 판매자에게 0.7비트코인을 보낸다고 해도 이 둘은 다른 코인이 되는 것이다(From 친구 To 나 ≠ From 나 To 판매자). 송수신 관계 없이는 코인 자체가 존재할 수 없다는 말이기도 하다.

이에 따라 코인은 ”(보내는) 비트코인 주소와 (받는) 비트코인 주소를 연결하는 (가중치를 가진) 링크”라고 정의될 수 있다. 코인이 링크가 되는 순간 화폐구조는 근본적으로 변화한다. 지금부터 설명하는 거래의 투명성, 거래 중재의 분권화, 시스템의 유기적 진화를 가능하게 하는 출발점이기 때문이다.

2. 비트코인은 비트코인의 연결이다(Bitcoin as a Network)
비트코인이 링크라는 것도 충격적인데 비트코인이 비트코인의 연결이라는 것은 또 무슨 말인가? 이 이야기를 이해하려면 비트코인의 정의를 환기할 필요가 있다.

비트코인의 창시자 사토시 나카모토는 “비트코인은 코인 소유주의 디지털 서명의 연결(chain of digital signature)”이라고 정의하였다[Sathoshi Nakamoto, “Bitcoin: A Peer-to-Peer Electronic Cash System,” 2008]. 디지털 서명이란 공개키 암호화를 기반으로 문서의 송신자(그리고 문서의 진위 여부)를 확인하는 방법으로(자세한 내용은 비트코인의 주소, 거래, 그리고 지갑을 참조), 비트코인 맥락에서는 비트코인을 보낸 사람(from)을 확인하는 방법이다. 그러므로 비트코인 거래란, 보내는 사람(from)이 자신의 코인에 받는 사람의 주소(to)와 발행금액을 더하고, 여기에 보내는 사람이 디지털 서명함으로써 만들어지는 것이다(단순화를 위해 해시 과정은 생략한다). 받은 사람은 디지털 서명을 확인하여 코인의 진위 여부를 판단한다.

다음 그림은 이러한 과정이 반복되는 상황을 보여준다(이해를 돕기위해 1개의 코인으로 1개의 새로운 코인을 생성하는 경우를 나타냈다. 실제로는 2개 이상의 코인으로 2개의 새로운 코인을 생성하는 경우도 많다).

비트코인은 디지털서명의 연결이다. ‘From과 To’의 관계를 반드시 포함하고 있는 (그 자체로) 링크이며 ‘과거의 거래’ 또한 포함하고 있는 네트워크이다.
비트코인은 디지털서명의 연결이다. 내가 받은 비트코인은 이전 사람(그림에서는 내 친구)이 받은 비트코인에 이전 사람의 디지털서명이 더해진 덩어리이다. 내가 제3자(그림에서는 판매자)에게 코인을 지불할 때도 내 서명이 더해지는데, 이 디지털 서명들의 기록이 모두 누적된 상태로 거래가 계속 이뤄지는 것이다.

다시 말하자면 비트코인은 이전 비트코인(거래)을 포함하고, 이전 비트코인은 그 이전 비트코인(거래)을 포함한다. 결국 비트코인은 과거의 거래기록을 온전히 포함하는 거래의 네트워크인 것이다. 예를 들어 친구가 준(즉 from 친구 to 나) 액면 1 비트코인(BTC) 코인을 10개 가지고 있다고 가정하면 이 10개의 비트코인은 전부 각자의 히스토리를 기록으로 가지고 있는 것이다. 모든 비트코인이 과거의 거래를 포함한 네트워크가 됨에 따라 거래는 투명해지고 끝까지 추적하는 것도 가능해진다.

얼마전 비트코인 거래소 ‘비트인스턴트(BitInstant)’의 CEO 찰리 슈렘(Charlie Shrem)이 비트코인 불법 거래로 체포된 사건이 있었다. 실크로드라는 불법 마약거래 사이트 사용자들에게 백만 달러 이상의 비트코인을 판매했을 뿐만 아니라 본인 스스로도 마약 거래에 참여한 사실이 밝혀졌다. 그런데 이 충격적인 사실은 비트코인이 네트워크이기 때문에 밝혀진 것이기도 하다. FBI는 실크로드 사이트 관련 모든 자료를 압수수색했는데 그 안에는 비트코인의 모든 거래 관계가 낱낱이 남아있었고 이를 바탕으로 슈렘을 체포하는 것까지 가능했던 것이다(물론 은행장이 자금 세탁을 주도한 것은 매우 유감스러운 일이다).

기존 화폐 시스템에서는 돈을 주고 받으면 거래가 끝난다. 그러나 비트코인에서는 1:1 관계로 끝나는 거래가 없다. 네트워크에서 분리된 단 하나의 코인도, 거래도 존재할 수 없으며 코인이 발행되고 거래가 지속될수록 연결은 늘어나고 네트워크는 성장한다. 여기서 각자는 목적에 따라 1:1로 거래를 하겠지만 그 결과는 전체를 움직이는 요소가 된다. 이러한 속성이 화폐의 중앙집권적 구조를 통째로 해체시키게 되는 것이다.

3. 우리가 은행이다(We are a Bank)
코인이 모두 연결된 링크가 되고 거래가 (히스토리를 포함한) 네트워크가 됨에 따라 우리의 역할은 매개자, 즉 이 시스템 전체를 능동적으로 움직이는 주체가 된다. 개념적으로, 은유적으로 그렇다는 것이 아니라 실제로 물리적 노드로서 네트워크를 직접 움직인다. 여러분이 직접 화폐를 발행하고 거래를 승인하고 화폐의 가치를 결정하며 서로의 보안을 책임지는 것이다. 여기서 부자, 정부, 은행이라는 노드는 존재하지 않는다. 그 누구도 이 네트워크를 인위적으로 통제할 수 없는 대신 참여자 전체가 은행이 된다.

참여자(매개자)의 역할
(1)화폐의 발행: 이미 설명한 바와 같다. 여기서는 거래(네트워크의 소비)가 곧 화폐의 발행이다. 비트코인의 공급량은 2천백만개로 한정되어 있지만 거래를 할 때마다 기존의 화폐를 폐기하고 새로운 화폐가 발행된다. 화폐를 주조하는 기존의 중앙은행 시스템의 역할을 모든 거래자가 나눠서 수행한다.

(2)거래의 기록 및 승인: 비트코인 채굴자가 되어 직접 거래를 기록하고 승인한다. 거래가 이뤄지면 네트워크의 모든 노드들에게 이 사실이 알려지는데, 채굴은 실제로 일어난 거래행위를 공식화하고 네트워크에 기록을 남기는 과정을 뜻한다(채굴의 목적과 쓰임에 대해서는 ‘비트코인 채굴과 선순환 구조‘ 참고). ’Proof-of-work’으로 알려진 협업 기반 거래 승인 과정이며 채굴자는 단순히 코인을 캐는 사람이 아니라 네트워크를 강화, 지속, 확장시키는 매개자가 된다.

(3)시스템의 보안: 거래 메커니즘이 참여자 전체를 통해 분산되어 작동함에 따라 시스템 보안의 주체도 달라진다. 기존 방식은 보안을 위임받은 소수가 전체 네트워크를 책임지게 되어 있다. 은행의 보안 시스템이 선과 악(해킹)을 가려내고 악의 침입을 각종 기술을 동원해서 막는 방법이다. 그러나 모든 것이 연결되는 세상에서 이렇게 소수가 전체 네트워크를 책임지는 방식은 이미 한계에 다다르고 있다.

반면 비트코인의 시스템은 완전히 분산된 신뢰 네트워크를 형성한다[A. Antonopoulos, “Bitcoin Security Model: Trust by Computation,” Forbes, Feb 20, 2014]. 여기서는 모든 사람들(블록체인을 만들어 거래 승인에 참여하는 채굴자, 디지털 서명을 기반으로 화폐를 생성하는 거래자 등) 중에서 악이 과반수를 넘지않으면 보안이 유지된다. 누군가를 믿고 권한을 위임하는 것이 아니다. 비트코인 시스템에서는 참여자 전체가 서로의 보안을 책임진다. 협업 보안이다.

매개자가 만드는 유기적 네트워크
물론 이 3가지는 개별적이지 않고 상호의존적으로 작동한다. 화폐의 공급과 거래, 보안에 이르기까지 선순환 네트워크가 만들어지기에 시스템의 주체가 은행에서 참여자(매개자)로 뒤바뀌는 것이 가능한 것이다. 비트코인 거래만이 아니다. 오가닉 미디어 세상에서는 사용자, 소비자, 거래자, 유권자가 모두 매개자가 된다. 이에 따라 사업자, 공급자, 은행, 정당 등에 집중되었던 권력이 해체되고 분산(Decentralization)되는 현상이 일어난다.

다수의 매개자가 만드는 네트워크는 유기적이다. 여기서는 화폐가 컨테이너(달러, 원화, 동전, 지폐 등)가 아니라 어디든 흘러다니고 어디서든 연결되는 링크가 될 것이다. 국경을 기반으로 화폐 단위를 나누지 않고 낱낱이 흩어진 우리가 매개자가 되어 네트워크의 전체를 움직이게 될 것이다. 여기서는 소수가 시스템을 통제하고 보안하는 것은 불가능해지고 매개자 전체가 상호의존적 관계로 묶여 서로의 보안을 책임질 수 있는 구조만이 답이다. 새로운 방식의 협업 모델이다.

누가 이 모든 현상의 주인공이 될지는 알 수 없다. 분명한 것은, 이런 협업 네트워크는 (통제 대신) 사용자의 행위에 따라 발달, 성장, 쇠태, 소멸을 경험할 것이라는 점이다. 비트코인이 그 주인공이 된다면 그것은 국가가, 기관이 정하는 것이 아니라 진화하기 때문에 가능한 일이 되는 것이다. 이 글에서 비트코인을(화폐를) ‘진화하는 유기체’라고 한 이유도 이와 같다. 지금 문제의 핵심은 시대의 상징으로서의 화폐가 이미 ‘형태변이’를 시작했다는 점이다. 오가닉 미디어 세상이 어디로 진화해 가는지 보여주는 중요한 시그널이다.

<관련 포스트>

연결이 지배하는 세상, 화폐의 필연적 진화
비트코인 채굴과 선순환 구조
비트코인 주소, 거래, 그리고 지갑
매개의 4가지 유형: 창조, 재창조, 복제 그리고 소비

 Posted by at 11:23 AM

왜 미국은 인터넷 관리를 포기했을까

 IT  Comments Off on 왜 미국은 인터넷 관리를 포기했을까
Apr 042014
 

그 동안 인터넷은 미국의 소유였다. 미국 국방부에서 시작된 인터넷은 전 세계인이 사용하고 누구나 개발 가능한 만인의 인터넷이 되었지만, 인터넷 주소(IP주소와 도메인)를 관리하는 핵심 기능은 아직까지 막후에서 미국 정부가 조종하고 있었다.

하지만, 미국이 갑자기 이 권리를 포기하겠다고 발표했다. 인터넷 주소를 독점적으로 관리하던 권한은 미국이 인터넷 헤게모니를 유지하기 위해 절대 포기 하지 않으려고 했던 것이었다. 이번 결정의 표면적 이유는 인터넷의 자유와 개방을 촉진하기 위해서라고 미 상원의원인 록펠러 (Rockefeller)는 말한다.

인터넷주소기구인 ICANN 의장은 인터넷 주소를 관리하는 기능을 국제 기구에 넘기기 위해 미국 정부는 오래 전부터 준비하고 있었다고 말한다. 하지만, 정말로 그들이 인터넷의 자유를 위해 그들의 권한을 포기했다고 보기에는 그 동안 미국 정부가 이 권한을 지키려고 얼마나 노력했는지를 살펴보면 쉽게 납득하기 어렵다.

■ICANN은 미국이 만든 편법 단체

미국 상무부 산하 국가통신정보청(NTIA)은 내년 9월 30일로 계약이 만료되는 ICANN과 계약 연장하지 않고 IP주소와 도메인에 대한 정책을 관리하는 권한을 국제 단체에 넘기기로 결정했다고 발표했다. 미 상무부는 과거 인터넷 도메인과 주소 정책을 직접 관리하고 있었는데 국제 사회에서 그 권한을 국제 단체로 넘길 것을 요구하자 1998년 6월 ‘인터넷 주소 운영에 관한 백서’를 통해 ICANN을 만들었다.

국제 단체로 명목상 국제적 합의를 통해 일을 하는 것처럼 보이지만 미국 상무부와 계약을 해 위임 받은 권한을 행사하며, 미 상무부에 보고를 해야 하기 때문에 사실상 미 정부 아래서 운영되고 있다. 미국이 이런 편법을 동원해서라도 IP 주소와 도메인 등의 관한 정책을 주도하고 싶었던 것은 그 만큼 이 기능이 중요하며, 이를 통해 인터넷 전반에 대한 정책을 자기들이 원하는 방향으로 끌고 갈 수 있었기 때문이다.

■미국은 인터넷을 영향력 아래 두고 싶어했다

역사적으로 미국 정부가 인터넷 주도권을 유지하기 위해 IP주소와 도메인 정책 관리 권한에 얼마나 집착했는지 보여주는 대표적인 사례로는 ‘존 포스텔’ 사건이 있다. 존 포스텔은 초기 인터넷을 만드는데 큰 기여를 한 과학자로 도메인 기술을 개발했다.

미국 정부가 지원하는 IANA에 근무하며 도메인과 IP 정책을 그가 대부분 설계하고 관리했다. 하지만, 인터넷의 중요성이 커지자 미국 정부는 자신들의 비용으로 인터넷이 연구 개발 되었다는 명분으로 도메인과 IP 정책에 대한 권한을 그에게서 빼앗아 가져가 버렸다.

이에 존 포스텔은 TCP/IP를 개발해 인터넷의 아버지로 추앙 받고 있는 빈트서프 (Vinton Gray Cerf) 등 초기 인터넷 과학자들을 모아 1992년에 ‘인터넷 소사이어티’라는 인터넷 정책을 결정할 수 있는 범세계적인 민간 단체를 만들려고 했다.

지금 미 정부가 결정한 것처럼 존 포스텔은 IP주소와 DNS 같은 중요 정책 결정은 미 정부와 독립된 국제적 단체에서 결정해야 한다고 생각한 것이다. 인터넷 소사이어티는 IP주소와 도메인과 직접적인 관계가 있는 전세계 주요 상표권자들과 협력하기로 하였으며 미국 대형 통신사인 MCI와 대형 IT 기업인 디지털이큅먼트 등과도 협력을 해 미국 정부로부터 인터넷을 독립시키려고 했었다.

하지만, 미국 정부는 인터넷 소사이어티의 활동과 그들의 협약을 인정하지 않았다. 이에 항의해 존 포스텔은 자신의 컴퓨터를 전 세계 인터넷의 루트 서버로 바꾸는 도발을 감행했다. 미국 정부는 모든 수단을 동원해 존 포스텔을 압박했고, 이에 위기를 느낀 그는 루트 서버를 다시 미국 정부로 돌려 놓았다.

하지만 이때 미 정부로 받은 협박에 극심한 스트레스로 시달리다 9 개월 후 심장 마비로 사망했다. 존 포스텔 사건 이후 미국 정부는 주요 인터넷 정책은 자신들이 결정할 것을 공식 선언하며 법으로 명문화했다.

■ICANN을 통해 비판을 피해 가려고 했다

하지만, 세계는 더 이상 미국만의 인터넷이기를 바라지 않았다. 국제사회가 IP주소와 도메인 관리 권한을 국제 단체에 넘기라고 요구하자 ICANN을 만들어서 이 요구를 피해 가려고 했다. 국제사회는 미 상무부와 계약을 통해 생긴 ICANN을 진정한 국제 기구라고 인정하지 않았다.

유럽연합집행위원회(EC)는 ICANN은 미국 상무부로부터 분리되어야 한다고 주장했고 ‘비비안레딩’ EC 정보기술집행위원장은 ICANN와 미국 상무부 간 운영 협력 계약이 만료되면 양측이 더 이상 접촉해서는 안 된다고 얘기하기도 했다.

중국은 한발 더 나아가 도발을 감행하며 미국을 압박했다. 중국은 이미 인터넷 세상에서 무시 할 수 없는 존재이다. 세계 1위 검색 사이트는 구글이지만 2위 자리를 높고 야후와 중국 검색 사이트인 ‘바이두’가 경쟁을 할 정도로 중국은 성장했다.

이미 인터넷 이용자수는 중국이 미국을 앞질렀다. 2006년 3월 중국은 com, net 등을 자신들의 언어로 호환 연결시키는 도발을 감행하며 미 정부와 ICANN에 정면 도전했다.

■미국은 자유를 핑계로 거부했다
미국은 ‘인터넷 자유’라는 명분을 통해 이런 요구사항을 그 동안 교묘하게 벗어 나려고 했다. 각 국가들이 이 문제를 이슈화 하며 미 정부와 논의하자고 하면 인터넷 자유를 내세워 정부와 논의하는 것이 적절하지 않다고 주장했다.

인터넷 자유와 검열 등을 교묘하게 인터넷 주소 문제와 연결 시켰다. 하지만, 불평등한 세상에서 자유를 이야기 하는 것은 불평등한 세상을 계속 유지하기 위해 기득권을 가진 쪽에서 흔히 내세우는 고도의 전략이다. 자유는 사회적 약자인 개인이 강자로부터 부당한 간섭을 받지 않을 자유이지 강국이 다른 국제 단체의 간섭을 받지 않을 자유는 아니다.

미국이 절대 내려 놓지 않을 거 같던 기득권을 갑자기 내려 놓겠다고 결정을 한 이유는 스노든 폭로 이후 국제사회에 곱지 않은 시선을 의식 한 것이라는 분석이 많다. 하지만, 아무리 국제 사회에 압력이 강했다고 해도 그들이 인터넷 주도권을 유지 할 수 있는 다른 대안이 없을 경우 절대 포기 하지 않았을 것이다.

IP주소와 도메인 정책에 대한 권한을 포기해도 인터넷에 대한 주도권을 잃지 않으며 그들이 원하는 목적을 충분히 달성 할 수 있다는 자신감이 이번 결정을 가능하게 했다고 보는 것이 타당하다.

■미국 인터넷 기업이 ICANN 포기를 가능케 했다

국제 사회에서 정치적으로 복잡한 정책들을 독점적으로 행사하기는 어려워지고 있지만 미국 기업들의 경쟁력은 ICANN을 만들던 1998년과는 비교 할 수 없을 정도로 막강해졌으며 이들의 영향력은 우리 삶 깊은 곳까지 침투해 있다.

스마트폰 운영체제와 검색은 구글, PC 운영체제와 업무용 프로그램은 마이크로소프트, 데이터베이스는 오라클, PC와 서버 제조는 HP와 델, 정보기술 컨설팅은 IBM, 네트워크는 시스코, 저장 기술은 EMC와 웨스턴디지털, 모바일은 애플 등 IT에 핵심 기술은 모두 미국 기업들이 독식하고 있다.

민간 기업을 통해서도 얼마든지 인터넷 주도권을 유지 할 수 있기에 상대적으로 정책 부분이 유연해진 것이다. 페이스북을 통해 전 세계 주요 정부, 기업, 개인들의 데이터를 수집하고 있으며 이 정보를 구글을 통해 분석을 하고 있어 겉으로는 미국이 인터넷 패권을 포기하는 것처럼 보이지만 내실로는 인터넷과 인터넷 이용자들의 대한 지배력을 넓혀 나가고 있다.

필요할 경우 미 정부는 은밀하게 자국 기업에게 협조를 요청하면 된다. 스노든이 폭로하고 비즈니스인사이더가 기사화 한 것처럼 페이스북, 구글, 야후를 비롯한 미국의 주요 인터넷 기업은 미국 정보 기관이 쓸 수 있는 별도의 방법을 제공하고 있는 것으로 알려지고 있다.

미 정부는 아이디, 이메일 주소, 계정을 만든 날짜와 시간, 최근 2~3일간 로그인 내용, 이용자 휴대폰번호, 이용자 연락처 정보, 미니피드, 글을 업데이트한 이력, 공유 또는 공지한 글, 게재한 글, 친구목록, 그룹목록, 과거 또는 앞으로 개최할 이벤트, 동영상과 사진, 개인적으로 주고받은 메시지, 접속한 컴퓨터 위치정보 등을 제공 받고 있는 것으로 알려지고 있다.

또한 이미 미국은 인터넷을 통한 도감청 수준이 완성 단계에 이르고 있는 것도 이번 결정을 한 큰 원인으로 뽑을 수 있다. 인터넷을 통해 전 세계에 흐르는 정보를 모니터링 할 수 있는 것도 미국이 ICANN 없이도 주도권을 유지 할 수 있게 하는데 큰 도움을 줄 것으로 보인다.

미국 유타주 북동부의 블러프데일은 인구 만명 미만의 산골이다. 여기에 미국은 20억원 (2조 2000 억원)을 들여 유타 데이터 센터 (UDC)라는 이름의 데이터센터를 건설했다. 각종 위성과 해저 케이블 등을 통해 미국에 들어오는 인터넷 정보와 통신 기록 등 모든 디지털 정보를 저장한다. 전문학적인 데이터 저장 능력을 가지고 있어 전 세계 모든 데이터를 100년 동안 저장 할 수 있다.

가디언 기사에 따르면 미국과 영국은 환대서양 통신 케이블을 해킹해 전세계 이메일, 인터넷 사용기록, 전화통화 등을 도청하고 있는 것으로 전하고 있다. MVR(Massive Volume Reduction)이라는 고성능 필터를 이용해 일반적인 내용은 버리고 특정 주제, 특정 인물에 관련 된 내용만 집중 분석하는 기술도 가지고 있다.

오래 시간 많은 사람들은 인터넷이 미국 정부로부터 독립 해 진정으로 자유로운 공간이 될 수 있기를 꿈꾸었다. 하지만, 미국이 인터넷을 자유롭게 해 준 것은 역설적으로 인터넷이 더 이상 자유 공간일 수 없다는 것을 확인 시켜 주는 일이 되었다.

 Posted by at 12:25 PM

사람들은 왜 논문을 못 써서 안달인 걸까? -소설

 IT, 교육  Comments Off on 사람들은 왜 논문을 못 써서 안달인 걸까? -소설
Mar 152014
 

http://scienceon.hani.co.kr/151818

제19회 카이스트문학상 소설 부문 가작

과학 논문 작성 과정에 관한 고찰

전산학과 박사과정
김창대

초록
논문이란 의미가 있는 걸까? 졸업 말고. 사람들은 왜 논문을 못 써서 안달인 걸까? 박사 4년차가 되어 일저자 논문은 처음인 깜냥에, 나는 되려 의미를 못 찾아 논문을 못 쓰고 있었노라고 항변한다. 처음엔 논문을 읽는 것이 신기했고 쓰는 것은 뿌듯했다. 하지만 공부를 하면 할수록 논문의 아이디어는 다 거기서 거기고, 실험도 겨우 틀어막은 것들뿐이라는 걸 깨달았다. 하지만 논문을 기반으로 과학은 발전하고 있다. 실생활마저 급격히 바꾸고 있다. 결국 나는 정보화 사회의 부품 하나가 되었을 뿐이다. 논문의 의미는 이것이 합쳐져 이룰 거대한 세상에 대한 상상력에 근거를 둬야 한다. 초록을 너무 대충 썼나… 뭐, 읽고 싶은 사람은 본문을 읽겠지.

영문 초록
Are papers meaningful? Except for the degree. Why people are eager for writing papers? Give up. I am not good at English. My major is Computer Science, not English. Why I should write in English? In fact, I know the answer, but, anyway, I don’t want to write an English abstract for this paper. Just read Korean below!

제1장. 서론
00dot.jpg

논문이란 의미가 있는 걸까? 졸업 말고. 하는 일도 없이 스트레스나 받으며 술이나 퍼먹다가 간기능과 바꾸어가게 되는 그 놈의 박사학위를 제외하고 말이다. 내가 무슨 대단한 부귀영화를 바라는 것도 아니고, 박사 하나 받는 다고 부귀영화를 누리는 것도 대한 늬우스 시절에 다 끝났는데.

사람들은 왜 논문을 못 써서 안달인 걸까? 논문 하나 쓴다고 세상이 달라지지도 않으며 벤처 기업 하나 차리는 것도 아니며 작가들처럼 소소하게 목돈 한 번 떨어지는 것도 아니며 여자 친구가 생기는 것도 아닌데. 뿌듯해하며 부모님께 두 손 쭉 뻗어 논문을 내밀어봤자 “이게 뭐다냐. 박사는 언제 되는 것이여?”라고 말씀하실 것이 뻔한데. 뭔지는 몰라도 수고했다며 오리고기에 쌈무 한 번 차려주시겠지만.

그래, 누구는 논문을 많이 써서 교수가 되고, 누구는 논문을 많이 써서 해외 유명 기업에 취직하고, 누구는 논문이 대박 나서 벤처 기업을 차렸다더라. 하지만 그것이 나와 무슨 상관인가? 어느 지역에나 카이스트 가는 학생이 한 명쯤은 나오지 않던가. 하긴, 고등학교 때까지는 내가 그 주인공이었는데. 그러나 결국엔 피라미드의 조금 높은 부분 벽돌 중 하나일 뿐이었다. 그나마 한 두 층 높은. 세상에는 무수히 많은 교수가 있고, 해외 유명 기업엔 무수히 많은 노동자가 있고, 또 무수히 많은 벤처 기업들이 있다. 우리는 평범해지기 위해 특별해지려고 하는 걸까?

박사 4년차나 되어 첫 번째 일 저자 논문을 쓰기 시작하는 주제에 이런 질문을 던질 깜냥은 아닐 터다. 그러나 논문의 의미를 못 찾았기에 아직까지도 논문을 쓰지 못했노라고 항변하련다. 그러면 지금은 왜 논문을 쓰고 있냐고? 당연히 졸업 때문이지. 이제 다시 첫 번째 문단으로 돌아가 볼까? 그래, 논문을 쓰면서도 이쯤 해서 첫 번째 문단으로 돌아가곤 했다.

논문. 영어로는 paper라고들 부른다.[1] 졸업 논문은 thesis라고 부르긴 하지만 그것은 아직 내가 생각도 못할 신성한 것이고, 어쨌든 paper다. 영어사전에서 paper의 1번 뜻은 당연히 종이, 2번 뜻은 신문, 3번 뜻은 편지나 개인적인 자료 등의 서류, 그리고 6번에 가서야 논문이다. 공통점은 간단하다. “종이” 자체로의 기능을 할 때가 가장 많은 물건이라는 것이다. 하루 뒤적거리고 나면 짜장면 쟁반으로 쓰이는 신문지, 한 번 읽혀지면 서랍을 서랍답게 하는 기능만 하는 편지와 개인적인 자료들, 그리고 한 번 끝까지 읽혀지는 일도 거의 없을, 내 불쌍한 논문.

처음으로 선배를 도와 논문을 썼던 기억이 난다. 석사 1년차 때였다. 교수님과 선배가 둘이서 논쟁할 때, 아니 사실은 교수님만 열심히 말씀하시고 선배는, 네, 네, 혹시 이건 어떨까요? 네, 그렇죠, 라고 대답하던 그 때가 생각난다. 교수님과 학문적인 대화를 하고 있는 것만으로도 선배가 위대해보였었다. 선배는 뭔가 의견을 내고 있는데, 나는 머리만 어지러웠다. 교수님 방에서 나오면 선배가 날 따뜻하게 바라보며 “처음엔 다 그래”했다. 정말 처음에만 그랬다. 조금씩 교수님 말씀을 알아듣게 되었을 땐 정말 뿌듯했다. 나도 ‘혹시 이건 어떨까요?’를 말하게 되었을 땐 심장이 떨렸다. 논문에 내가 생각해낸 내용이 두 문단이나 들어가게 되었을 땐 “나도 무엇인가 할 수 있는 사람이 되었다”라고 미니홈피에 올렸다. 지리하게 실험 결과를 정리하고 쪼잔하게 그래프를 다듬으며 밤을 지새울 때도 뿌듯했다. 어쨌든 나도 논문에 무언가를 보태고 있었으니까. 선배의 모니터나 내 모니터나 학교 밖 친구들 데려와서 보여주면 다 똑같아 보일 테니까.

논문이 accept되어 세상에 나왔을 땐, 분명 행복했다. 두 번째긴 해도 내 이름이 박혀 있는 논문이었으니까. 물론 과정이 힘들긴 했다. 하지만 세상에 힘들지 않은 일이 무어가 있겠는가, 어차피 다 힘들다면 내가 재미있고 뿌듯한 일을 하면 되지 않겠는가, 하는 생각을 했다. 업으로 삼아야겠다 싶었다. 자신감도 생겼다. 미팅에서 말을 더 많이 꺼내게 되었고 다른 선배들과도 디스커션을 자주 했다. 나와 대화하던 선배들은 때론 내 시선이 예리하다며 칭찬을 해주었다. “에이, 선배님에 비하면야 새 발의 피고 북한의 고기반찬이죠.”라며 겸손을 떨었지만, 내심은 거만했다. 그래서였다. 박사학위를 받아야겠다고 생각한 건. 석박사 통합과정에 진학해서 대학원생활을 조금이나마 빨리 끝내려고 한 건.

운이 거기서 다 했던 걸까? 그 때부터 모든 게 막히기 시작했다. 내가 생각해내는 모든 것들이 이미 논문으로 나와 있었다. 내 아이디어를 신통해하며 자리로 돌아갔던 선배들이 정작 내 아이디어를 사용하지 않은 이유도 이것이었다. 이것저것 연구하려 하다 보니 아는 건 많아졌지만, 정작 어느 것 하나 깊게 알지 못해서 연구를 시작하기가 힘들었다. 실험 장비, 프로그램 하나 제대로 다룰 줄 아는 게 없었다.

박사를 받으려 했던 게 실수였을까? 그렇게는 생각하고 싶지 않아 발버둥 쳐왔더랬다. 그래도 내가 할 수 있는 일 중에는 가장 나은 일이었다고 상대우위라도 추구했다. “공부가 제일 쉬웠어요.”라는 말이 절대평가를 포함하지는 않는다. 나에겐 다른 것들, 특히 육체나, 사회성을 동반해야 하는 것들이 너무 어렵다. 그래서 공부가 제일 쉬웠다. 그리고 어떻게든 박사만 따면 먹고 살 수는 있다지 않은가. 공학박사는 시간 강사로 전락하는 대신 대기업의 부품이 되는 걸 선택할 수도 있는 참된 기능직 아니던가. 욕심 부리다 하우스푸어만 되지 않는다면, 자식들이 친구들 만날 학원 정도는 보내줄 수 있을 만큼의 돈은 벌 수 있다지 않은가. 이 정도면 절대우위도 꽤 있는 거지. 우리 할아버지가 재산가는 아니니까.

그래, 후회란 게 싫어서 그랬다. 그리고 지금도, 후회하기 싫다. 내 선택은 옳아야만 한다. 그래서 나는 다시 논문을 쓰기 시작했다. 아마 논문 작성이 끝날 때까지 논문의 의미를 찾지 못한다면, 어쩌면 내 삶의 의미를 못 찾았다는 의미가 될 것이다. 지난 5년 동안, 논문 하나를 쓰기 위해 살아왔으니까. 어쩌면 20대 전체를.

그래서 과학 논문 작성 과정에 대해 고찰해보려고 한다. 연구를 시작하면서 가장 먼저 하는 것은 논문 읽기이다. 그것을 2장에서 다룰 것이다. 그리고 나면 아이디어를 떠올리려고 노력한다. 3장에서 다룰 내용이다. 그 다음에 실험을 하고 평가를 한다. 그것을 4장에서 다루고, 5장에서 결론을 내려고 한다.

제2장. 관련 연구
00dot.jpg

정찬용은 아기가 언어를 익히는 과정을 무수히 들은 것을 따라하는 것이라고 했다.[2] (사실 뉘앙스는 비슷하지만 정확히 저렇게 이야기한 것은 아니다. 그러나 정확히 베꼈다간 표절시비나 붙을 테니 인용이라는 이름으로 왜곡을 가미하자. 내 논문에서 표절을 찾아낼 만큼 내 논문을 열심히 읽어줄 사람도 없겠지만. 그리고 저게 인용한 책의 핵심 주제도 아니며 저 책에서 처음 나온 아이디어도 아니긴 하다. 하지만 이런들 어떠하리 저런들 어떠하리.[3] 이런 생각을 나만 하는 것이 아니니 제발 좀 믿어달라는 게 “관련 연구”장의 핵심 주제 중 하나인 걸.) 어쨌거나 논문도 학자들이 사용하는 하나의 언어라고 볼 수 있으므로, 논문을 쓰기 위해서는 먼저 많이 읽어야만 할 것이다.

또, 논문에는 새로워야한다는 강박이 있다. 새롭지 않은 것은 의미가 없다. 그러니 무엇이 연구되어 왔는지 알아야만 한다. 모든 걸 안다는 건 불가능하겠지만 “to the best of our knowledge”라는 표현을 쓸 수 있을 정도는 알아야만 한다. 그러니 논문을 많이 읽어야 한다.

따라서 내 논문 쓰기 과정이 논문 읽기로부터 시작된 것도 당연하다. 때는 학사과정 졸업연구를 할 때로 거슬러 올라간다. 물론, 학사과정 졸업연구를 연구로 쳐주지 않는 사람(주로 박사과정 이상)들도 있을 것이다. 마치 초등학교 시절의 첫사랑을 첫사랑이라 쳐주지 않는 사람들이 많은 것처럼. 하지만 그대가 초등학교 첫 사랑 이후 주욱 솔로였던 사람이라면, 자신을 모태솔로라고 칭하고 싶겠는가? 그러니 이 이야기도 참아주길 바란다. (무엇보다, 이 이야기를 통해 참고문헌 몇 개가 더 늘어날 것이니까, 당신은 참아야만 한다.)

졸업연구를 위해 교수님을 처음 뵈었을 때, 논문 2개를 건네주셨다. 연구 주제와 관련이 있으니 읽어보라고 하셨다. 영어로 되어 있긴 하지만, 12쪽. 서너 시간이면 다 읽겠거니 싶었다. 영어를 잘은 못하지만, 공대 교재들은 잘 읽어 내려가는 실력이니까. 하지만 세 시간 뒤, 나는 뭔가 심각히 잘못 되었다는 걸 깨달았다. 난 아직 첫 장을 넘기지 못 했다. 모니터에는 용어를 검색해본 페이지만 열 개도 넘게 띄워져 있었다. 메모장엔 이 논문을 이해하기 위해 꼭 읽어봐야 할 것 같은 논문 제목 3개가 적혀 있었다. 그리고 한 시간쯤 엎드려 잔 상태라 팔이 저렸다. 내가 대체 얼마나 더 많은 논문을 읽어봐야 하는지가 궁금해져서, 구글스칼라[4]에 키워드를 넣어보았다. 전혀 일반적인 단어가 아닌데도 검색 결과는 10,000개가 넘었다. 논문이 아니라 불로초부터 찾아야할 지경이었다.

일주일 뒤 교수님을 찾았다. 논문 하나를 겨우 읽어낸 다음이었다. 죄송하게도 논문을 하나 밖에 못 읽었다는 나에게, 교수님은 “논문 하나 읽는데 30분을 넘기지 마세요. 정말 자세히 읽을 논문이 아니면.”이라고 점잖게 말씀하셨다. 교수님을 우러러보기 시작했다.

그리고 찾은 것이 “How to read a paper”[6]라는 논문이었다. 그 논문에서는 “three-pass method”라는 것을 제안했다. 논문을 집으면 먼저 서론만 빠르게 읽은 뒤, 나머지 부분은 그림과 그래프만 훑어보라는 것이다. 그 다음, 더 자세히 읽을 논문일 때만 “second pass”나 “third pass”를 통해 더 깊이 이해해 나가라고 했다. 교수님이 말씀하신 게 이 논문에서 이야기하는 “first pass”라는 걸 깨달았다.

그러나 비법은 비범한 사람들의 것이다. 나도 30분 내로 읽어내겠노라고 비상(非常)한 집중력을 모으고 논문을 집어 들어 봤지만, 비상(飛上)하지 못했다. 30분 뒤엔 겨우 세 번째 문단이었다. 역시 모니터엔 위키피디아[7]가 몇 개 띄워져 있었고, 내가 가입한 온갖 카페와 클럽들도 띄워져 있었다.

그래도 그 때는 논문이 신기했다. 어린 시절 하늘 높이 날아다니는 잠자리 한 마리를 콕 잡아 채집함에 넣어두고 신기해하며 바라보던, 그런 느낌이었다. 일주일이 걸리더라도 논문을 이해하고 나면 뿌듯했다. 그리고 4일, 3일 만에 논문 하나를 뗄 수 있게 되었을 때는 키가 쑥쑥 자라는 느낌이었다. 1년 반 정도가 지나고, 마침내 30분에서 1시간이면 논문 한 편의 대강을 파악하게 되었을 때, 그 땐 성장판이 닫히는 느낌이었다.

그래, 그 때부터인 것 같다. 내가 논문을 읽지 않기 시작한 것은. 논문 스터디에 들어가면서도 논문을 더 이상 출력해가지 않게 된 것은. 마음만 먹으면 주요 학회와 저널 논문들을 모두 파악할 수 있게 되었지만, 할 수 있다고 해서 다 하는 것은 아니라는 걸 깨닫게 된 것은. 드디어 날개를 달고, 나는 걸었다. 여전히 일주일에 많아야 한 편 정도를 읽었다. 내 연구 주제와 관련된 논문만 읽었다. 조금만 새로운 주제가 나와도 두려웠다.

그러다가 다시 논문을 30분에 하나씩 읽어 내려가기 시작한 때가, 바로 “관련 연구”장을 쓰면서였다. “관련 연구”장이 너무 짧거나 “참고 문헌” 개수가 너무 적으면 공부하지 않은 것 같으니까. 그리고 교수님이 논문을 쓰실 때 그토록 그림과 그래프에 집착하셨던 이유를 깨달았다. 모두가 나처럼 허겁지겁 “first-pass”만을 지나갈 테니까. 광고가 30초의 예술이듯, 논문도 30분 내로 이해시키지 못하면 인용 받지 못할 테니까.

그리고 나는 서글퍼졌다. 그 사람들도 분명 이십여 년의 공부를 배경삼아 몇 년간 치열하게 노력한 끝에 논문을 썼을 텐데, 나는 그걸 한 두 문장, 길어야 한 문단으로 요약해버렸다. 한 질의 책도 모자랄 만큼 구구절절한 한 사람의 인생에 대해, 남아있는 것은 단 한 줄의 묘비명인 것처럼.

원래는 (원래가 원래인지 이상인지는 모르겠지만) “관련 연구”가 이 논문을 통해 이 주제를 처음 접할 사람들을 안내 해야 하는 것일 게다. 내가 연구를 시작할 때 가장 도움이 되었던 것도 어떤 논문의 “관련 연구”장이었다. 하지만, 나는, 나는, 나는.

어쨌거나 나는 많은 논문을 읽어냈고, 어쨌거나 “관련 연구”장도 써냈지만, 이내 가장 큰 벽에 부딪혔다.

 

제3장. 기막힌 아이디어
00dot.jpg
 
기막힌 아이디어는 사실 그냥 기가 막힌다. 그리고 귀가 막힌다. 어떤 비평도 듣기 싫어진다. 그리고 정말로 기가 막힌다. 이것을 훌륭하다고 우겨야 하는 현실이 너무 비참해진다.

이번 논문을 시작한 건 2년여 전이었다. 나는 드디어 기막힌 아이디어를 냈었다. 아르키메데스처럼 발가벗고 뛰쳐나오진 않았어도, 샤워하다가 났던 그 생각을 까먹을까 허겁지겁 닦고 나왔었긴 했다. 속옷만 입은 채로 후다닥 메모부터 했었다. 정말 그럴 듯 했다. 실험만 하면 결과가 예상대로 짜자잔 나올 것 같았다. 떨리는 마음으로 논문들을 검색해 보았지만 다행히도, 다행히도 그 어느 논문과도 똑같지 않았다.

하지만 지금 쓰고 있는 내용은 그것과는 완전히 다르다. 2년 동안 내 아이디어가 교수님[5]의 생각으로 조금씩, 조금씩 바뀌어왔다. 내 아이디어는 키워드만 남아있다. 교수님이 옹고집 부리신 거라면 좋으련만, 오히려 내 옹고집을 꺾느라 교수님께서 고생하신 결과다. 내 아이디어가 그 어느 논문에도 나오지 않은 것은, 누구도 생각해내지 못했기 때문이 아니라, 그 아이디어가 나쁜 것이기 때문이었다. 키워드라도 남겨 여기까지 연구를 진행시켜 주신 교수님께 심심한 감사를 드린다.

그런데 내가 대학원 짬밥을 먹긴 좀 먹었나보다. 교수님이 허락하셨으니 논문을 쓰기 시작하긴 했지만, 논문이 필요해 논문을 쓰기 시작하긴 했지만, 이런 아이디어로 논문을 써도 되나 싶다. 최근에 나온 논문 a, b, c, d에서 풀려고 시도했던 문제 P가 있는데, 이것을 좀 더 오래된 논문 e에서 사용한 방법 M을 사용해서 풀면 결과가 좋아진다는 것이 내 논문의 요지다. 잠깐, 아이디어라는 게 존재하긴 하는 건가? 한 가지 위안이 되는 건, 다른 논문들을 살펴봐도 다 똑같다는 것이다. 고급용어로 돌려막기다. 돌려막으면서 논문 개수는 점점 더 불어나고, 박사가 양산된다.

“해 아래 새 것은 없다”[8]는 말이 성경에 나온 말이라는 걸 알게 되었을 때, 나는 교회에 다니고 싶어졌다. 빅뱅 이후에 새 것은 없다. 하다못해 인간과 침팬지의 유전자도 98%가 똑같다지 않는가.

논문도 98%가 이전 논문과 동일하고 2%가 다르다. 하지만 신기한 것은 2%밖에 안 다른 인간과 침팬지가 엄청나게 달라 보이는 것처럼, 논문들도 엄청나게 달라 보인다는 것이다. 마치 강산이라도 변한 듯이 변모해있다. 물론 강산이 변해도 산은 늘 거기, 강도 늘 거기 있는 것처럼, 논문도 그냥 다 거기 있지만.

2%를 100%처럼 보이게 하는 것, 그것이 과학 논문의 과학일 것이다. 2% 다른 주제에 나는 완전히 새로운 존재이며, 기존의 것이 가지지 못한 것을 가지고 있으며, 그래서 나는 이 세상을 지배할 권리가 있다는 결론을 내리는, 인간처럼. 그런 면에서 논문은 현실주의 문학[9]이다. 철저하게 사실에 근거하고, 철저하게 현재를 비판하면서, 철저하게 꾸며져 있다. 논문을 많이 쓰는 이들을, 나는 그들의 글 솜씨로 인하여 존경한다.

사실 현실주의적 관점에서도 논문은 제 기능을 하지 못한다. 나는 이제껏 “연구 이외의” 쓸 모가 있는 논문을 거의 보지 못하였다. 물론 나의 지도교수님[5]은 “연구는 5년 혹은 10년 앞을 내다보면서 할 수 있는 모든 것을 시도해보는 것이에요. 그리고 세월이 흐르며 검증되는 기술들이 실제 현실에 반영되는 것이고요.”라며 논문들을 옹호한다. 그 말 자체에 토를 다는 것은 아니다. (사실 토를 달면 안 된다. 그리고 이 정도면 엄청 친절한 교수님 아닌가? 교수님, 보고 계신가요?) 하지만 내가 본 대부분의 논문들은 분명히 5년 뒤엔 사라져야 마땅한 기술들을 개선시키는 데 모든 노력을 기울이고 있다. 이게 무슨 생명체도 아니거늘, 절대로 호흡기를 떼지 않고 이따금 전기충격을 가한다. 실용성이라곤 보이질 않는 것들을 “요즘 많이 연구되고 있는” 것이라는 핑계를 대며 연구한다.

물론, 단 2%만 달라도 충분한, 쓸모조차 없어도 되는, 그런 아이디어마저 내 머리에서는 나오지 않는다. 학사과정 졸업연구, 그리고 석사 1년차 때의 그 두 문단, 그것이 나에게서 나올 수 있는 새로운 것의 끝인 것 같다.

다 필요 없고, 사실, 이 소설이 그렇다. 요즘 주변에서 다들 논문을 쓰고 있으니까, 논문이 나에게 있어 가장 중요한 문제가 되었고, 소설이란 장르가 있다는 것을 아니까, 논문에 대한 소설을 쓰고 있지 않은가. 논문의 의미도 모르면서, 아니, 논문이 뭔지도 모르면서 말이다. 이 소설의 가장 새로운 점은 “논문 작성에 대한 논문 형식의 소설”이라고 할 수 있겠다. 하지만, “논문 작성에 대한 논문 형식의 에세이”마저 이미 나와 있다.[10] 그러니 별 새로울 것도 없다. 게다가 이미 문학작품 속에서도 많은 사람들이 논문 쓰기에 대해 갈등해왔을 것이며, 그 중에 논문 형식으로 된 것이 없으리란 보장도 없다. 그리고 이 소설이 실생활에 무슨 의미를 갖는지도 나는 도무지 모르겠다. 아, 내가 이 소설은 왜 쓰고 있는 것인가. 이 소설은 5년 뒤, 10년 뒤를 내다본 것이라는 핑계조차 댈 수 없는 걸. 아닐 수도 있겠다. 5년 뒤, 10년 뒤에도 무수한 사람이 논문 작성에 열을 내고 있을 테니.

어쨌거나, 나는 논문이 필요하니까, 그리고 교수님이 허락하신 아이디어니까, 실험도 했다.

제4장. 실험과 평가
00dot.jpg

실험은 밀당이다. 더 시키려는 자와 덜 하려는 자 사이의 지루한 싸움이다. 숫자 하나, 단어 하나를 추가시키기 위해 며칠은 기본, 심하면 몇 달이 더 걸린다. 그리고 나는 빨리 졸업하고 싶다.

교수님과의 밀당이라기 보다는 가상의 리뷰어와의 밀당이다. 하긴, 가상의 리뷰어는 교수님의 입에만 존재하니 결국 교수님과의 밀당일지도. 더 시키려는 자의 논리는 이렇다. 실험을 통해 기막힌 아이디어가 정말 실현 가능하고 재현 가능한 것임을 보여야 하다. 그러려면 이런 저런 가정들을 제거해서 더 현실적인 실험 환경을 만들어야 한다. 또, 많은 횟수의 실험을 한 후 평균과 분포를 보여야 한다.

하지만 나는 안다. 일단 아이디어가 현실적이지 않다. 이론뿐이다. 그리고 내가 가까스로 만들어 낸 바로 이 환경에서만 동작한다. 실험 결과가 하도 안 나와서 정말로 교회에 발을 들일 뻔 했단 말이다. 여기서 환경에 현실성을 더하라는 건, 아니 털끝만 건드린대도 나는 싫다. 분명히, 괴상망측한 결과가 나올 게 뻔하다. 비록 지금은 “실험은 이런 환경에서 했다. 하지만 내 아이디어는 다른 일반적인 상황에서도 통할 것이다.”라고 쓰고 있는 중이지만, 그게, 참, 그렇다. 연구란 걸 ‘세상 아무도 모르는 것을 내가 알아내는 것’이라고 정의한다면, 난 참 연구자다.

더 많은 횟수의 실험에 관해서는, 음, 나는 자고 싶다. 일주일 넘게 종일 연구실에만 있는 중이다. 새벽 3시도 넘어서 들어갔다가, 눈 뜨면 바로 연구실로 향한다. 아침은 샌드위치로 때우고, 점심도 때를 놓쳐 느지막이 라면 한 그릇 먹는 일이 잦고, 그러다보니 밤 9~10시나 되어 치킨 한 마리 시켜 먹기 일쑤다. 왜 학교 근처 치킨집들이 양념치킨에 뜬금없이 밥을 같이 배달해주는지, 실험을 시작하기 전엔 깨닫지 못했었다. 그나마 같이 먹어줄 친구가 있을 때나 치킨도 먹는다. 그냥 삼각김밥 두 개에 우유 하나 같은 “매점 정식”을 먹을 때도 많다.

이 글을 읽는 당신의 마음에 자라날 동정이 너무 부담스러워 고백하자면, 솔직히 나는 실험도 더 할 수 있고 잠은 이미 자고 있다. 내가 거짓말을 한 것은 아니다. 일주일 넘게 종일 실험실에 있는 것은 맞다. 하지만 종일 실험을 하고 있는 것은 아니다. 실험과 동시에 미드(미국 드라마)를 시작했다. 실험 결과를 기다리는 동안 보기에는, 한 회에 20분 정도인 미드는 매우 적절하다. 게다가 영어로 되어 있어 놀고 있지만 놀고 있지만은 않은 느낌도 준다. 물론, 한글 자막을 늘 깔아 놓지만. 미드를 보다보면 시간은 20분 단위로 흘러갔다. 때로는 실험이 끝나고 나서도 한 편만 더, 한 편만 더, 하느라 1시간이나 늦게 결과를 확인한 적도 있다. 뿐만 아니라, 보는 예능 프로그램도 늘었다. 긴 실험에 좋다.

눈 뜨고 바로 실험실로 향하는 것도 맞긴 하다. 하지만, 그 시간이 11시쯤일 따름이다. 시간이 애매해서 샌드위치를 사오는 것뿐이다. 샌드위치를 그냥 먹긴 아쉬우니 예능을 틀어놓고 먹기 시작하면 바로 1시간이 흐르고, 실험 결과를 잠시 확인하다가 페이스북을 좀 하다보면 학교 식당 점심시간이 이미 지나있다. 그래서 라면을 먹으러 가는 것이다. 에이, 관두자. 동정이 부담스러운 건 둘째 치고 너무 쪽팔린다. 아니, 그보다, 만에 하나 교수님이 보실라.

그래, 내가 이 모양이어서 박사 4년차나 돼서야 일저자 논문을 겨우 쓰기 시작했는지도 모른다. 그 많은 시간을 논문을 읽거나 다른 공부를 했으면 지금쯤 난 위대한 학자가 되었을지도 모른다. 아니, 멍 때리고만 있었어도, 그동안 자유로이 움직이던 뇌 회로들이 이런 저런 좋은 아이디어를 떠올렸을지도 모른다.

하지만, 논문이 아무리 완벽하게 이성적인 결과물이라 하더라도, 그것을 쓰는 나는 감정을 가진 존재가 아닌가. 나는 기계가 아니다. 늘 머리가 일정한 속도로 도는 것도 아니고 항상 연구를 할 수 있는 상태도 아니다. 미셸 뜨루니에가 말한 대로 “일은 인간의 본성에 맞지 않는다. 하면 피곤해지는 게 그 증거다.”[11]

나도 법정기준근로시간인 하루 8시간은 채워야하지 않나 싶기도 했다. 하지만 찾아보니 “법정기준근로시간”이란 하루에 일을 해도 되는 “최대” 시간을 의미하는 것이지 “최소” 시간을 말하는 것은 아닌 걸 발견하고는 그만 두었다.[12]

논문을 쓴다는 것은, 소설을 쓴다는 것과 같다. 세상의 것에 대해 질문을 던지고, 그 질문에 대해 열심히 고찰하고, 그 결과를 글로 나타내는 것이다. 소설가는 실험은 안 해도 되지 않느냐고? 모르시는 말씀. 소설가가 얼마나 열심히 취재를 다니는데. 그리고 소설가도 하루 종일 눌러 앉아 글만 쓰지는 않는다. 여러 가지로 놀다가 생각이 떠오르면 그제야 글을 쓰는 것이다. 쓰다가 막히면 또 논다. 그러다 또 쓴다. 비슷한 일을 하는데 나도 그래도 되지 않겠는가? 이럴 때 보면 머리는 참 좋은 것 같은데 말이지.

물론 통장에 인건비가 들어올 때면 미안한 마음이 든다. 회사에 다니는 만큼 돈을 많이 받는 건 아니지마는, 회사보다도 훨씬 훨씬 덜 일하니까. 아침에 부모님이 거신 전화를 자느라 받지 못했을 때도 죄송하다. 부모님은 내 등록금 대시느라 아침 일찍부터 일하시는데, 나는 서른 줄에 접어들고서도 철이 들지 않은 것 같아서. 그리고 나도 안다. 제아무리 아이디어가 중요하다해도, 결국 엉덩이 붙이고 앉아있는 시간 없이는 논문이 나오지 않는다는 것을. 그리고 소설가가 취재하는 시간보다 훨씬 더 많은 시간을 실험하는데 쏟아야 한다는 것을.

그리고 나는 논문을 쓰다가 사랑을 잃었다. 처음엔 불규칙한 식생활을 걱정해주던 그녀는 결국 짜증을 내기 시작했다. 날 자기 몸 하나 건사하지 못하는 인간으로 취급하기 시작했다. 논문 이야기를 하느니 차라리 군대 이야기를 해달라고 했다. 난 전문연구요원인데, 그러니까 논문을 쓰는 게 군생활인데. 자기를 생각하지 않는다고 했다. 하루 종일 생각하는 것이 내 직업인데. 그리고 그녀는 떠나갔다. 이게 논문이었다면, 이런 흐름에도 맞지 않는 문단은 삭제 당했겠지. 하지만 내가 논문만 쓰지는 않는다는 증거를 남기고 싶다.

너무 자세하게 핑계 댄 것 같지만, 본디 “실험과 평가”장은 최소한의 실험을 가지고 최대한 자세한 분석을 통해 양을 늘리는 것이다.

제5장. 결론
00dot.jpg

논문은 의미가 있는 걸까? 지난 논문과 다를 바도 없고 겨우겨우 증명해낸 사소한 논리 따위가 정말 의미가 있는 걸까? 단언컨대 의미가 없다, 고 말하기엔 과학은 너무도 발전했다. 항상 그 자리인 것 같은 논문을 기반으로, 과학은 우리 실생활마저 너무도 많이 바꾸어 놓았다. 쫓아가기 힘들 정도로 빠르게.

논문은 원소와 같은 존재인지도 모른다. 원소가 모여 세포가 되고 세포가 모여 사람이 되지만, 아무도 ‘원소’라는 단어를 들었을 때 사람을 떠올리지는 않는다. ‘원소’에 대한 논문에서 ‘이것은 사람을 이루는 구성 물질이니 중요하다’고 하지 않을 것이다. 그저 ‘원소’ 자체에 대해 논할 것이다. 애초에 질문이 잘못 되었다. 논문의 의미를 찾다니.

찰리 채플린은 영화 “Modern Times”[13]에서 인간이 철저하게 부품화되어버린 산업사회를 풍자한다. 사람이 사람을 위한 물건을 만들기 위해 부품이 되어버린 것이다. 정보화 사회가 되고, 사람들이 사람을 위한 지식을 만들기 위해 다시 부품이 되어버렸다. 영화 속 찰리 채플린과 나의 차이는 2차 산업에 종사하느냐, 3차 산업에 종사하느냐의 차이일 뿐이다.

그렇다고 부품이 되어버린 사람이 의미가 없는 것은 아니다. 영화 속에서 단순 노동을 하고 있는 찰리 채플린은 분명 무언가 필요한 물건을 만들고 있는 것이다. 공사판을 다녀와서 “한강대교 내가 지었어.”라고 말할 수 있는 사람이 된다면, 그의 하루는 의미 있다. “하루 종일 시멘트만 발랐어.”라고 말하는 사람의 하루는 의미 없다. ‘원소’를 생각하며 ‘사람’을 떠올릴 수 없다면 의미 없는 사람이다.

그래, 논문에 대한 의미를 찾을 정도로, 나는 논문에 너무 매몰되어 있었을 뿐이다. 하긴, 모두가 논문만 이야기하는 대학원에서 그러지 않는 것도 불가능에 가깝다. 그러면 어떡하지? 역시 교회를 가야 하나.

어쨌거나, ‘논문’하면 떠올려야 하는 것은 ‘과학 발전’이니까, 난 이제 ‘과학 발전’의 의미를 찾아야만 한다. 그리고 이런 거대한 물음을 위해 우리에겐 “future work”이라는 마법 같은 단어가 있다. 다음에 연구하겠다고 해놓고, 언제 할 것인지는 말하지 않으면 된다. 뭐, 다음에 쓸 거리 없는 사람들이 쓰겠지.

그런데, 이걸로 졸업을 할 수는 없을까?

참고 문헌
00dot.jpg
[1] 네이버 영어사전. 논문을 쓰면서 그 어떤 다른 논문들보다 자주 뒤적거리는 것. 제길, 논문은 왜 영어로 써야 하는 거야?
[2] 정찬용. “영어공부 절대로 하지마라!”. 사회평론. 1999년. 16-17쪽. 10년 전에 읽은 뒤, 거들떠도 안 보다가 이번에 20여 쪽을 훑어보았다.
[3] 이방원, “이런들 어떠하리”. 출판 연도, 출판사 미상. 나는 표절이 두렵다.
[4] http://scholar.google.co.kr 내가 생각하는 모든 것들이 이미 존재한다.
[5] 이름을 밝힐 수 없는 나의 지도교수님. 교수님이 이 글을 보면 안 되는데…
[6] S. Keshav. 2007. How to read a paper. SIGCOMM Comput. Commun. Rev. 37, 3 (July 2007), 83-84.
[7] http://en.wikipedia.org/ 정말 많이 참고하지만 참고문헌에는 넣을 수 없는 문헌.
[8] 성경 전도서 1장 9절 하반부
[9] http://www.norway.or.kr/News_and_events/press/travel/4/Norwegian-Maters/—The-Playwright-Henrik-Ibsen/–Ibsen-and-Realism/#.UnSr0vlT4aw 혹시 이런 말이 있을까 싶어 찾아봤는데 정말 있다. 참 다행이다.
[10] Roy Levin and David D. Redell. An Evaluation of the Ninth SOSP Submissions; or, How (and How Not) to Write a Good Systems Paper. ACM SIGOPS Operating Systems Review, Vol. 17, No. 3 (July, 1983), pages 35-40. 같은 내용이 다음에도 게재됨. SIGGRAPH Comput. Graph. 22, 5 (October 1988), 264-266.
[11] 프랑스 작가 Michel Tournier. 다음 강연에서 인용한 것을 재인용: 김영하, “예술가가 되자 지금 당장”. TEDxSeoul 2013. http://www.ted.com/talks/lang/ko/young_ha_kim_be_an_artist_right_now.html
[12] 대한민국 법률 제11270호. 근로기준법 제 50조. (2012.2.1. 일부개정)
[13] Charlie Chaplin, Modern Times – Factory Scene (HD – 720p). 1936. Available at https://www.youtube.com/watch?v=tfw0KapQ3qw

 Posted by at 8:34 PM

아마존 이야기

 IT, 정보보호  Comments Off on 아마존 이야기
Feb 252014
 

아마존의 원클릭 결제와 망국병 액티브엑스 기반의 결제

Standard

amazon

세계최대 온라인 쇼핑기업인 아마존이 우리나라 온라인 쇼핑산업에 진출한다는 소식이 전해졌다. 아마존은 지난 해 5월 ‘아마존 코퍼레이트 서비시즈 코리아‘란 한국법인을 설립하였고, ‘아마존 웹 서비스(AWS)’를 시작했다. 아마존은 여기에 그치지 않고 물류창고지를 알아보는 등 물밑 준비를 한다는게 알려진 것이다. 아마도 일본에서의 성공경험과 더불어 우리나라 사람들의 해외직접구매 열기때문에 우리나라 시장에 거는 기대가 클 것이다.

그런데 우리나라 소비자들 사이에서 특이한 환호성이 나왔다. 마치 애플의 아이폰이 그랬던 것 처럼, 아마존이 들어와서 액티브액스 전자결제의 고통에서 해방시켜 달라는 절규였다. 필자도 동감할 만한 경험이 여럿있다. 작년 초 온라인 쇼핑몰에서 물건을 잔뜩 찾아서 쇼핑백에 담고, 결제를 하려했더니 액티브엑스를 설치해야 했다. 그런데 시스템이 재부팅되더니 쇼핑백은 텅비었다. 20 분에 걸친 노력 끝에 결국 구매를 포기했다. 하지만 포기하지 못하는 경우도 있었다. 한 대학에서 학적부를 발급 받으려했는데 수수료 포함 550원을 결제해야했다. 역시 액티브엑스를 설치하고 또 설치하고 그러다가 무려 22분이 걸렸다. 허탈과 분노로 점철된 쇼핑의 사용자경험(UX)이다.

외국의 쇼핑사이트는 전혀 그렇지 않다. 돈 쓰겠다는데 쫓아내는 우리나라와 달리 편하게 돈쓰게 만드는 서비스를 가지고 있기 때문이다. 대표적인 서비스가 바로 아마존의 원클릭(1 click)과 페이팔(PayPal)이다. 오늘은 이들이 추구하는 사용자경험(User eXperience)의 구매편의성을 이해하고, 액티브엑스로 억압받는 국내 쇼핑산업의 경쟁력을 되돌아 보았으면 한다.

1)    아마존의 원클릭 서비스

아마존의 원클릭 서비스란 한 번에 모든 일이 끝난다는 뜻이다. 물건을 보고 그 옆에 있는 원클릭 버튼을 누르면 다 된다. 버튼을 누르면 주문이 접수되고, 등록해 놓았던 신용카드로 결제가 되고, 저장된 주소로 배달 된다. 물론 30분이내에 취소할 수 있다. 인터넷익스플로러(IE) 뿐만 아니라 크롬이나 파이어폭스, 사파리에서도 되고, 애플 컴퓨터에서도 쓸 수 있다.

한번 클릭이란 극단적 편리함에는 소비자가 돈을 내는지도 모르게 한다는 전략이 숨어 있다. 결제과정을 최소화시켰기 때문에, 소비자는 클릭을 하는 과정에서 하게 되는 돈을 낼까말까라는 고민이 줄고, 결국 쇼핑을 더 많이 하게 된다.

2) 페이팔

아마존의 원클릭보다 광범위하게 쓰이는 온라인 결제 1위 서비스가 페이팔(PayPal)이다. 아마존의 원클릭은 아마존 내에서만 사용할 수 있지만, 페이팔은 온라인 쇼핑 뿐만아니라 기부등 송수금 서비스 전반에서 사용하고 있다. 현재 전세계 24가지 통화(currency)를 지원하며, 3억 개가 넘는 계좌를 가지고 있다. 이베이(eBay)에서는 판매자들이 수금을 하는 유일한 수단이기도 하다.

페이팔의 역사를 간단히 살펴보자. 우리가 액티브엑스에 시달리고 있는 지금으로 부터 약 15년 전까지 거슬러 올라간다. 페이팔의 기원은 전기자동차로 잘 알려진 앨런 머스크가 1999년에 설립한 엑스닷컴(x.com)이다. 머스크는 집투(Zip2)를 팔아서 번  2천2백만 달러중 일천만 달러를 투자하여, 은행을 거치지 않고 이메일을 이용해서 간편하게 송금하는 방법을 고안하였다. 그리고 2000년에 컨피니티(Confinity)와 합병하여 페이팔을 개명했다. 다음 해인 2001년에 페이팔은 엄청난 성장을 거두며, 10대 인터넷 결제서비스가 되었다. 2002년 이베이(eBay)는 간편한 결제의 중요성을 알아차리고 미화 1.5빌리언달러, 우리 돈으로 약 1조 6천억원에 페이팔을 인수하였다. (지면의 제약으로 다루지 못하지만 페이팔 창업멤버의 성공을 빗댄 ‘페이팔 마피아’를 찾아서 읽어보기 바란다.)

페이팔은 은행을 거치지 않고 인터넷을 통해 결제를 하고 송수금을 할 수 있는 간편한 서비스이다. 결제시 신용카드 정보를 매번 입력할 필요가 없으며, 페이팔 버튼을 누르고 비밀번호만 넣으면 된다. 업체측에 신용카드 번호나 은행계좌번호, 개인정보를 보내지 않아 안심도 된다. 그리고 여러 사이트에서 동일한 페이팔 결제시스템을 쓰기 때문에 매번 결제방법을 배울 필요도 없고, 사이트마다 신용카드 정보를 입력할 필요가 없다. 개인, 개인사업자, 법인 모두 거래 계좌를 개설할 수 있으며, 계좌 유지 수수료는 무료이다. 우리나라에서도 비자나 마스터 같이 해외에서 사용할 수 있는 신용카드만 있으면 사용할 수 있다.

페이팔을 기본으로 하는 다양한 응용결제 서비스가 등장하기도 하였다. 예를 들어 빌미레이터(BillMeLater)라는 서비스는 이름 그래도 요금을 지불하는 시점이 25-90일 정도로 미루어진다. 따라서 당장에 돈이 나가지 않는 거래에 유리하다. 거래 특성상 신용카드는 사용할 수 없다는 단점이 있고, 만기일까지 송금하지 않을 경우 많은 이자를 지불해야 한다. 트위터에서 이용하는 트윗페이(Twitpay)도 페이팔을 기본으로 한다.  수취인의 사용자 계정과 액수를 보내면, 수취인에게 메세지를 전달하면서 돈은 페이팔을 통해 결제된다.

분명한 것은 아마존의 원클릭이나 페이팔처럼 간단하고, 편리하며, 안전한 결제 서비스가 도입되어야 쇼핑의 사용자경험(UX)이 개선될 수 있다. 그래야 소비자들은 즐겁게 쇼핑하고, 쉽게 구매를 하고, 기업은 돈을 벌 수 있다. 문제는 돈을 쓰고 싶어도 절약하게 만드는 액티브엑스 기반의 결제 때문에 한국의 온라인 쇼핑 산업이 경쟁력을 잃고 있다는 점이다.

엑티브엑스 기반의 전자결제는 이제 망국병이라 해도 과언이 아닐 것이다. 마이크로 소프트도 포기했다는 액티브엑스를 고수하는 심각성이 잘 드러난 예가 있다. 어떤 웹사이트에서는 IE 10은 지원하지 않으니, 액티트엑스를 잘 설치할 수 있는 IE 6에서 IE 9로 내려서 사용하라는 웹사이트도 있었다. 보안때문에 액티브엑스가 있어야한다는 이야기도 있는데, 보안의 기본 규칙도 지키지 않는다는 것은 잘 알려져 있으니 더 이상 거론도 않겠다.

우리 쇼핑 산업은 이미 안방에서 글로벌 경쟁을 하고 있다. 국내 소비자는 네 명중 한 명 꼴로 불편하고 값비싼 국내 온라인 쇼핑대신 해외 온라인 쇼핑을 하며 그 편리함에 감탄하고 있다. 여기에 이제 아마존까지 한국으로 진출한다고 한다. 물론 아마존이 한국에 들어오면 액티브엑스 때문에 원클릭을 못쓰게 되어 결국 마찬가지로 불편해 질 것이란 주장도 있다. 그렇지만 아마존이 물류창고만 한국에 두고, 비자나 마스터 등 해외결제 가능한 카드만으로 모든 거래를 미국서버에서 한다면 어떻게 될까? 쉽진 않지만 전혀 불가능한 스토리도 아니다. 이미 스마트폰에서 유료 앱을 구매할 때 원화가 아닌 달러로 표시되고, 카카오톡에서 스티커를 구입할 때도 달러로 표시된다. 결제는 해외결제가 가능한 비자나 마스터 카드로만 하고 있다. (재작년 구글은 플레이스토어에서 우리나라 카드로 결제할 수 있도록 시도를 했지만 국내 법의 제약 때문에 포기했다.)

그리고 액티브엑스 기반의 결제는 우리나라 온라인 쇼핑 산업의 글로벌화도 막는다. 우리나라 소비자가 해외 직접구매에 열을 올리는 것처럼, 한류붐을 타고 우리나라 쇼핑사이트에서 직접구매하고 싶은 해외 소비자가 있을 수 있다. 중국, 일본, 동남아는 신선식품배송도 할 수 있다. 하지만 가슴에 ‘참을 인’자를 서른 번쯤 새기면 돈을 받아주겠다며 액티브엑스기반 결제 서비스를 설득 할 수 있을까? 해외에선 50%이상이 IE를 쓰지 않고 크롬이나 파이어팍스, 사파리를 쓴다는 통계도 있고, 미국에선 마이크로 소프트 윈도우를 쓰지 않는 사용자가 30%나 달한다고도 한다. 이런 소비자는 배척의 대상인가?

우리나라 산업은 외세의 힘을 빌리지 않으면 혁신할 수 없는가? 아마존의 한국진출이 실현될 지, 액티브엑스로 부터 국내 소비자를 구원해 낼 수 있을지는 모르겠다. 다만 우리나라 온라인 쇼핑 산업이 퍼스트무버로 진일보하려면 철저하게 사용자경험(UX)에 입각한 산업 전략과 관련 법규의 정비가 필요하다. 그 발걸음의 시작이 액티브엑스의 철폐와 관련법규의 정비이다.

 

http://uxsymphony.wordpress.com/2014/01/09/amazon-1-click/

 

 Posted by at 5:23 PM