Daybreakin Things

Posted
Filed under 살아가기, 생각하기

이번 주에는 석사논문 마무리와 연구실 서버실 재정비 작업으로 인해 12월 31일 당일이 되어서야 다시 집에 왔다. 올 한해는 심리적으로 참 힘든 시기를 보냈지만 또 그만큼 얻은 것들도 많다는 생각이 든다. 한해 해왔던 주요 일들을 정리해본다.

*

석사 연구 - "DoubleClick: Boosting the performance of Click modular router"

내가 석사과정 동안 해온 연구는 고성능 소프트웨어 라우터에 관한 것이다.

라우터는 인터넷에서 사용되는 데이터 전송 단위인 패킷(packet)들을 각 패킷에 쓰여진 목적지 IP 주소를 보고 어디로 보낼지 결정하는 역할을 하는 장비이다. 전세계에 깔린 인터넷망에 골고루 접속하기 위해 가장 핵심적인 역할을 담당하는 셈이다. 이 라우터를 만드는 방법엔 여러가지가 있는데, IP 주소를 보고 목적지 정보를 가져오는 연산 하나에 엄청나게 최적화된 전용 하드웨어 칩(content addressable memory)을 이용하는 방법이 있고(대부분의 상업용 라우터는 이런 칩들을 사용한다) 소프트웨어 라우터처럼 범용 PC 기반의 소프트웨어만으로 구현되는 종류도 있다. 후자의 경우 손쉽게 기능을 바꾸거나 추가할 수 있기 때문에, 전통적인 TCP/IP가 아닌 새로운 종류의 네트워크 프로토콜을 연구한다든지 혹은 IDS(침입 탐지 시스템)나 방화벽 같이 복잡한 규칙을 구현해야 할 때 많이 사용한다.

하지만 소프트웨어 라우터의 가장 큰 문제는, 성능이 낮다는 점이다. Linux를 써서 "그냥" 구현하면, 아무리 i7급의 최신 쿼드코어 CPU를 박아도 10 Gbps의 트래픽을 처리하기가 버겁다. 일반 가정에서야 100M 광랜 정도면 충분하지만, 인터넷망의 근간을 구성하는 라우터는 100 Gbps는 보통이고 심지어 Tbps 급 장비도 존재하는 세상이다. 방화벽의 경우 기업 데이터센터의 관문(gateway)으로 설치하는 경우도 있기 때문에 수십 Gbps 정도는 거뜬히 처리할 수 있어야 한다. 그래서 우리 연구실 선배들이 했던 일은, Linux에 들어가는 10 Gbps급 랜카드 드라이버를 최적화하고 패킷 처리 연산 중 복잡한 부분을 CPU가 아닌 GPU에 맡김으로써 일반 PC로도 40 Gbps 이상의 성능을 낼 수 있음을 보인 것이다. 국내에는 많이 알려지지 않았지만, 네트워크나 시스템 분야의 해외 학회에서는 PacketShader라고 하면 꽤 유명하다.

내가 한(…이라기보다 하려고 했던…) 일은 PacketShader 플랫폼이 한 번에 한 종류의 패킷 처리 연산(IPv4/IPv6 routing, IPsec encryption 등)만 돌리도록 최적화된 것을 여러 종류의 패킷 처리를 동시에 같이 할 수 있도록 만드는 것이다. 실제 PacketShader에 손을 대기 시작한 건 작년 여름부터인데, 처음 6개월 동안은 "PacketShader를 실제로 다른 사람들이 써볼 수 있는 것으로 만든다"는 것을 목표로 control plane이라고 해서 라우팅 테이블(IP 주소와 목적지를 연결시켜주는 정보) 관리하는 기능을 구현하려고 했다. 그러다가 올해 초 방향을 바꿔 여러 패킷 처리 연산을 동시에 돌릴 수 있게 하는 것을 목표로 삼았다. 그래서 가을까지 내내 그걸 구현하려고 삽질했는데, 졸업논문 데드라인 3주 전이 되어서야(!) PacketShader 기반으로 구조를 바꾸기보다는 차라리 이미 modular archiecture가 잘 구현되어 있는(그러나 성능은 낮은) Click modular router의 성능을 개선하는 쪽으로 접근하는 게 낫겠다는 결론을 내린 것이다. 랄라; 처음 생각은 성능이 좋은 시스템을 모듈화하는 것이 쉽지 않을까였는데, 생각을 바꿔서 모듈화된 시스템의 성능을 높이자는 것이 된 셈이다.

