Ahn Jungho

안정호의 블로그입니다

Meteor 첫인상

Friday, December 19, 2014

Django와 Backbone으로 작성한 웹서비스의 스택을 Meteor로 변경했더니 코드가 80% 감소했다는 글에 호기심이 생겨서 Meteor를 살펴봤다.

Meteor는 Javascript로 작성하는 풀스택 웹 프레임워크다. Javascript로 프론트엔드와 백엔드 코드를 모두 작성한다는 것인데 하나의 언어를 사용하는 장점을 최대한 끌어내고 있다. 기존의 웹 프레임워크는 대체로 서버사이드와 클라이언트에서 사용하는 언어가 달라서 배워야 하는 언어가 적어도 두 종류는 된다. 하지만 Meteor는 Javascript라는 하나의 언어를 서버와 클라이언트에 동시에 적용해서 해결한다. 코드의 양이 줄어드는 것은 물론 유지보수도 용이해진다.

튜토리얼을 따라가던 중에 가장 인상적이었던 것은 latency compensation이었다. 사용자의 동작에 의해서 서버에 ajax 요청을 할 때 기존의 웹 프레임워크는 요청을 하고 응답을 받아서 DOM을 조작한다. 하지만 Meteor는 ajax 요청을 한 후에 응답을 기다리지 않고 예상되는 결과를 토대로 DOM을 곧장 조작한다. 그 이후에 서버에서 예상된 결과가 도착하면 화면을 그대로 두고, 예상하지 못한 결과가 나오면 다시 DOM을 조작한다. 예상되는 결과가 오는 경우가 대부분이라면 사용자는 서버 요청과 응답에 따른 지연을 느끼지 않게 된다. 이 부분을 읽고나서 대단한 발상이라 생각했다.

튜토리얼을 모두 읽고 인용문을 저장하는 간단한 quote 사이트를 만들어봤다.1 직접 만들어보고 느낀 첫인상은 다음과 같다.

  • 작성한 코드의 양은 확실히 적지만 프론트엔드와 백엔드에서 같은 코드를 공유하면서 모호한 부분도 많아졌다. Meteor는 보안을 위해서 서버에서만 동작하는 코드와 클라이언트에서만 동작하는 코드를 분리하는 방식을 사용한다. 하지만 URL routing을 위해서 iron-router를 사용하기 시작하자 서버에서만 동작하는 코드를 작성하기 불편해졌다.
  • 첫 로딩이 너무 느리다. CSS 파일과 JS 파일, 템플릿 파일을 모두 한번에 로딩한 후에 base 템플릿부터 순차적으로 화면에 표시한다. 즉 가장 기본이 되는 템플릿을 로딩해서 화면에 보여주고 그 내부에 포함된 템플릿을 채워서 다시 화면에 보여주는 과정을 반복한다. 따라서 사용자는 컨텐츠가 없는 화면을 먼저 만나게 된다.
  • 템플릿을 포함해서 컨텐츠를 모두 Javascript로 채우는데 SEO을 어떻게 할 수 있는지 궁금하다.
  • 테스트 도구가 빈약하다. velocity라는 테스트 도구가 있지만 아직 한참 개발중인 것으로 보인다.

Meteor는 백엔드 MVC 프레임워크와 프론트엔드 MVC 프레임워크를 하나로 합친 풀스택 MVC 프레임워크로 볼 수 있다. 앞으로 Meteor가 개발자들의 주목을 끌 수 있을지, 웹 프레임워크는 어떤 방향으로 발전해 갈지 기대가 된다.

  1. Meteor.com에서 제공하는 테스트 서버에 올렸기 때문에 가끔 20초정도 기다려야 할 때도 있다. 코드는 github에 있다.