2020년을 보내며

올해엔 꼭 연애하고 싶었는데...

올 한 해를 돌이켜보니 가장 먼저 이게 떠오른다. 크리스마스를 하루종일 코딩만 하면서 보낸 직후에 쓰는 거라서 더 그런 덜지도 모른다. 비록 연애는 못 했지만, 올 한해는 내 인생에서 매우 중요한 한해였던 것 같다. 이런 저런 일들이 많았다.

근데 다 코딩 관련이다. 그래서 이 글엔 코딩 얘기밖에 없다. 다 코딩 얘기일 수밖에 없는 게, 진짜 코딩만 했다.

Deno

내 인생에 가장 큰 변화를 가져온 건 deno와의 관계이다. 3월 31일에 Ryan Dahl에게서 첫 메일이 왔다.

메일 내용은 대충

린터를 만들 때 swc의 시스템을 사용하고 싶다. 근데 stable 버전의 러스트에서 사용할 수 있어야 한다. 그래서 질문할 게 좀 있다.

인데, 지금은 deno의 거의 모든 컴포넌트에 swc의 시스템이 쓰이고 있지만, 이 메일이 왔을 때는 stable에서 돌아가는 비지터도 없는 상화잉었다.

stable 버전의 rust에서 돌아가는 비지터를 만들어주기로 했는데, swc AST 선언 코드만 2천줄이나 되는 상당히 큰 프로젝트인 관계로, 손으로 구현한다던가 그런 건 할 짓이 못 되고, 고민하다보니 좋은 아이디어가 떠올라서 잘 해결했다.

첫 작업은 이거였고, 나중엔 swc의 더 많은 부분을 쓰고 싶다고 해서 관련 기능들을 패치해줬다.

중간엔 스코프 분석이 필요한 몇 가지 어려운 lint들을 swc의 특수한 시스템을 이용해서 구현한 뒤 PR 보내기도 했다. 다른 언어에서 쓰는 패턴들중에 대다수는 러스트에서 작동하지 않는다. 그래서 구현 못하고 있었던 건데, 난 이미 스코프 문제에 대한 해답은 찾은 상태여서 그리 어렵진 랂았다. 참고로 내가 그거 작업해주고 나서 바로 버전 업 해서 배포했다. 그 문제들이 남아있어서 배포를 못 하는 상태였다고 하더라.

이런 저런 작업들이 매우 많았지만, 여기에 다 쓰긴 너무 많아서 기억에 남았던 것만 적었다.

근데 이러면서 돈을 상당히 많이 받았다. 풀타임 기준으로 따지면 1억정도? 내가 타입스크립트 타입 체커 작업하느라 바바서 다 받진 못했지만, 나름 동생한테 매달 10만원씩 용돈 주는 오빠가 되었다.

그리고 deno 덕분에 다른 데서도 스카웃 제의를 꽤 받았는데, 그중에 vscode 플러그인 개발하는 한 회사에서 온 오퍼는 휴학하고 해야되는 것 아니냐고 얘기할 정도로 조건이 셌다. (물론 휴학 얘기는 장난이다.)

이런 것들이 자신감 같은 것들에 큰 영향을 끼쳤다. 원래 난 실력에 비해 자신감이 부족한 타입이었는데,

러스트로 이런 것도 구현할 수 있는데

라고 생각하게 돼서 자신감이 많이 늘었다. 위에서도 말하긴 했지만, 러스트에선 안 되는 패턴이 많다보니 아예 패턴 자체를 새로 만들어야하는 경우가 많다.

swc

난 사실 swc 프로젝트에 대한 현타가 심하게 왔었다. 들어간 막대한 노력에 비해 보상이 너무 적다고 느꼈기 때문이다. 프로젝트를 그냥 버릴까 할 정도였다.

그런데 그 타이밍에 deno가 연락을 해왔다. 그래서 swc에 다시 시간을 쓰게 됐고, 얼마 전에는 깃허브에서 1만 스타도 찍었다.

denoswc를 점점 더 많이 활용하게 되면서, 작업할 것도 많이 생겼고, 어려운 이슈가 꽤 생겨서 작업할 때 재미있었다.

https://github.com/swc-project/website/tree/master/website/blog

대략 1년 전부터에 v1.1을 릴리즈하면서부터 난 swc 패치마다 무엇이 바뀌었는지에 대한 글을 적었다. 2020년에 배포된 버전은 v1.1.11부터 v1.2.41으로, 대략 80번의 버전 업그레이드가 있었고, 정말 많은 시간을 투자해서 엄청나게 많은 버그들을 고쳤다.

타입스크립트 타입 시스템

마찬가지로 엄청난 시간을 쏟아부어서 타입 추론 기능을 거의 완성했다. Mapped 타입 때문에 미치는 줄 알았다.

아직 모든 기능이 구현된 게 아니기에 성능 비교하기에 애매하지만 기능이 다 구현돼도 es2020 + dom기준으로 tsc보다 최소 300 배는 빠를 것 같다. 이건 나름 사업 아이템인데,

프리미엄 고성능 타입스크립트 language server.

이런 개념이다.

사실 라이브러리 형태로 배포하면서 돈을 받는다는 개념은 생소하지만, 안 될 건 없다고 생각한다. 라이센스 체크쪽이 문제기는한데, 별다른 라이센스 체크 없이 양심(?)에 맡겨도 쓸 회사들은 충분히 쓰리라 예상한다.

코로나

전세계를 강타한 판데믹이지만 순서가 많이 밀렸다. 나한테 끼친 약영향은 별로 없었기 때문이다. 오히려 학교 왔다갔다 하는데 걸리는 시간이 사라져서 코딩할 시간이 매우 많았다.

코로나 마스크 알리미도 만들었다. 근데 데이터 제공자 쪽에서 제대로 된 데이터를 안 보내줘서 그냥 사이트 막았는데, 파베가 생각보다 훨씬 비싸다는 걸 깨달았다. 근데 이게 난이도가 낮다보니 참여한 사람이 많았고, 내 건 조용히 묻혔다.

내년 목표

내년의 목표는 크게 2가지다. 첫번쨰는 연애, 그리고 두번째는 타입스크립트 언어 서버 제작하는 것까지... 더 되면 좋겠지만 language server도 보통 프로젝트는 아니다.

팀원이 있으면 좋을 것 같은데...