Deno -> Vercel 이직

2 min read

새벽에 잠이 안 와서 적은 글이다. 새벽엔 코딩을 할 정도의 집중력이 안 되다보니 할 게 없다.

다른 데에 쓴 글이라서 존댓말인데, 수정하기 귀찮아서 그냥 그대로 올린다.


스펙

학번: 18

전공: 수학과, 소프트웨어 복전

학점: 전체 2.94 / 전공 2.83

공백기: 없음

어학: X

직무관련활동: 오픈소스 프로젝트 개발 ( https://swc.rs )

개발 경험: 비공식 10년차 / 공식 2년차


배경

전 swc라는 오픈소스 프로젝트에 상당한 시간을 쏟아부었습니다. 2017년 12월에 시작했고, 현재 러스트 코드만 22만줄 정도 됩니다. 상당히 규모가 큰 프로젝트다보니 기능이 꽤나 많습니다. 자바스크립트/타입스크립트 파일을 처리하는 기능이 있는데 이게 제 커리어에 큰 영향을 끼쳤습니다. js/ts 파일 처리가 가능하고 react의 jsx 등도 지원하는 툴은 여러가지 있지만 성능이 좋은 툴은 swc가 유일한 상황입니다. 러스트쪽에서 가져다쓰기 좋게 되어있기도 하고요.


과정

전 작년 6월 정도부터 올해 6월까지 Deno 팀과 같이 일했습니다. Deno는 node.js를 대체하겠다는 목표를 가진 js 런타임인데, swc를 쓰기에 절 고용했었습니다. 소프트웨어 컨설턴트 계약을 맺고 상당히 자유롭게 일했습니다. 시급제였는데 제가 대충 시간 기록하고 청구서 보내면 입금해주는 형태였어요.

그러다가 어느 날 트위터를 통해 Vercel의 CEO가 쪽지를 보내왔습니다. swc를 이용해서 next.js 의 빌드 속도를 개선하고 싶다는 내용이었어요. 무슨 일을 하게 되는지나 미래 계획에 대한 화상 미팅을 2번하고나서 일해보는 것도 괜찮겠단 생각이 들었습니다. Deno 쪽에서도 풀타임 계약에 대한 얘기가 있었어서 꽤 오래 고민을 했습니다.

Vercel 쪽이 낫다고 생각한데는 여러가지 이유가 있는데요, 첫번째는 swc의 많은 컴포넌트를 사용한다는 점입니다. Deno와 일할 때는 당연하지만 Deno에서 쓰지 않는 컴포넌트에 대한 작업은 여가 시간에 했거든요. 반면 Vercel은 거의 모든 부분을 씁니다. 그래서 업무 시간에 swc 작업을 하고 여가 시간은 다른 프로젝트에 쓸 수 있었습니다. 오픈소스 프로젝트라는 게 시간이 진짜 엄청나게 들어가기 때문에 이러면 다른 프로젝트는 거의 작업할 시간이 안 나옵니다. 두번째는 보상인데요, Vercel에서 제시한 조건이 훨씬 좋았습니다. 그래서 Vercel 팀에 합류하기로 했고, 관련 계획 문서 보면서 어떤 기능이 제일 중요한지에 대해 얘기하고 바로 작업 시작했습니다.


업무

첫 작업은 minification 개선이었습니다. 웹사이트 로딩 속도를 빠르게 하려면 파일 크기를 줄이는 게 유리한데 그걸 해주는 툴인 terser가 너무 느리거든요. 아직 모든 룰을 구현한 상태는 아니지만, 성능은 4코어 cpu 기준으로 10배까지도 차이납니다.

러스트와 swc를 써서 next.js의 빌드 속도를 개선하는 건 제 업무기도 했지만 동료분들 중에 그게 주 업무인 분이 계셨고요, 그분께 swc의 구조를 최대한 설명해드렸습니다. swc의 러스트 api의 경우 문서가 한 곳에 모여있는 게 아니고 해당 파트마다 달려있기 때문에 그분 혼자서 다 찾긴 힘들었을 거예요.

한 바벨 플러그인은 제가 작업했습니다. 러스트가 약간 어려운 언어라 api 제약이 좀 있거든요. 익숙하지 않은 사람이 짜긴 좀 힘들 것 같아서 제가 재구현했습니다. 그리고 틈틈히 계속 버그 패치를 했습니다.

지금 하는 작업은 css 처리 시스템입니다. Vercel이 만든 styled-jsx 라는 라이브러리를 러스트로 포팅하려면 css를 분석하기 위한 파서와 stylis 라는 css 프로세싱 라이브러리를 러스트로 재구현해야 되거든요.


마치며

전반적으로 업무도 재밌었고, 팀원분들도 매우 친절하셔서 좋았습니다. 영어 실력이 딸려서 회의가 좀 힘들긴 하지만 매일 전화 영어를 하고 있으니 이것도 금방 해결될 것 같아요.