TypeScript와 함께 한 4개월

내가 타입스크립트를 처음 쓰게 된 것은 올해 3월이었다. 당시에 알바를 하고 있던 회사에서 작성하던 서버 사이드 자바스크립트 코드의 안정성을 향상하기 위해 타입스크립트로 포팅하는 일을 시작하였고, 당시 그 팀의 구성원은 전원 너무 바빴기 때문에 다른 일을 하던 내가 불려가서 포팅하게 되었다.

사실 처음에 포팅을 하기로 했을 때는 흥미로운 일이라고 생각하지만, 딱히 의미 있는 일이라고는 생각하지 않았었다. 당시 코드는 이미 뼈대에 해당하는 부분이 대부분 완성되어 있었고, 그 대부분은 이미 타입의 개념이 없이 짜인 코드였었다. 그래서 단순히 타입스크립트로 옮겨도 별 이득이 없을 것이고, 완벽하게 포팅하는데 들어가는 노력에 대비해서 안정성을 확보할 수 있을지에 대해 확신이 없어서였다.

그래도 돈을 받고 하기로 한 일이었으므로 작업은 시작하였다. 우선 이미 구현되어있는 코드가 너무 많았기 때문에 초반에는 손에 닿는 파일부터 타입스크립트로 변환하며 작업을 하였다. 그 뒤로 한 3개월은 코드를 바꾸는 일만 했다.

하지만 이때까지는 타입스크립트의 장점을 딱히 느낄 수 없었다. 변환하는 과정에서 몇몇 버그를 잡았지만, 이미 타입이 중요한 부분은 underscore.js를 이용해서 타입체크를 하고 있었기에 타입스크립트가 추가로 해주는 일이 거의 없었다. 변환하는 과정에서 몇몇 버그를 발견하기는 했지만, 충분한 유닛 테스트로 잡을 수 있는 버그들이었기에 딱히 타입스크립트를 사용해야 한다고 느끼지 못했다. 오히려 리팩토링에 너무 많은 시간이 들었기 때문에 비용 대비 효용이라는 측면에서 비효율적이라고 느꼈다. 그러다가 타입스크립트에 대한 인식이 바뀌게 된 것은 다음 프로젝트를 시작하면서부터였다.

다음 프로젝트를 시작하게 된 것은 지난 5월 말이었으니 거의 한 달 정도 전이다. 하게 된 일은 기존의 스칼라로 작성되었던 beyond 프레임워크node.js에서 돌도록 포팅한 beyond.ts를 만드는 것이었는데, 이번 프로젝트는 처음부터 타입스크립트를 이용해서 작성하였다.

타입스크립트를 제대로 이용하면서 느껴진 타입스크립트의 장점은 크게 4가지이다.

우선 자바스크립트를 이용할 때 귀찮은 부분인 타입 체크하는 코드나 테스트를 작성하지 않아도 된다는 것이다. 자바스크립트뿐 아니라 파이썬이나 루비 같은 동적 타입 언어들도 가지는 문제인데 자바스크립트는 타입점검을 하거나 타입을 테스트하기 위해 코드가 verbose 해지기 쉬운데, 타입스크립트를 사용하면 이럴 이유가 전혀 없다.

두 번째로 안심하고 코딩할 수 있다. 기존에 자바스크립트를 사용할 때는 장황한 테스트를 작성하여 높은 커버리지를 유지하여야 했다. 그렇지 않으면 사소한 실수건 의도적인 수정이었건 간에 코드를 잘못 변경하여 문제가 생기는 경우가 가끔 발생하는데, 타입스크립트는 이런 문제들을 컴파일 타임에 점검해주기 때문에 사전에 막을 수 있었다.

세 번째로 ES6의 기능들을 사용할 수 있었다. 사실 이건 타입스크립트의 장점이라고 하기는 뭐하지만, 타입스크립트는 대부분의 ES6를 ES5나 ES3로 변환시켜준다. 덕분에 fat arrow, class, const와 let, 다양한 parameter 등 많은 기능을 사용할 수 있다.

마지막으로 내가 사용하는 라이브러리를 더 쉽게 파악할 수 있다. TypeScript에서는 기존의 JavaScript로 작성된 npm 라이브러리를 그대로 사용할 수 있다. 대신에 타입 추론을 해주기 위해서 선언 파일이 있어야 한다. 하지만 사용하는 모든 모듈에 대해서 선언 파일을 직접 만들 필요는 없고, DefinitelyTyped를 통해서 다른 사람들이 이미 구현해둔 파일을 받을 수 있다. 이것은 사용할 API를 이해하는 데 꽤 많은 도움을 준다.

물론 타입스크립트에 단점이 없는 것은 아니다. 하지만 타입스크립트를 사용하여 얻을 수 있는 장점이 더 크다고 생각된다. 정확히는 타입스크립트를 사용함으로 인해 들어가는 비용에 비해 타입스크립트를 통해 얻을 수 있는 이득이 훨씬 크다고 생각한다. 그래서 다음에도 자바스크립트를 사용할 일이 생긴다면, 타입스크립트를 사용할 것이다. 아니 타입스크립트가 아닌 Google의 AtScript나 Facebook의 flow를 사용하게 될 수는 있지만, 최소한 자바스크립트를 동적 타입 언어인 그대로 사용하지는 않을 것이다.

댓글

이 블로그의 인기 게시물

[C++] enum class - 안전하고 쓰기 쉬운 enum

Log Aggregator 비교 - Scribe, Flume, Fluentd, logstash

RAII는 무엇인가

[Python] cache 데코레이터로 최적화하기

[Web] SpeechSynthesis - TTS API