9월 24일에 열리는 한국마이크로소프트 주최 테크데이즈 2014에서 키노트 연설을 하게 되었다. 내가 다니고 있는 회사와 관련된 일이 아니기 때문에 개인휴가를 내고 가는 행사지만 마음이 설렌다. 방문기간 동안 한빛미디어에서 주관하는 독자와의 간담회도 예정되어 있고, 작년에 뉴욕에서 만났던 정보통신진흥원 연수생들과의 재회도 준비되어 있다. 숙명여대에서 프로그래머의 꿈을 꾸고 있는 젊은 학생들을 대상으로 하는 강연도 준비 중이다.
1주일의 짧은 방문 기간을 너무 많은 스케줄로 채워 넣은 것 아니냐고 조언하는 친구도 있다. 하지만 이런 기회를 통해서 내가 배울 수 있는 것이 얼마나 많은지 알기에 내 마음은 소풍을 앞둔 초등학생처럼 부풀어 오른다.
테크데이즈2014에서 할 키노트 강연의 주제는 폴리글랏 프로그래밍이다. 최근에 출간한 책의 제목이기도 하고, 유사한 제목으로 칼럼을 쓴 적도 있다. 테크데이즈 2014의 핵심 테마가 “오픈소스 및 크로스 플랫폼 개발자와의 소통”이라는 점에서 서로 맥이 통했다고 볼 수 있다. 오전에 30분 동안 폴리글랏에 대한 이야기를 하고, 오후 늦게 자바와 C#을 주제로 기술적인 강연을 할 예정이다.
회사에서도 가끔 적게는 10명, 많게는 100명의 개발자를 모아놓고 강연을 할 때가 있다. 강연이라기보다는 화면을 공유하면서 코드를 보여주고 설명하는 코드리뷰나 세미나에 가깝다. 이런 강연을 해본 사람은 알겠지만 30분이라는 시간은 목청 한 번 가다듬고 눈 한 번 깜빡거리면 지나가는 짧은 시간이다. 이 짧은 시간 동안 디테일이라는 늪과 수박 겉핥기식이라는 함정을 피하는 균형 잡힌 강연을 준비하는 것이, 내가 직면한 최대의 과제다. 준비를 하다 보니 이게 생각보다 어렵다.
예컨대 폴리글랏에 대한 이야기를 하다보면, 새로운 언어가 수없이 등장하는 이유에 대해서 언급하지 않을 수가 없다. 여러 가지 이유가 있겠지만 내가 보기에 큰 이유의 하나로 컴파일러의 제작을 쉽게 만들어주는 LLVM(Low Level Virtual Machine)과 같은 라이브러리의 존재가 있다. 그런데 컴파일러를 제작하는 개발자들은 LLVM을 잘 알고 있겠지만, 나와 같은 엔터프라이즈 개발자에게는 낯선 개념이다. 키노트 강연에서 LLVM을 언급하는 것이 적당할까? AST(Absract Syntax Tree)는? 해석기(parser)는?
강연 도중에 브루스 테이트의 책은 언급할 생각이다. 그가 쓴 'Seven Languages In Seven Weeks'는 명작이다. 그 안에 포함되어 있는 루비, Io, 프롤로그, 스칼라, 얼랭, 클로저, 해스컬이라는 일곱 개의 언어는 아주 간단하게나마 언급할 것이다. 하지만 고민이 있다. 그가 준비하고 있는 'Seven More Languages In Seven Weeks'라는 책이 있기 때문이다. 현재 베타버전에 대한 검토가 진행 중인 이 책에 포함되어 있는 언어는 Lua, Factor, Elixir, Elm, Julia, miniKadren, Idris라는, 어떻게 부르는지조차 알기 어려운 언어들이다.
상대적으로 역사가 깊은 Lua의 경우는 한국에도 사용자그룹이 있는 것으로 알고 있는데, 다른 언어는 대부분 만들어진 지가 2~3년에 불과한 신생 언어다. 이런 언어들을 살펴보다보면 스택중심기계(Stack-oriented machine)라든지, 메타 프로그래밍이라든지, 타입시스템 같은 컴퓨터 공학의 용어들을 피할 수 없다. 키노트 강연에서 Factor라는 생전 처음 들어보는 언어를 언급하면서 스택중심기계과 레지스트리 기계의 차이점을 설명하는 것은 아무래도 좀 그렇지 않을까.
폴리글랏의 실전적 응용사례를 설명하는 것도 고민이다. 내가 구상하고 있는 내용은 2014년에 들어오면서 강력한 트랜드로 자리 잡고 있는 마이크로서비스를 언급하는 것이다. DVD 대여서비스업으로 시작해서 이제는 최고의 영화 스트리밍 서비스 업체로 거듭난 넷플릭스가 성공적으로 구현해서 주목을 받은 마이크로서비스 아키텍처는 월스트리트나 다른 테크놀로지 업체에서 적극적으로 도입하고 있는 중이다.
이러한 마이크로서비스 아키텍처에서 핵심은 하나의 서비스를 구성하는 코드의 분량이 개발자 자신의 머리 크기를 넘지 않아야 한다는데 있다. (그런 면에서 나는 다른 사람들보다 코드를 몇 줄 더 적어 넣을 수 있어서 다행이다.) 서비스 하나의 내용이 너무나 단순해서 쉽게 이해할 수 있기 때문에 해당 코드가 예컨대 스칼라로 작성되어 있어도 자바 개발자가 원하면 서비스 전체를 자바 코드로 다시 작성할 수 있다. 마이크로서비스 아키텍처는 똑같은 언어를 사용하는 개발자를 필요로 하지 않는 것이다.
이 정도의 이야기를 하려고 생각하고 있는데, 정작 실전에서는 마이크로서비스 아키텍처가 무엇인지 설명하다가 디테일의 함정에 빠져서 허덕거리지 않을지 걱정이다. 엔터프라이즈 통합 패턴(Enterprise Integration Patterns)은 어떨까. EIP를 언급하면서 메시지 서비스를 통한 “느슨한 결합(loose coupling)”을 설명하고 구글 프로토콜 버퍼(Google Protocol Buffer)가 폴리글랏 환경을 촉진한다고 이야기하면 의미가 잘 전달될 수 있을까.
관련기사
- 프로그래머의 고민상담2014.09.16
- 프로그래밍을 어떻게 배울 것인가2014.09.16
- 프로그래머에게 자격증은 모욕이다2014.09.16
- 기술적 빚과 프로그래머의 실력2014.09.16
강연을 준비하는 것은 글을 쓰는 것과 달라서, 어떤 면에서 더 어렵고 힘이 많이 든다.
이런 모든 걱정과 두려움을 극복할 수 있는 유일한 방법은 열심히 준비하고, 열심히 연습하는 방법밖에 없다. 그리고 이러한 준비와 연습 자체가 나에게는 커다란 학습이고 즐거움이다. 아직 일주일이 남은 시점이지만, 내 마음은 이미 JFK 공항으로 달려가고 있다.
*본 칼럼 내용은 본지 편집방향과 다를 수 있습니다.