결과적으로, 11월 한달 간 벼락치기한 졸업논문 연구를 통해 PacketShader에서 적용했던 최적화 기법들을 Click에 맞게 변용하여 PacketShader처럼 대략 30 ~ 40 Gbps 급까지 끌어올리는 데 성공했다. 원래 Click을 그냥 돌리면 10 Gbps도 채 나오지 않는다. 여기까지만 들으면 환상적으로 보이지만, 이걸 실제로 "다른 사람이 쉽게 가져다 쓸 수 있는" 물건으로 만들기 위해서는 갈 길이 멀다. 원래 연구라는 게 다 그렇기는 하지만, 실제 해보면서 느끼는 건 역시 '제품화', '상용화'라는 게 정말 귀찮고 힘든 일이라는 것.

이제는 연구와 개발(코딩)의 균형을 어떻게 잡아야 할 지도 감이 오고 연구와 개발이 어떻게 다른지도 알 것 같다. 말하자면 연구는 top-down approach(하향식 접근)이고 개발은 bottom-up approach(상향식 접근)라고 할 수 있겠다. 항상 코딩할 때 마음에 새겨야 할 것은, 내가 이 코딩을 왜 하고 있는지, 이것이 연구로 달성하고자 하는 목표에 얼마나 도움이 되는 것인지 끊임없이 질문해야 한다는 점이다. 코딩 자체의 재미를 좇아가다보면, 무언가 일은 열심히 했는데 연구 결과물은 남지 않는 상황이 생긴다. 또, 매주 있는 교수님과의 연구 미팅에서도 "내가 한 일"을 이야기하기보다는 "무슨 일을 어떤 의문에 답하기 위해 했고, 그 결과가 무엇인지 또는 무엇 때문에 결과를 얻을 수 없었는지"를 중심에 두어야 한다. 특히나 나처럼 오픈소스로 하고 싶은 거 하는 순수한 지적 유희의 재미를 즐기던 사람이라면 더욱 조심해야 할 부분이다. 물론 어느 정도 시간 여유가 있을 때는 연구에 당장 직접적인 도움이 되지는 않지만 장기적으로 시간 절약에 도움이 되는 refactoring 같은 작업을 해두면 좋다.

다만, 석사과정 하면서 개인적으로 아쉬웠던 부분은 생각보다 논문을 많이 읽지 못했다는 것이다. 숙독이 아니라 통독이라도 하루에 논문 1~2개씩은 봐야 한다고들 이야기하는데, 코딩에 치이다보면 며칠, 몇주씩 논문을 거의 읽지 못하는 경우도 있었다. 그래서 새해부터는 일주일에 2번 정도는 한나절 내내 논문만 읽는 시간을 따로 잡아볼 생각이다. 주말에 한번, 매주 있는 연구미팅 끝나고 한번 정도면 적당할 것 같다.

*

POPONG (Open Politics Engineering) - IT 정치참여 플랫폼 프로젝트

2010년 말부터 SPARCS 몇몇 선후배들을 주축으로 시작한 프로젝트로, IT 기술(여기서는 주로 소프트웨어를 의미)을 이용해 일반인들이 정치적 의사결정에 필요한 정보들을 손쉽게 얻을 수 있도록 하고 더 나아가 많은 사람들이 정치에 긍정적인 관심을 가지도록 돕는 일련의 소프트웨어와 서비스를 개발하자는 것이 목표이다. 또한 공돌이들이 물건만 만드는 사람들이 아니라 세상을 변화시키는 데 참여할 수 있는 사람들이라는 것을 보여주자는 것도 하나의 동기가 되었다. 나는 기본적으로 민주주의라는 틀과 선거 제도를 그대로 인정하되, 이 프로젝트를 통해 선거와 집회만으로는 정치 참여의 수단이 너무 부족하다는 인식을 가지고 선거기간에 사람들의 선택을 돕고 선거기간이 아닌 때에는 사람들이 정치인들에 대한 감시와 여론 수집의 역할을 함께 할 수 있게 만들고 싶다. 신앙적 관점에서는, "아버지의 뜻이 하늘에서와 같이 땅에서도 이루어지소서"의 구현 주체인 한 사람으로서 적어도 현재까지는 최선이라 여겨지는 지향점인 민주주의 시스템이 정말 사람들을 위해 동작하도록 만들고픈 것이기도 하다.

