PyCon APAC 2018 참가 후기

by Joongi Kim

해외에서 열리는 파이콘으로는 재작년 PyCon Hong Kong에 이어 두번째로 싱가포르에 열리는 PyCon APAC을 다녀왔다. 홍콩은 정규님이 연사 초청을 받아 같이 따라간 거였고, 이번에는 직접 talk proposal과 workshop proposal을 제출하여 workshop 쪽이 accept되어 가게 되었다. 이번에는 KOSSLAB 글로벌 오픈프론티어 프로그램을 통해 발표자로 지원을 받아서 비용부담도 매우 적게 다녀올 수 있었다. 마침 PSF 활동을 해오신 김영근님도 참가하셔서, 그분을 통해 PyCon JP, Python Taiwan UserGroup 등을 운영하는 분들과 발표자로 참여한 인도 분들과 함께 밥도 먹고 이야기도 하고 관광도 하면서 친분을 쌓을 수 있었다. (그리고 그분들 중에 올해 PyCon KR을 오겠다는 사람들이 있어서, 아무래도 내 발표(accept되면)를 영어로 바꿔야 할 것 같다... ㅋㅋ ㅠㅠ)

전체 행사는 3일에 걸쳐 진행되었는데, 첫째날은 워크샵, 둘째날과 셋째날은 세션 발표들이 있었다. 장소는 싱가포르 국립대학교(NUS) 전산학부(School of Computing)였는데, 내가 전산과를 나와서일까 다른 대학의 같은 학부를 가면 괜히 반가운 느낌이 든다. :) 1 2 참고로 이번 PyCon APAC에서 말하는 워크샵은, 5페이지 내외의 소논문을 발표하는 전산 학술대회의 워크샵이나 몇시간씩 강의를 이어서 하는 발표 형식의 워크샵이 아니라, 워크샵 주제별로 테이블을 여러 개 만들어놓고 해당 주제에 대해 배우고 싶거나 실습해보고 싶은 사람들이 하루 종일 이 테이블 저 테이블 왔다갔다하면서 참여하고 진행자는 그런 사람들을 옆에서 도와주거나 질의응답을 받아주는 방식으로 진행되었다.

내가 진행한 워크샵 주제는 “Making a Modern Python Package”였다. 상기한 GitHub 링크를 알려주고 각자 필요한 부분을 따라해볼 수 있게 하되 중간중간 궁금한 부분을 물어볼 수 있도록 하였는데, 싱가포르 현지에서 회사를 다니시는 한국분과 그분의 현지 동료분들에게 패키징 관련한 질의응답을 진행하고, 그리고 한 베트남 개발자에게는 자신이 만든 머신러닝용 기초 수학연산 함수 모음 코드를 패키지화하고 문서화하는 데 도움을 주기도 했다. 특별히 ‘modern’이라는 수식어를 붙인 이유는, 최근 3~4년 사이 wheel (.whl) 방식의 패키징이 표준으로 자리잡게 된 것도 있고 Markdown 문법도 패키지 설명으로 쓸 수 있게 된 데다 pypi.org 사이트도 새로 오픈하면서 몇가지 기능(project link 지원이라든지)이 추가된 것도 있고 해서 이런 내용들을 포함하겠다는 의미였다. 그런데 막상 진행하다보니 참여자들이 알려준 덕분에 오히려 손으로 직접 하던 나는 잘 몰랐던 패키지 구조를 자동으로 생성해주는 도구들(PyScaffold, cookiecutter)도 알게 되었고, 패키지 디렉토리 구조도 일부러 “src” 디렉토리를 따로 두는 것을 권장하는 경우도 있다는 것 등 새로운 걸 더 배우게 되었다.

