개요

얼마 전, 수원 컨벤션센터에서 열린 PyCon KR 2024에서 “ASGI 서버 구현기 with PyO3"라는 제목으로 세션 발표를 진행했습니다. 세션 준비하고 발표하는 과정에서 느낀 점을 공유합니다.

준비하기 전

저는 Python Django 웹 개발로 프로그래밍에 입문했습니다. 프로젝트를 진행할 때 웹개발이 필요하다면 거의 django를 사용했고, 커리어도 django를 사용하는 Python Backend Engineer로 시작했습니다. 그래서인지 저는 Python이 애착이 갔습니다. 첫 개발 컨퍼런스도 2019년에 열린 PyCon KR이었는데, 거기서 언젠가는 저도 발표자로 서야겠다는 생각을 했습니다. 가능하다면 첫 발표는 PyCon이면 좋겠다고 생각했었습니다.

2020년 말에 Python 백엔드 개발자로 일하기 시작하고 회사에서 당시 새롭게 부상하던 ASGI 프레임워크 FastAPI를 도입했습니다. 자연스레 ASGI라는 표준에 대해 알게 되었고 곧이어 ASGI 서버 구현체를 직접 만들어보고 싶다는 생각이 들었습니다. FastAPI를 도입하면서 이 분야는 도전하는 사람이 많지 않았고, 제 자신도 네트워크 프로토콜에 대한 지식이 부족하다고 느꼈기 때문에 더욱 도전해보고 싶었습니다.

준비

2023년에 Rust를 배워서 첫 코드를 작성하기 시작했습니다. Rust를 선택한 이유는 당시에 다른 구현체에서 Rust를 사용한 구현이 없었습니다. 어차피 만드는 거 차별점이 있지 않아야 할까 생각했고, Rust가 적절한 선택으로 여겨져 Rust를 선택했습니다. HTTP/1.1 프로토콜 구현체는 비교적 빠르게 작성할 수 있었지만, 그 이후의 진행은 다소 더뎌졌습니다. Python과 Rust의 연결부가 이런저런 제약이 많아서 코드 작성이 좀 까다로웠던 이유가 컸습니다.

발표가 가까워지면서 작업 속도가 붙었습니다. PyO3의 신규 API가 나와서 작업이 좀 더 편해졌고, Rust와 바인딩에 관한 이해가 크게 늘었습니다. 다른 일도 많은 상태였지만 속도가 붙으면서 재미가 붙어서 작업하기 용이했던 것 같습니다.

당일

드디어 발표 당일이 되었습니다. 평소 발표할 때 긴장을 많이 하는 편인데, 당일날에는 생각보다 크게 긴장되지 않았습니다. 무대에 올라가보니 조명 때문에 관객석이 보이지 않아서 오히려 더 편하게 발표할 수 있었습니다. 다만 발표 초반에 타이머 재시작을 깜빡한 바람에, 구글 슬라이드 발표자 노트상으로 시간이 부족할 것 같아 마지막 부분을 조금씩 생략했는데, 실제로는 시간이 남았다는 것을 나중에 알게 되었습니다. 이 부분이 특히 아쉬움으로 남습니다. 또한 발표가 끝난 후에야 프로젝트 리포지토리가 여전히 비공개로 되어있다는 것을 알았습니다. 현재 코드를 정리해서 곧 공개할 예정입니다.

이후

발표를 마치고 나니 뿌듯함도 있었지만, 한편으로는 오랫동안 가지고 있던 목표 하나가 사라진 것 같아 다소 공허한 기분이 들었습니다. 하지만 이번 경험을 발판으로 삼아, 다음에는 30-40분 길이의 더 긴 발표에 도전해볼 계획입니다.