- 2009년 결산 4
Daybreakin Things
개인 서버의 하드디스크 사망 조짐으로 인해 안 그래도 별러왔던 가상서버호스팅으로의 이전 작업을 하느라 이제서야 올리는 2009년 결산 포스팅. 시작은 역시 학업 이야기부터 해야 될 듯.
한 마디로 정리하자면 졸업 학기라서 신선놀음할 줄 알았더니, 웬걸, 특강 + 신종플루 크리로 인해 그다지 유쾌하지는 않았던 학기였다. 하지만 어떤 면에서는 가장 남은 게 많은 학기이기도 했다.
제목은 뭔가 길지만 실제론 그냥 작곡 수업. 변계원 교수님이 담당하셨다. 기억은 안 나지만 대략 수강신청 추첨할 때 5개쯤 찍어둔 교양 중에서 이것만이 유일하게(!) 살아남았다. 다행히도 가장 듣고 싶었던 수업이긴 했다. (사실 졸업요건 채우는 건 이 한 과목으로 모두 충족되고, 나머지는 그냥 더 듣고 싶어서 들은 거였다.) 음의 간격(interval) 계산하는 방법부터 시작해서 자유곡 작곡에 이르는 과정을 한 학기로 압축하여, 중간고사 때까지는 화성학의 기초 부분을 다루고, 이후에는 이런저런 다양한 작곡 기법들에 대해 배웠다.
나는 피아노를 초등학교 1학년 때부터 배우기 시작해서 중학교 1학년 때까지 정식으로 배웠고(모두 개인레슨/체르니50 들어가자마자 그만둠), 이후로도 혼자 취미삼아 계속 쳐온 데다 직접 채보하거나 작곡한 곡들도 있었기 때문에 악보를 읽고 쓰는 것에 아주 익숙하여 상대적인 난이도는 가장 낮았던 과목이다. 앞부분의 화성학 기초는 예전에 배웠던 걸 복습하여 단단히 다진다는 느낌으로 했고 뒷부분은 이미 감으로 알고 있던 것들에 이름을 붙인다는 느낌을 받았다. (물론 내가 모르거나 알아채지 못한 기법들도 있었는데, 문제는 그런 걸 배울 때 신종플루에 걸렸다는 것이...-_-)
하지만 이런 선행학습(?)이 잘 되어 있는 것과 좋은 곡을 쓰는 것은 또 다른 문제. 첫 번째 과제는 바흐의 첼로 무반주 조곡 1번의 화성 구조를 그대로 쓰면서 창작 멜로디와 반주를 붙이는 것이었는데 화성 구조의 제약이 심하다보니(무엇보다 안정적인 구조를 만들어주는 핵심 요소인 반복이 없었기 때문에) 상당히 고생했다. 그 뒤로 나온 과제는 쇤베르크 등 20세기 초 현대음악 작곡가들이 사용했던 12음계, 직접적인 멜로디 구성보다는 배경음과 분위기 조성용으로 많이 쓰이는 unsynchronized isomelody/isorythm을 활용하는 것 등이 있었다. 특히 12음계(무조음)는 우리가 듣는 음악 덕분에 우리 귀에 매우 익숙한 일반적인 화성 구조를 완전히 버리고 한 옥타브에 속하는 12개 음을 모두 똑같은 중요도로 취급한다는 점에서 사상적으로는 매우 혁명적이었지만 그 소리까지는 아직 내 귀가 받아들일 준비가 되지 않았기에 작곡하는 나 자신 스스로도 매우 괴로웠다.;;
이 수업은 타지키스탄(Tajikistan)에서 유학온 친구이자 SPARCS 후배인 '달래'(원래 이름은 Daler Karimov이지만 편하게 이렇게 부른다. 물론 남자다 ㅋㅋ)와 함께 들었는데 내게는 신선한 자극이 되었다. 이 친구가 지금은 전산 전공에 BEP 부전공을 하고 있지만, 고향에서는 원래 음악 전문 학교를 다녀서--구소련과 같은 공산정권 하에서 과학·수학이나 예술·체육 쪽 특기생들을 국가적으로 키우는 정책의 영향이 남아있었던 듯--이미 자기가 작곡한 곡도 몇 곡 있고 피아노도 꽤 잘 치는 편이다. 러시아어·타지키스탄어·영어·한국어·아랍어까지 구사하는 데다 태권도와 피아노도 수준급이고 생긴 것까지 잘생겨서(...) 완전 엄친아 같은 녀석으로, 나중에 고향에서 대통령 하고 싶다는 꿈이 있을 정도다. 아무튼 그전엔 인사만 하고 지내다가 이 수업을 통해 내가 작곡한 곡과 이 친구가 작곡한 곡을 서로 연주해주면서 기말고사 때 제출할 곡을 어떻게 쓸까 함께 고민하는 등 재미있는 추억을 만들 수 있었다. 이 친구의 자작곡들은 자기네 전통 민요의 리듬과 화음이 살아있어 더욱 흥미로웠다. (한국 올 때 악보를 거의 안 가져와서 아쉽다고 했다)
나는 기말곡으로 중학교 3학년 때 작곡한 Memories라는 피아노 독주곡을 메인 테마로 삼아 오케스트라(플룻, 바이올린 앙상블, 첼로 앙상블 추가)로 확장하고 수업 시간에 배운 몇 가지 기법들을 추가로 응용하는 방식을 택했다. 달래도 자기가 작곡했던 곡을 바탕으로 작업하였는데 전체적으론 괜찮았지만 개인적인 느낌으로는 그 특유의 대담한 리듬과 중독성 있는 화성이 덜 느껴져서 살짝 아쉽기도 했다. 수업 초반에 교수님이 수강생이 너무 많자 잔뜩 겁을 주면서 다들 드랍시킨 덕분인지(?) 기말곡들은 다들 상당히 높은 수준이었다. 그 중에 표절을 의심받은 경우도 있었지만 명백히 표절이 아니면서 가장 기억에 남았던 곡은 어느 00학번 전산과 분이 애니메이션 WALL·E를 보고 동영상과 맞추어 만든 Hold My Hand라는 곡이다. 그다지 복잡하지 않은 멜로디와 반주이면서도 서글픈 느낌을 멜로디와 음색으로 잘 표현해냈고, 동영상과 함께 들어도 혹은 따로 음악만 들어도 잘 어울리고 언제나 공감가는 곡이다.
학부 지도교수님이신 김기응 교수님의 특강으로, 한 마디로 요약하면 확률이론의 기초 중의 기초라고 할 수 있는 Bayes' Rule을 바탕으로 Markov assumption 하에서 로봇이 세상을 인식하고 세상에 반응하는 방법에 대해 다룬 수업이다.
과제는 Microsoft Robotics Developer Studio를 이용해서 C# 언어로 수업 시간에 배운 몇 가지 주요 알고리즘들을 실제로 구현해보는 것들이었다. Occupancy grid mapping, Monte-carlo Localization, Grid-based SLAM까지 총 3가지가 나왔는데 두번째 과제를 하다가 신종플루에 걸리는 바람에 쭈우우욱 밀려서 마지막 과제는 결국 손도 못대고 말았다. orz
말하자면 이 수업의 궁극적인 목표는 미 국방성에서 스탠포드, CMU, MIT 등 유수의 대학들을 대상으로 진행했던 DARPA Grand Challenge와 같은 자율적인 로봇 시스템을 구현하는 능력을 기르는 것이었다. 실제로 국내에서도 비슷한 대회가 준비 중이며 우리 학교에서도 기계과 등과 협력하여 나갈 예정이라는 얘기도 있었다. (링크한 글을 자세히 보면 알겠지만 엄청난 규모의 컴퓨터 시스템을 자동차에 얹고 있는데, 이 수업을 들으니 그 이유를 알 만했다. 확률통계에 기반해 실제 세상을 모델링하려면 엄청난 양의 데이터 처리가 필요하다. 특히 SLAM과 같은 알고리즘을 제대로 돌리려면...-_-)
다른 것보다도 이 수업을 들으면서 좋았던 점은 선배들이 '전산과라면 확률통계하고 선형대수는 꼭 들어야지~'했던 말을 졸업할 때까지 전혀 실감할 수 없었는데 이 수업을 통해 인공지능 분야에서 확률통계가 어떻게 사용되는지 확실하게 피부로 느낄 수 있었다는 것이다. 복잡한 수식이 난무하는 강의자료 때문에 머리가 어지럽기는 하지만 그 근본은 아주 간단한 원리에 기반하고 있음을, 그것을 이용해서 실제 세상을 모델링하는 방법을 맛볼 수 있었다.
종강할 때 내가 교수님한테 하나 건의했던 건, 학부 2~3학년 수준에서 들을 수 있는 전공선택 정도로 확률통계를 전산학에서 어떻게 응용하고 있는지 느낄 수 있는 과목을 개설해달라는 것이었다. 선형대수와 확률통계가 중요하다고 강조는 하지만 지금의 학부 전산학 커리큘럼에서는 그 참맛을 느낄 수 없기 때문에 졸업할 때 쯤 되면 다 까먹어버린다는 문제가 있기 때문이다. 안 그래도 올해부터는 전산학도를 위한 수학 이런 과목을 만든다고는 하는데, 이러한 건의가 잘 받아들여져서 전산학과 학생들이 수학이 모자라다는 평가는 받지 않았으면 좋겠다.
위의 과목이 확률통계를 바탕으로 하는 것이었다면 이 과목은 선형대수를 바탕으로 하는 것이었다고 우길(?) 수 있을 것이다. ㅋㅋ 네트워크 분야를 연구하시지만 안식년에 미국의 ACCI 커리큘럼을 보고 오신 문수복 교수님이 우리학교에도 필요하다고 생각하여 개설한 과목이다. 수업 내용은 분산 시스템은 어떤 특징이 있고 이것을 학문적으로는 어떻게 정의하고 표현하는지, 관련한 알고리즘은 어떤 것들이 있는지에 대한 것이었고, 과제는 Hadoop MapReduce 프레임워크를 이용해 PageRank를 실제로 구현하는 것이었다.
기말 프로젝트는 Hadoop을 이용해서, 혹은 Hadoop을 고쳐서(...) 대용량 데이터 처리를 해서 의미있는 결과를 얻어내거나, 대용량 처리를 도와주는 무언가를 제안하여 직접 구현하는 것이었다. 내가 속한 팀은 대부분의 사람들이 3D 게임용으로만 생각하고 있는 그래픽카드의 핵심부품인 GPU를 분산처리와 결합시켜보자는 것이 아이디어였다. 3D 오브젝트들과 텍스처 등을 실제 2D 모니터 화면에 뿌려주는 과정은 엄청난 양의 행렬 연산을 필요로 하는데 GPU는 바로 여기에 최적화되어 있다. 그런데, 행렬 연산은 다른 과학 분야에서도 매우 빈번하게 나타나고(앞의 PageRank도 마찬가지) 이것을 임의의 대용량 크기로 확장해서 분산처리하는 것은 그리 간단한 일이 아니다. 따라서 scalability가 뛰어난 Hadoop으로 행렬 곱셈을 분산처리하되 각 노드에 GPU를 꽂아 개별 노드의 연산을 가속시켜보자는 것이다.
원래는 행렬곱셈의 분산처리 과정은 직접 개발하지 않고 이미 나와 있는 Apache Hama 프로젝트(NHN에서 일하는 어떤 분이 오픈소스로 만든 것이다)를 이용하려고 했지만 HBase를 이용하기 때문에 성능이 매우 떨어지고 우리가 원하는 규모로 실험해볼 수가 없어서 결국 직접 짜게 되었다. (이것 때문에 날린 시간을 생각하면...ㅠ_ㅠ) 다행히 실험결과 GPU를 이용해 가속 처리를 하였을 때 확연한 성능 향상이 있음이 입증되었다. 인턴으로 졸업연구 대체해버리긴 했지만 약간만 시간을 더 들여 다듬었으면 이걸로 졸업논문 써도 될 뻔했다.;; (실험의 재연 여부를 확실히 하고 통계 처리를 보강한다든지, 과제로 구현했던 PageRank를 이 시스템 기반으로 다시 돌리면 어떤 성능 향상이 있는지 조사한다든지 등등)
다만 현재 대용량 처리를 MapReduce 방식으로 구현할 때 대부분 가상화 기술 기반의 클라우드를 사용하기 때문에 GPU를 꽂아 활용하기 어렵다는 점이 걸림돌이다. 하지만 계산 전용 클러스터를 구축하는 경우라면 굳이 가상화 기술을 사용할 이유 또한 없기 때문에 각 컴퓨터마다 20만원대 그래픽카드만 한장씩 꽂아주어도 엄청난 성능 향상을 이룰 수 있게 된다. (가격대 성능비로는 최강에 가깝다. 사실 진정한 최강은 CELL 프로세서를 탑재한 SONY의 Play Station 3로, 미 국방성에서도 수십~수백대를 대량 구입하여 계산용으로 활용한다. -_-)
NexR에서의 인턴 경험과 더불어 이 수업을 통해 Hadoop cluster를 운영하고 빡세게 MapReduce 프로그래밍을 해본 것은 지금 뜨고 있는 최신 기술을 습득하였다는 점에서 상당한 의미가 있는 수업이었다.
이 과목은 이제 연구보다는 사회와 정치(?)에 좀더 관심이 많으신 것 같은 김진형 교수님이 매년 계속 열어오고 계시다. 전공이라기보다는 교양 같은 수업인데, 보는 관점에 따라선 그 어떤 전공보다 더 중요할 수도 있는 그런 과목이라고 할 수 있다. 이 수업은 초반에는 교수님이 소개해주시다가 후반엔 학생 발표로만 이루어지는데, 전산학이라는 학문의 테두리를 벗어나 소프트웨어 산업이라는 측면에서 우리 사회가 당면한 이슈에는 어떤 것들이 있고 우리는 이것들을 어떻게 바라보고 대처해야 하는지 다룬다.
4월에 개정된 저작권법이 컴퓨터 프로그램 보호법을 흡수하게 되면서 공정 이용에 대한 조항 때문에 교육용 소프트웨어에 대한 저작권이 제대로 보호받지 못하게 된 점이라든지, 몇 년 전부터 꾸준하게 제기되어 온 ActiveX와 웹표준 문제, 한국-인도 CEPA(전략적 동반자 관계) 협정에 의한 인도의 고급 IT 인력 수입에 우리는 어떻게 대응해야 하는가에 관한 문제, 의료법에 의해 의료IT시장이 제약받고 있는 문제 등 아주 현실적인 것부터 게임 중독, 프라이버시 등 고전적인 문제와 위치기반서비스나 스마트그리드처럼 최근 기술의 흐름 등 일부러 관심을 가지는 경우가 아니라면 챙겨보기 힘든 다양한 주제를 서로 토론하게 해주었다. 수강생이 많아 개개인의 열정적인 참여가 어렵긴 했지만 그래도 이러한 문제를 인식하는 데 있어선 충분하지 않았나 한다.
나는 블로그와 RSS 구독, 미투데이·트위터 갈은 SNS를 사용하면서 온라인 인맥을 어느 정도 형성해놨기 때문에 몇 가지 주제를 제외하곤 사실 이미 대충 들어본 것들이었고 이런 식으로 각각에 대해 비판하거나 긍정하는 것 자체가 어느 정도 익숙하지만 대부분 다른 학생들은 그렇지 못한 경우가 많았다. 그래서 이런 수업이 더욱 값진 것 같다.
이 한해를 총정리하면 학업과 인턴을 통해 많은 것을 남기고 성장할 수 있었다면, 2008년 말에 계약했던 책 집필 작업이 여전히 미완으로 남은 것이 가장 아쉬운 점이다. 기술적으로는 Python/Django와 Eclipse/Java/Hadoop이라는 큰 두 줄기의 기술을 성공적으로 익힌 한 해였다. 물론 언제나 공부할 여지는 남아있게 마련이지만. 또한 인간관계도 인턴과 파트타임이긴 하지만 나름 회사에서 반년 가량 일하면서, 새롭게 알게 된 선후배 등으로 새롭고 넓게 확장되었다는 것도 큰 수확이다.
앞으로는 여러 면에서 더욱 다양하고 극적인 인간관계를 경험하게 될 것이고, 대학원에 진학하면서 학문적으로 전산을 다루는 방법도 배우게 될 것이다. 언제나 그렇듯 2010년 한 해 또한 기대된다.