발표 세션은 Data Science, Web Development / DevOps, Other 3개 트랙으로 진행되었다. 그 중에서 나는 주로 Other 세션을 중심으로 들었는데, 가장 기억에 남는 발표는 HDE Inc. 소속의 SW 엔지니어인 Jonas Obrist의 “Artisanal Async Adventures”였다. 아무래도 개발자 커뮤니티 행사이다보니 ACM/USENIX 같은 학술대회보다는 자유로운 포맷으로 진행되는데, 이 발표는 아예 PyCharm에 비어있는 에디터 창 하나 띄워놓고 라이브 코딩하는 방식이었다. 내용은 Python 3.6의 async / await 문법만 활용하되, asyncio는 전혀 사용하지 않고 직접 비동기로 동작하는 간단한 소켓 서버를 만드는 거이었다. 처음에는 동기 버전으로 socket server를 작성하더니 accept loop와 handler 함수에 async 키워드를 딱 붙이고는 그대로는 실행이 되지 않는 모습을 보여주었다. 그러면서 왜 실행이 안 되는지, 즉 async 키워드가 붙은 함수는 어떻게 다른 것인지부터 시작하여 generator로 어떻게 비동기 I/O를 표현할 수 있는지 설명하고, 이어서 deque 모듈을 이용한 간단한 pending task 목록과 각 I/O 작업 별 대기 task 목록을 만들고 이걸 select 모듈을 이용해 task가 pending 목록과 I/O 대기 목록을 왔다갔다 하도록 한 다음 StopAsyncIteration 예외를 잡아 task 종료를 처리하는 것, 그리고 기존의 동기식 socket 모듈 API를 비동기 I/O 대기 목록 조작 함수로 대체하는 것까지 불과 15분만에 싹 다 써내려갔다. 이 과정에서 Python 3.6의 기능을 십분 활용하여 typing 모듈로 깔끔한 함수 인자 및 반환값 형식을 표현하고, 중간중간 미완성인 부분을 적절한 뼈대로 남겨두면서 설명과 함께 순차적으로 채워나가는 모습이 아주 인상적이었다. 끝나고 찾아가서 아예 올해 PyCon KR에 튜토리얼 세션으로 같은 내용을 좀더 확장해서—Jonas의 발표는 짧은 시간 동안 매우 빠르게 우다다다 코딩을 하면서 진행했기 때문에 select나 generator 같은 배경지식을 모르는 사람은 따라가기 어렵다—진행해보고 싶다고 허락(이라고 쓰고 통보라고 읽...)을 받았다.

Zentropy Technologies의 Ramanathan Ramakrishnamoorthy (이름 어렵다 ㅠㅠ)의 “Practical Python Design Patterns” 세션도 좋았는데, Python의 metaclass와 class의 차이, type system의 구조를 리뷰해주고 이를 활용한 다양한 디자인 패턴(예: metaclass를 이용한 singleton)을 보여주었는데, 대강 알고는 있었지만 평소에 잘 활용하지 않아 잊고 있었던 부분들을 되살려주었다. 또한 역시 요즘 핫한 프로그래밍 언어로 각광받고 있는 Rust를 활용한 Python 모듈 작성법에 관한 발표였던 Vigneshwer Dhinakaran의 “Pumping up Python modules using Rust”도 좋은 발표였다. 다만 PyO3를 조금 다뤄줬으면 했는데 언급은 하였으나 발표 자체는 CFFI를 활용한 바인딩 방식을 위주로 설명해서 개인적으로는 약간 아쉬움이 있었다.

Python의 응용 사례로 재밌었던 건 Rishah Shah의 “Learn Guitar Via Python Programming”였다. MIDI 파일로부터 기타용 타브 악보를 자동 생성해주는 프로젝트인데, 최적의 fingering을 찾아주는 알고리즘과 만들어진 악보를 기타에 실제로 부착할 수 있는 LED 표시판에 노래 재생과 함께 실시간으로 표시해주는 앱을 함께 개발한 것이다. 응용 사례로는 재미있었지만 아쉽게도 알고리즘 부분은 오픈소스로 공개하지 않는다고 한다.

그 외에도 Python 초보자를 위한 asyncio 기초를 설명하거나(인도의 SW 컨설턴트인 Narendran의 “Concurrency vs Parallelism”) Python 2.4부터 3.7에 이르기까지의 주요 문법 및 표준라이브러리 변화사항들을 요약해주거나(PyCon JP 운영자 중 한분인 Manabu Terada의 “Introduce Syntax and History of Python from 2.4 to 3.6”) 큰 회사(Facebook, Google, Uber)에서 일한 면접위원회 경험을 바탕으로 프로그래밍 면접을 어떻게 보면 좋을지에 관해 설명해주는 세션(Toyota 연구소의 Tsung-Hsien Lee, “Elements of Programming Interviews in Python”)들이 있었다.