나는 학부 저학년 때까지만 해도 정치는 나와 상관이 없는 것이라고 생각했었으나, SNS의 급격한 보급과 더불어 주류 언론에는 잘 알려지지 않지만 실제로 일어나고 있는 여러 일들을 보았고, 각자의 정치적 입장에 따른 관점의 차이가 얼마나 다른지, 또 사람들이 생각보다 논리적·합리적이지 않고 자신이 속한 집단에 따라 맹목적인 주장을 펼치는 모습을 접하게 되면서, 사실은 내가 정치적 영향에서 살짝 빗겨난 위치에 있을 뿐이라는 것을 알게 되었다. 우리나라의 경제 성장과 민주화 덕분에 그나마 이 정도인 것이고, 그런 것이 없었더라면 지금의 내 생활도 많이 달랐을 것이라는 생각에 미치게 되니 정치를 "잘" 하는 것이 중요하겠구나 라는 생각을 하지 않을 수 없었다.

처음엔 공공데이터 개방과 활용에 초점을 둔 "정부 2.0" (government 2.0) 운동에 대한 해외 동향을 공부하는 것으로 시작했는데, 한국에서도 관련 움직임이 있다는 사실을 알게 된 이후 우리는 "정치 2.0" (politics 2.0)으로 초점을 맞추게 되었다. 여기서 2.0이라는 버전 번호를 붙인 것은 웹 2.0이 OpenAPI와 웹표준 준수를 통한 웹서비스의 개방과 소비자들의 참여 확대라는 트렌드를 가리키는 말이었기 때문이다. 따라서 정치 2.0이라 함은 선거로 뽑히는 지역자치단체 수장들과 행정부의 수장 대통령 및 국회의원·시/도의원 등의 전유물이었던 정치를, 선거라는 기존의 틀에 박힌 참여 방법에서 벗어나 보다 다양한 계층의 사람들이 사회적·정치적 합의를 도출할 수 있도록 웹과 모바일앱이라는 도구를 활용해보자는 것이 그 취지다. 얼마 전 다음세대재단에서 주최하는 비영리 미디어 컨퍼런스 "ChangeON"에서 프로젝트 리딩하는 은광 형이 발표한 내용을 보면 좀더 이해하는 데 도움이 될 것이다.

여기에서 내가 맡은 일은 국회에 공개된 회의록이라든지 웹에 올라오는 정치 관련 글들을 기계적으로 가공하여 유용한 정보를 뽑아줄 수 있는 기반 '데이터 플랫폼'을 만드는 것이다. 뭐, 말은 거창하지만 시작은 소규모로 간단하게 quick & dirty (…)의 정신을 발휘하여 되는대로 걍 하고 있다. 역시 refactoring의 유혹이 근질근질하지만 내가 이 프로젝트에 쓸 수 있는 시간이 얼마 없기 때문에 당분간은 힘들 것 같다. ㅠㅠ 이 일을 하면서 느끼는 게 한국어 NLP(자연 언어 처리) 연구가 많이 필요하다는 것. 나는 NLP 자체보다는 이런 기반 시스템을 설계하고 구현하는 일이 더 재미있기 때문에 내가 그쪽을 파고들 것 같지는 않지만(NLP 이론은 아니지만 이런 맥락에서 연구하신 분이 최근에 팀에 합류하기도 했고), 해외 유수 학술지에 나가는 연구만 주로 인정받는 국내 현실에서 한국어를 연구 대상으로 하는 NLP에 좀더 많은 투자나 지원이 이루어졌으면 하는 아쉬움이 생겼다.

