CoffeeScript와 ES2015에 대한 생각

CoffeeScript의 추억

명시적인게 묵시적인 것보다 낫다.

- The Zen of Python

CoffeeScript는 회사 프로덕트에서 메인으로 쓰고 있는 언어다. 내가 입사한지가 약 10개월 좀 넘었고, 그동안 내내 CoffeeScript를 사용해왔으니 이젠 좀 깔 만한 자격도 생긴 것 같다. 처음 접했을 때는 Python 같다는 생각을 했다. 괄호가 거의 사용되지 않고 indent로 블록을 구분하는 점에서 좀 그렇게 느꼈던 것 같다.(지금 돌아보면 약간 미친 생각같다) 다행히도 Python을 이미 접해본 적이 있었고, 그다지 무리 없이 CoffeeScript에 적응했던 것 같다. 물론 사용하다보니 편한 점도 많았지만 솔직히 나는 이 언어가 마음에 들지 않는다.

난 ‘말 안하면 모르는’ 전형적인 공대 남자다. 말 안해도 내 맘 좀 알아달라는 요구, 그런 거 잘 못 들어준다.(물론 여자친구가 없기 때문에 그런 요구 당할 일이 없어서 좀 편하다) 그런데 CoffeeScript는 뭐랄까.. “하.. 오빤 내가 말 안해도 내가 여기서 리턴하는 거 알아주면 안돼?” 라고 말하는 여자친구 같다. 매우 짜증나고 무섭다. 생략하는 게 몹시 많다. return, 각종 괄호, 세미콜론, 쉼표 등등.. 그 중 AngularJS를 쓸 때 묵시적인 리턴으로 에러가 종종 발생한다. 이게 얼마나 많이 일어나는 일이면 AngularJS Docs에 관련 내용이 언급되어 있을까? 이제는 너무 자주 겪어서 에러나면 기계적으로 return 써준다. 결국 묵시적인 리턴이 명시적인 리턴을 하게 만들고 있다. 아놔..

이제 왜 초입에 The Zen of Python의 구절을 인용했는지 아실 것이다. 이 Python의 철학을 Python 쓰다가 느끼지 않고, CoffeeScript를 쓰면서 절절히 체감했다. 역시 뭐 공부하는데는 안티 패턴이 짱이다.

ES2015를 접하다

ES2015(ES6)라는 걸 처음 들은 것은 아마 작년에 React 스터디를 나갔을 때 였던 것 같다. 지금도 쪼렙이지만 그 땐 더더욱 허접했다. 그냥 JavaScript, 그리고 회사에서 주력으로 사용하고 있는 프레임워크 AngularJS조차 제대로 사용하지도 못하면서 그냥 요즘 핫하다고 하니까 한 번 공부해볼까 하는 요량으로 갔던 것 같다. 지금 생각해보면 정말 오만방자한 판단이다. 그러니 스터디에 나가서도 무슨 소리를 하는 건지 하나도 모르겠어서 쩔쩔매고 자괴감에 빠져가지고는 공부도 열심히 안했다. 그런데 스터디가 제대로 될 턱이 있나.

그래도 아예 얻은 게 하나도 없지는 않았다. 같은 개발자를 만나면 으레 그렇듯, 몇 가지의 키워드는 얻을 수 있었다. React는 jsx를 사용하기 때문에 Babel 같은 transpiler를 사용하게 되는데, Babel에 대해서 얘기하는 걸 듣고는 Babel이 뭐지? 하고 찾아보다가 ES2015라는, JavaScript의 새로운 표준이 나와있구나. 그리고 Babel로 이걸 좀 옛날 JavaScript로도 바꿀 수 있구나. 이런 걸 좀 알게 되었던 것 같다. 그러고 보면 스터디에서 얻은 게 별로 없다기보단 좋은 경험을 얻었다는 생각이 든다. (근데 React는 여전히 하나도 모름)

그래도 계속..

하지만 회사에서는 여전히 CoffeeScript를 사용하고 있었다. (물론 이건 지금도 마찬가지. 코드베이스를 갈아 엎으려면 비용이..) ES2015를 알게 된 이후에도 어떤 문법적 기능이 지원되는지 잘 몰랐기 때문에 딱히 도입의 필요성을 느끼지도 못했고, CoffeeScript의 Syntactic sugar도 잘 쓰고 있었기 때문에 특별히 ES2015에 더 관심도 없었다.

난 JavaScript를 제대로 접한지 얼마되지 않았기 때문에 당연히 JavaScript 기본기가 부족했는데, CoffeeScript를 계속 사용하면 점점 JavaScript 기본 문법을 잘 모르게 될 뿐만 아니라, 내가 사용하는 문법들이 JavaScript에서도 원래 그런 건지, CoffeeScript에서 어떤 특별한 이유가 있어서 그런 문법을 사용하는 건지도 모호하게 느꼈다. 결국 JavaScript 기본기는 많이 늘지 않았던 것이다.(내가 공부 안 한 것도 있고..) 그렇게 시간이 점차 지나면서 점점 JavaScript 기본기에 대한 열망만 커졌었던 것 같다. 솔직히 지금은 CoffeeScript는 충분히 JavaScript 기본기가 다져져 있는 사람만 사용해야 하는 언어라고 생각한다. 나같은 허접에게는 적절하지 않다.

뭐 어쨌든 그렇게 CoffeeScript를 쓰다가 몇 달 전에 Kevin TV에서 ES2015 특집을 보게되었고 거기에서 ES6 Cheatsheet라는 프로젝트를 발견하고 그 글을 번역하면서 ES2015의 새로운 문법과 기능들을 약간이나마 이해하게 되었다. 회사 프로젝트에 도입하지는 못했지만, 요즘은 개인 프로젝트로 코딩할 때 가급적이면 ES2015 문법들을 사용하려고 노력하고 있다.

결론

Babel 같은 도구도 있고, 모던 브라우저들, Node.js까지 최근에 6버전을 내면서 ES2015의 지원률을 90% 이상으로 끌어올린 마당에 더 이상 새로운 프로젝트에 CoffeeScript를 도입할 이유가 없다. CoffeeScript에 있는 편리한 문법(e.g. Arrow functions, Classes)들이 ES2015에도 포함되어있고, destructuring 같은 것은 ES2015에서 먼저 도입했다가 나중에 CoffeeScript에도 도입이 된 녀석이다. CoffeeScript는 [0..n] 같이 일부 편리한 문법을 제공하지만 이런 건 그냥 코드 몇 줄 더 적어도 상관없고, 뭣하면 함수로 구현해두면 된다.

게다가, 위의 사례에서 볼 때 코드량이 줄어드는 게 무조건 좋은 일인가? 더 적은 타이핑이 더 높은 생산성을 가져다 주진 않는다. 우리가 제프 딘도 아닌데 어떻게 쉬지 않고 타이핑을 한단 말인가? 어차피 개발하는 시간의 대부분은 그냥 생각하는 시간이다.

그리고 CoffeeScript는 표준이 아니다. 뭐 언젠가 ES2015로 컴파일되는 날이 올 수도 있긴 하겠다. 다만 그 때는 이미 대부분의 브라우저가 ES2015를 100%에 가깝게 구현하고 있을 텐데, 그 쯤 되면 이미 개발자들은 ES2016으로 넘어가고 있을 것이다. 그러니까 지금은 앞으로도 쭉 표준 스펙일, 내 JavaScript 기본기에 도움이 될 ES2015를 공부하는 게 맞다고 생각한다.

참고링크