좀 다른 의미로 기억에 남았던 발표는 Jublia에서 온 인도 엔지니어 2명이 발표한 “A scalable blueprint for product customization with Python 3”였다. blueprint라는 단어에서 혹시 Flask 관련 얘기가 아닐까 짐작했는데(abstract에도 언급되어 있지 않았다!) 이 예상은 맞았다. 결국 내용은 importlib을 잘 사용해서 blueprint를 불러오는 과정을 커스터마이징할 수 있게 하자는 건데, 이걸 ‘SaaS 비즈니스를 위한 고객별 프로덕트 커스터마이제이션 기법’으로 포장해내는 것을 보고(…) 본받아야 하는 것인지 아닌지 조금 헷갈릴 정도였다. 자그마한 공헌을 사실에 부합하는 범위 내에서 잘 포장한다고 봐야 할지, 심한 뻥튀기라고 봐야 할지? 흠... 잘 모르겠다.

이번 PyCon APAC을 통해 아시아-태평양 지역에 있는 다양한 Python 커뮤니티 리더들과 개발자들을 만났다. 대표적으로는 일본 PyCon 운영그룹인 Manabu Terada, Shunsuke Yoshida, 그외 발표자로 참석한 Vigneshwer Dhinakaran, Narendran 및 Hypothesis 테스트 프레임워크 커미터인 Zac Hatfield Dodds 등과 알게 되었다. PyCon APAC/KR에 왔었던 Michael Amy(태국 거주)와 대만 사용자그룹을 운영하는 Noah Chen과도 같이 다녔다. 낮에는 워크샵과 세션 발표를 듣고, 저녁 때는 같이 싱가포르 시내 관광도 하고 밥도 먹으면서 이런저런 이야기들을 많이 나눌 수 있었다. 또한 같이 참가한 영근님과도 좀더 이야기를 나누면서, PyCon KR을 초기에 조직하게 된 과정이나 PSF 이사회 참여 과정, 아시아 각 나라별 PyCon의 특징과 차이점들에 대해 좀더 알게 되었다.

하지만 다양한 국적·인종의 사람들을 만난 만큼 영어 대화가 좀 어려운 부분도 있었다. 특히 인도 사람들의 빠른 영어는 좀 알아듣기 힘들었고, 반대로 영어 자체를 잘 못하는 사람들은 못해서 알아듣기가 힘든 이중고였다. (물론 나도 영어의 읽고 쓰기에 강한 것이지 회화는 그닥이라서...ㅠㅠ) Amy도 영국 영어의 사투리를 써서 내가 듣기에는 약간 웅얼거리는 느낌이라 알아듣기에 좀 어려움이 있다. 뭔가 표준적(?)인 미국·영국 영어가 아닌 전 세계 다양한 사람들이 구사하는 영어에 대한 듣기 훈련을 할 수 있으면 좋겠다는 생각도 든다.

어쨌든, 맨날 유럽 언저리만 기웃거리다가 적도 근처에도 가보고 열대기후의 여유로움과 유럽·북미 선진국과 같은 분위기를 갖는 싱가포르라는 나라도 경험해보면서 오랜만에 한숨 돌릴 수 있는 시간이었다. 이렇게 즐거운 마음으로 참여할 수 있는 커뮤니티 행사가 있다는 것과, 또 이런 곳에 큰 부담 없이 참여할 수 있도록 지원해주는 오픈프론티어 프로그램에 감사할 따름이다. 다른 프로그래밍 언어나 기술을 봐도 Python만큼 커뮤니티 주도 하에 자발적으로 전 세계 각지에서 이렇게 모임과 컨퍼런스가 열리는 경우는 흔치 않은 것 같은데(보통은 관련 기술을 개발하거나 주도하는 기업이 뒤에 있는 경우가 많다. PyCon도 물론 기업 후원을 받지만 특정 한 기업이 중심이 아니라 각 행사 지역의 여러 기업이 골고루 후원한다.), 앞으로도 Python 커뮤니티가 지속성을 가지고 계속 건강하게 발전할 수 있으면 좋겠다.


  1. 나중에 NUS에서 석사 수학했다는 분한테 들었는데, 현재 COM 1 본관 건물은 원래 법대였다고 한다. 그래서 메인 세션 진행한 세미나실이 모의법정 같은 구조로 만들어졌던 거라 모양이 이상(?)한 거라고...

  2. NUS 학생식당을 가보니 아시아의 각 지역별 cuisine을 구분하여 주문 코너를 만들어놓았다. 한식, 일식, 중식(하이난식), 베트남식, 할랄/무슬림 등등. 가격대도 한화 기준 4~5천원 사이로 싱가포르 물가를 생각하면 매우 착하다. 근데 여기서 먹은 한식이 카이스트 학생식당보다 맛있더라는 슬픈 사실. ㅠㅠ 잔반처리할 때 할랄 음식과 비할랄 음식을 따로 하는 것도 인상적이었다.