2011년 한 해 동안 이 프로젝트에서 외부로 공개된 결과물은 서울시장 재보궐선거에서 후보 별 공약을 비교하고 이슈 타임라인을 제공한 '나는 서울시장이다' 사이트다. 기술적으로는 굉장히 단순한 웹사이트이지만---3명이서 대략 3일 정도에 뚝딱?---기획 면에서는 나름 고민을 많이 한 티저 격의 사이트이다. 실제로 사람들에게 뭔가 가치를 주기 위해서는 백엔드/프론트엔드의 다양한 기술이 결합되어야 하기에, 정말 골수 전산시스템을 다루는 연구와 달리 당장 눈에 보이는 결과물을 만들어내는 어떤 감각을 유지하는 데에는 큰 도움이 되는 것 같다. 사실, POPONG 프로젝트를 통해 함께 공부하고 배운 이런저런 웹기술들이 나중에 GFI PacketShader 데모 준비할 때 도움이 되었다는.

이 프로젝트에 좀더 시간을 투자하고 싶지만, 그래도 대학원생의 1순위는 연구이기 때문에 좀더 못하는 점이 아쉽고, 특히나 2년간 대학원 생활을 하면서 뭔가 의미 있는 연구 결과가 나오려면 다른 일 신경쓰지 않고 정말 거기에 집중해야만 가능하다는 것을 깨달았기 때문에 이 프로젝트에 대해 내가 가지는 강한 동기에도 불구하고 상당히 고민이 되는 부분이다. 게다가 올해 2012년은 총선과 대선이라는 빅 정치이벤트가 겹쳐있다는 거.

*

성가대

학부 때부터 주말에 학교에 있을 때면 가까운 궁동성당에 가곤 했는데, 대학원에 오면서 거의 대전에 있게 되자 본격적으로 성가대를 시작한 것이 벌써 1년 반이 넘었다. 이제 미사곡들은 어지간한 건 불러봐서 많이 익숙해지기도 했고, 특송이나 축가처럼 성부 나누어 부르는 것도 (여전히 음정 불안불안하기는 하지만) 나름 재미를 느끼는 단계가 된 것 같다. 내가 옛날부터 피아노를 취미로 쳐왔기 때문에 직접 목소리로 노래하는 것에서 새로운 재미를 찾게 된 것도 있고, 특히 여러 성부로 나누어진 곡을 함께 부르면서 연습 끝에 화음이 맞는 걸 느낄 때의 그 좋은 기분은 아마 직접 해보지 않은 사람은 모를 것이다. 혼자 치고 즐기는 피아노와 달리 여러 사람이 함께 마음을 맞춰 노래하는 것은 또다른 차원의 즐거움이 있다.

올 한해는 이 성가대 덕분에 힘들기도 하고 보람도 느끼고 한 일들이 많이 있었다. 바로 성가대 단장을 맡았던 것.;; 가톨릭 전례력 상으로는 대림시기부터 새해가 시작하는데, 그에 따라 재작년 말부터 2011년도 총무로 활동을 시작했다. 그러다가 5월쯤 원래 단장을 하던 형이 직장을 다른 지역으로 옮기면서 활동이 불가능하게 되자 내가 단장을 맡게 되었다. 이번 1년 동안 논문 데드라인이 가까웠을 때를 제외하고 온라인이든 오프라인이든 룸메이트와 가족을 제외하면 일요일에 날 본 사람이 별로 없을 텐데 이런 이유가 있었다.

연구와 병행하느라 매우 힘들었지만(특히 7월초 대전청년대회(DYD) 창작성가제 발표---내가 단장되기 전에 시작된 프로젝트라 좋든 싫든 마무리해야 하는 상황이었다---를 앞두고 말 그대로 멘탈붕괴 사태까지 갔다), 과학고·카이스트와 달리 여자들이 과반이 넘는다는 점, 그리고 신앙공동체로서 지켜야 하는 명시적인/암묵적인 규칙들, 이런 특징들이 이뤄가는 하나의 조직체를 이끌면서 얻은 경험은 잊을 수 없을 것이다. 여러 면에서 그간 경험해봤던 오픈소스 개발팀이나 동아리, 연구실, 벤처 회사와는 완전히 다른 커뮤니티다. 이른바 여자들의 "thought cloud"라는 것도 간접 체험할 수 있었다. (이것이 나쁘다는 것이 아니라, 남자 중심의 커뮤니티에서는 잘 나타나지 않는 현상이라는 점에서.)

