폴리머 프로젝트(Polymer Project)[링크]는 웹컴포넌트(WebComponents)을 기반으로 만든 라이브러리다.

근데 이 글은 폴리머 프로젝트가 어떤 프로젝트인지를 얘기하려고 쓴 글이 아니다. 그래서 웹컴포넌트가 뭔지는 알필요가 없기 때문에 자세히 설명하지 않는다. 그냥 컴포넌트 라이브러리구나 정도로 생각하면 된다.

본론으로 들어가기 전에 내가 왜 이글을 쓰게 됬는지 사전 배경이 필요해서 좀 주저리 주저리 적어본다. 나는 오랜시간 동안 자바스크립트 프레임워크를 개발하고 있는데 몇 년전 부터 고민이 내가 만들고 있는 프레임워크를 비롯하여 흔히 말하는 자바스크립트 프레임워크의 설계방법이 썩 좋은 방법이 아니라고 생각했다.

대부분의 자바스크립트 프레임워크는 크게 2가지 역활을 한다고 생각한다.

1. 브라우저마다 다르게 동작하는 기능들을 동일하게 동작하도록 하는 역활.

2. 좀더 쉽게 개발할 수 있도록 다양한 API을 제공하는 역활.

내가 알고 있는 현존하는 프레임워크들은 이 두가지가 코드로 섞여있다. 물론 아닐 수 있는데 찾진 못했다. 

1번을 비유를 하자면 성장과 같다. 시간이 지날수록 문제점을 발견하고 수정하면서 조금씩 성장하게 된다. 반면에 2번은 옷과 같다고 생각한다. 평상시에 캐주얼하게 잘 입는 사람이 옷을 잘입는다고 할 수 있지만 모든 상황에서 옷을 잘입는다고 하기 어렵다. 

근데 패션을 모를 때는 유행하는 옷을 입으면 옷 잘입는 것 같았는데 패션책을 보면서 눈을 뜨게 되면 때론 필요없는 악세사리는 빼버리기도 하고 상황에 맞게 내 뜻대로 입고 싶어 진다. 하지만 이미 옷은 몸과 붙어있어서 갈아입을 수 없게 된다.

이 문제는 내가 프레임워크를 개발하면 똑같이 겪었다. 역량이 낮을때는 알아서 해주는 라이브러리가 좋다가 어느 순간 역량이 높아지만 직접 하나씩 제어하고 싶어진다. 그리고 1번은 결코 버릴 수 없지만 2번은 버릴 수 있어 하는데 쉽지 않다. 

그래서 가끔 팀원들과 나중에는 저 2개를 반드시 분리하자고 했다. 물론 분리했을 때의 한계와 문제점들을 알기에 전체적으로 서둘러서 진행하진 못하고 나중에 모바일 정도만 적용해보자고 생각했다.


다시 돌아와서, 폴리머 프로젝트는 정확히 두가지가 분리되어 있다.

아래가 폴리머의 아키텍쳐이다. 보면 platform.js가 위에서 얘기한 1번이고 polymer.js가 2번에 속한다. 즉, 2번은 언제든지 버릴 수 있고 1번만 사용할 수 있다.

언제든지 polymer.js가 마음에 안든다면 platform.js는 사용하여 개발하면 된다.

근데 polymer프로젝트가 좀 아쉬운 점은 platform.js는 반드시 polyfill만 존재해야만 한다. 그렇지 않으면 언젠가는 1번과 2번이 섞이게 된다고 생각한다. 하지만 polyfill이 아닌 기능들이 있어 아쉽다.


    

Posted by 전용우
,