요즈음 Vue.js를 보고 있다.

그 이유중 하나로, 요즈음 웹 개발의 트렌드에 지쳤기 때문이다. 좀 더 정확히 말하면, ES6나 TypeScript 등으로 JavaScript의 새로운 기능들을 이용해서 코드를 개발하고, 나중에 ES5로 트랜스파일 하는 것에 진절머리가 나기 때문이다.

최근 2년간 웹을 공부하며 느끼는 것이지만, 하도 유행을 타며 정말 정말 많은 사람들이 JavaScript를 사용하게 되었고, 그러다보니 정말 대단한 사람들이 많다는 것을 느낀다. 그 사람들 덕분에 정말 JavaScript가 예전과는 다르게 급성장을 하고 있는 것도 눈에 훤히 보이고, 이러한 것들의 분명한 장점들도 눈에 훤히 보인다.

문제는, 바로 이 단점때문이다. 과도하게 복잡하다. 무엇이 복잡하냐면, 환경설정이 너무나도 복잡하다.

난 그저 어플리케이션 구성하는 것만 생각하고 싶은데, 간단하게 Angular 어플리케이션을 동작시키기 위해 많은 것들을 해야한다. CLI 도구가 나오기 이전에는, 이 환경설정만 몇 시간씩 걸렸다. 내가 이런 작업에 익숙하지 않음도 있지만, 실제로도 꽤나 많은 것들을 해주어야 한다. 너무 힘들다.

React도 그렇다. Angular에 비해서 덜 할 뿐이지, 오히려 Angular는 React에 비해 훨씬 정형화된 포맷이 존재하는데에 반해 React는 완전 자유롭다. React 에 Redux 를 붙혀서 사용하는 것이 아니라 Flux를 붙혀서 사용할 수도 있고, react-router도 버전마다 API가 조금씩 달라서 본인이 직접 구현해서 사용하는 경우도 있고 등등, 반복해서 그것으로만 작업을 하는 경우에는 문제가 없겠지만 항상 소프트웨어 개발이라는 것이 일정하지만은 않고, 타인의 코드를 봐야할 때면 정말 끔찍하다.

내 생각에는 이 사태의 원흉이 바로 ES6에 있다고 생각한다. ES6는 대단한 것이 분명하지만, 과도한 복잡성을 추가했다. 이 복잡성을 다른 도구(CLI, …)를 이용하여 해결하려했고, 그것은 분명 괜찮은 접근이라 생각한다. 하지만 만능은 아니다. 모든 문제를 해결할 수는 없다. 간단하게 사용할 수도 없다.

무엇보다 너무나도 과도한 추상화로 인하여 ES5를 블랙박스화 시킴으로써, JavaScript 자체를 오염시킨다고 생각한다. JavaScript에 class, decorator 등의 개념을 추가한 것은 좋다. Promise, async, await 등은 환상적이다. 분명히 그렇지만, 결국 거의 모든 코드는 ES5로 동작한다. 결국 죄다 prototype, callback, function, xhr 로 변환되는 것이다.

이것은 JavaScript를 새롭게 접하는 개발자들에게 마치 새로운 낙원을 소개하는 것과 같다. 이 경계만 넘어가지 않으면, 낙원이에요! 하는 것처럼. CLI 도구 등을 사용하면 굉장히 쉽게 멋진 새로운 기능들을 사용할 수 있으니 빠르게 익숙해질 수 있지만, 결국 깊은 개념은 더욱 이해하기 어렵게 된다.


그러한 점에서, Vue는 참 절충안이다. 간단하게 시작하기 좋다. 그리고 Angular와 React에 둘 다 익숙한 나에게 Vue의 개념은 그다지 어렵지 않았다. 오히려 ES5에서 간단하게 시작할 수 있기 때문에 훨씬 직관적이었다.

Angular는 분명히 구조적으로 확장성 있는 웹 앱 및 네이티브 앱을 만들기에는 좋지만, 작게 시작하기에는 너무나도 힘들다. React는 Angular보다는 비교적 간단하게, 그리고 비교적 덜 확장성 있는 웹 앱, 또는 네이티브 앱까지도 만들 수 있지만, 역시 ES6의 환경설정이 좋지 않다. Vue는 아직 네이티브 앱은 잘 모르겠지만 간단한 웹 앱 설계에는 최적인 것 같다. 크기도 제일 적고(gzipped 26kb 정도) 사용하기도 제일 좋고. 물론 구조적인 부분에서는 사용자의 역량이 더욱 드러날 것이다. ES5는 ES6에 비해 모듈화를 강제하지 않으니까.

TL, DR; Vue는 SPA, 웹 앱을 간단하게 시작하기에 좋으며, 성능도 꽤나 좋은 것 같다.