성가대 단장 하면서 내가 변한 점이 있다면, 어떤 일처리를 할 때 전화로 하는 것에 대한 거부감이 거의 없어졌다는 것. 나는 무슨 사고가 났다든가 하는 정도의 정말정말 급한 일이 아니면 전화보다는 비동기 커뮤니케이션 수단인 문자나 이메일을 선호하는 편인데, 일단 성당 커뮤니티 사람들이 이메일 같은 것과는 별로 친숙하지 않기도 하고 전화를 하는 것이 '예의'로 간주되는 경우가 많기 때문에 처음에는 일을 진행함에 있어 상당한 불편함이 있었지만 오히려 여기에 익숙해지니 사람과 직접 말로 하는 것이 어떤 면에서는 오해의 소지를 줄이기도 하고 더 친밀해질 수 있는 기회라는 걸 알게 되었다. 다만 내가 연구실 일로 바쁘거나 해서 무언가 연락을 취해야 할 일을 진행하지 못한다든가 했던 경우가 좀 있었는데, 사실 "technically" 시간이 없는 건 아니지만 마음의 여유가 없어서 그런 경우가 많았다. 하지만 시간이 좀 지나니 이런 것도 결국은 적응해서 하게 되더라.

신앙적 관점에서도 많은 것을 얻었다. 특히 가톨릭에서의 성인식이라 볼 수 있는 견진성사를 받은 것과 신학대 교수 출신의 새 주임신부님 덕분에 사도신경을 중심으로 한 견진교리 및 매달 있는 주임신부님의 특별강론 덕분에 신앙의 지식적 측면을 보완하면서 더 깊은 묵상 속으로 들어갈 수 있었던 것을 들 수 있겠다. 성가대 활동이 힘들긴 했지만, 그 활동을 통해 직간접적으로 얻은 신앙의 자산은 평생의 것이 될 것이다.

*

Minecraft

재작년부터 꽤나 오랫동안 즐겨온 게임인 마인크래프트 또한 취미생활에서 2011년의 한 축을 이루는 주제라 할 수 있겠다. 마인크래프트는 스웨덴의 인디게임 개발자가 만든 샌드박스 게임이다. 특별한 종료조건 없이(엔딩이 나중에 업데이트로 추가되긴 했지만 엔딩을 봐도 본 게임은 계속된다.) 1m x 1m x 1m 형태의 정육면체 블럭들로 구성된 3D 세상에서 나무나 돌·광물을 캐는 자원수집이나 돼지·닭을 잡아먹는 것, 밤이 되면 생성되는 다양한 몬스터들과 싸우는 것이 기본 활동이다. 가장 큰 특징은 모아놓은 정육면체 블럭들을 마우스 오른쪽 버튼으로 다른 블럭에 붙이는 방식으로 자유롭게 무언가를 만들 수 있다는 것이다.

이 게임을 하면서 느낀 건, 건축은 사실 사람의 욕망을 드러내는 수단이라는 것. 게임 내에서 처음 며칠(하루 = 20분)은 보통 안전한 집과 식량 보급 체계 마련에 투자하는데, 그 시기를 넘어가면 사람들이 슬슬 건축적 욕망을 드러내기 시작한다. 하늘 끝까지 닿는 타워나 계단 또는 지하 끝까지 파고들어간 광산이나 지오프론트(…) 같은 것들이 나오고 시간이 더 지나면 현실이나 영화에 존재하는 대형건축물들을 옮겨짓는다든지(피라미드, 천공의 섬 라퓨타, 알렉산드리아의 파로스 등대, 강남역 삼성타운 등 소재는 무궁무진하다) 맵 전체를 가로지르는 철도시스템을 구축하는 등 규모로 승부하게 된다. 하나의 사례를 보라. 몇몇 멀티플레이 서버에서 처음부터 개발이 이루어지는 과정을 지켜본 결과, 가장 기본적인 조형원리---큰 규모로 이루어지는 대칭성과 반복성---가 아름답게 느껴지는 건축물의 기본 조건이라는 것을 깨달았다. 마인크래프트에서 제공하는 미니어처 자연 속에 이러한 조형원리를 갖춘 건축물은 단연 돋보인다. 자연 속에 규칙성을 부여하는 것, 그것이 인간의 본성 중 하나가 아닐는지.

마인크래프트에는 비슷한 종류의 다른 게임들과 차별화되는 요소가 하나 더 있는데, 바로 레드스톤(redstone)이라 불리는 특수 광물이다. 스위치나 레버의 동작을 원거리로 전달하여 피스톤 같은 기계장치를 작동시키는 데 사용하는 것이 가장 기본적인 용도다. 현실에 비유하자면 실리콘과 같은 반도체라고 할 수 있는데, AND/OR/NOT 게이트의 구현이 가능하고 clock 반복자를 만드는 방법이 존재하여 실제로 이걸로 CPU를 만드는 사람들도 있다. 물론 x86과 같은 복잡한 건 거의 불가능에 가깝고 간단한 사칙 연산과 메모리 정도. 물론 이 CPU를 작동시키려면 게임 내에서 열심히 뛰어다니면서 버튼을 하나씩 눌러줘야 하기 때문에 실행속도도 느리고 에니악스러운 느낌이다. 무한궤도 엘레베이터, 블럭을 피스톤으로 "적절하게" 밀어넣어 구현하는 3D printer, 카트가 자동 공급·회수되는 양방향 지하철 시스템과 같은 응용들이 나와있다.

덕 중의 덕은 양덕이라는 온라인 속담이 있다. (여기서 덕이라 함은 지덕체 할 때 그 덕이 아니고 오타쿠에서 유래한 것.) 최근의 KPOP 한류 열풍에서도 볼 수 있듯이 서양 아이들이 뭔가에 빠지면 엄청난 잉여력을 보여주곤 하는데, 이런 동영상이 그런 예라고 할 수 있겠다. 더 자유분방한 문화 때문인지, 평균 근로시간이 더 적어서인지는 모르겠으나(…) 아무튼 대단하다.

*

돌아보면 가장 힘들었던 때는 논문과 졸업 때문에 스스로의 압박을 느끼는 와중에 '내가 대학원에서는 별로 쓸모 있지 않은 존재인건가' 하는 자괴감과 때맞춰 찾아온 DYD 창작성가제 압박, POPONG 프로젝트 관련한 고민이 모두 한꺼번에 겹친 덕분에 때문에 한 3일간 아무 일도 못하고 그야말로 세상으로부터 몇주 정도 잠적하고 싶었던 7월 초였다. 문자 그대로의 멘탈붕괴였다. 졸업논문 앞두고 주제가 급변경되면서 내가 그동안 이런저런 질문에 답하기 위한 일들을 뭔가 진행은 이것저것 했는데 하나의 논문으로 완성할 수 있을 만큼 진행한 것이 없어 고민했을 때가 두번째로 힘들었다. 농담 아니고 석사졸업 연기할까도 생각했었다. 결국 그럴 때 힘이 되는 건, 해결책은 제시해주지 못하더라도 내 이야기를 들어줄 수 있는 가족뿐이더라. 이런 일련의 힘든 시기를 거치면서, 연구와 개발의 균형을 잘 잡고 또 연구와 연구 외적인 일들 사이의 균형을 잘 잡는 게 중요하다는 사실을 알게 되었다. '어떻게'는 아직도 정답을 찾지 못한 것 같지만.

다가오는 2012년---이 아니라 가족들과 미사 갔다가 저녁 먹고 어쩌구 했더니 글을 쓸 시간이 많지 않아 이미 2012년이 되어버렸다---올해는 여러 일들의 균형을 잘 잡으면서 때에 따라 필요한 곳에 선택과 집중을 할 수 있는 그런 한 해가 되길 바래본다.