티스토리 뷰


최근 자바스크립트는 수많은 라이브러리와 수많은 프레임워크들이 자고일어날때마다 출시되고있습니다.

그러면 어떠한것은 라이브러리이고 어떠한것은 왜 프레임워크일까요? 오늘은 라이브러리와 프레임워크의 차이를 정리하고자 합니다.

- Framework(프레임워크)


프레임워크는 Application 개발시 코드의 품질, 필수적인 코드, 알고리즘, 암호화, 데이터베이스 연동 같은 기능들을 어느정도 구성이 되어있는 뼈대(구조)를 제공하도록 만들어진걸 프레임워크라고합니다. 


조금 어렵게 설명드렸는데, 개발 구조나 설계 시 제공되는 인터페이스의 집합입니다. 완성된 어플리케이션은 아니지만 어느정도 프로그래머가 제공된 프레임워크의 구조에서 어플리케이션을 개발해야합니다.

- Library(라이브러리)



라이브러리는 특정 기능에 대한 API(도구 / 함수)를 모은 집합을 라이브러리라고 합니다.

그 기능을 사용하기위해 불러와서 호출하는 방식을 생각하시면 쉬울듯 합니다.

- Framework와 Library의 차이


위의 내용으로만 봤을때는 단순히 라이브러리가 모이면 프레임워크처럼 보일 수 있습니다.

저도 그렇게 생각하고 있었고요 그리고 크게 틀린 생각도 아닌거 같습니다만

자료를 찾아보니 토비의 스프링에 아래와 같은 내용이 있습니다.


프레임워크는 단지 미리 만들어 둔 반제품이나, 확장해서 사용할 수 있도록 준비된 추상 라이브러리의 집합이 아니다.

프레임워크가 어떤 것인지 이해하려면 라이브러리와 프레임워크가 어떻게 다른지 알아야 한다.


라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접 제어한다. 

단지 동작하는 중에 필요한 기능이 있을 때 능동적으로 라이브러리를 사용할 뿐이다.


반면에 프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용된다.

프레임워크에는 분명한 제어의 역전 개념이 적용되어 있어야 합니다.


애플리케이션 코드는 프레임워크가 짜놓은 틀에서 수동적으로 동작해야 합니다.


어플리케이션의 flow를 누가 제어하는냐가 프레임워크인지 라이브러리인지 구분할 수 있었습니다.

맨 위의 이미지에 보면 위에는 framework에 해당하는 것들이며(polymer는 라이브러리입니다. 이미지 만들고나니 잘못만들었네요) 아래는 library에 해당하는 것들입니다. 저는 사실 react는 프레임워크로 알고 있었는데 react 공식 홈페이지에 보면 이렇게 소개하고있습니다.


A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES

React는 어플리케이션의 흐름을 강제화 하고있지 않습니다. 단순히 ui를 렌더링하기 위한 라이브러리입니다. 프레임워크 처럼 느꼈던건 react 사용 시 flux 같은 라이브러리로 어느정도 프레임워크 같은 모습을 갖추고 있기 때문인것 같습니다.


Backbone.js 또한 지금까지 프레임워크로 기억하고 있었는데 이 포스트를 작성하면서 공식 매뉴얼을 다시 읽었는데 아래와 같은 문구가 있었습니다.


Backbone is a library, not a framework, and plays well with others. 

You can embed Backbone widgets in Dojo apps without trouble, or use Backbone models as the data backing for D3 visualizations 

(to pick two entirely random examples).


backbone.js 또한 javascript의 mvc 패턴을 구현하기 위한 라이브러리였으며, backbone.js를 이용하여 어플리케이션 개발시 backbone.js가 흐름을 제어하는게 아닌 어플리케이션에 흐름에 맞게 backbone.js를 이용하여 개발했던게 생각나네요.

- 마무리


간혹 이러한 질문을 받은 경우가 많았습니다. OOO 프레임워크는 XX 목적에서는 사용하기 어려운데 어떻게 하면 좋을까요?

저의 대답은 원하는 목적에 맞는 프레임워크를 찾아보세요 입니다. 

프로젝트 진행 단계에서 혹은 개인 공부단계에서 한번쯤은 하셨을 고민이라 생각합니다. 저 또한 그랬구요.

마치 저 질문은 자동차는 하늘을 날 수 없는데 하늘을 날게끔 방법이 없나요? 라는 질문같은거라 생각합니다.(나중에는 나오겠지요 그만큼 기술이 발달하면)


물론 너무 극단적인 예시일수 있습니다만 프레임워크란 그 프레임워크에 맞는 목적에 최적화된 뼈대입니다. 대부분 목적에 맞는 프레임워크는 이미 만들어져있습니다. 만약 찾아봐도 없다면 목적과 비슷한 프레임워크에 다른 라이브러리를 결합하여 사용하는 방법도 있습니다.


라이브러리들을 이용해서 프레임워크화 할 수 없나요? 라는 질문도 받았습니다.

가능합니다. 그럴 능력과 시간이 있다면 그렇게하는게 가장 좋습니다. 


하지만 왜 node.js의 npm / php의 composer 같은 패키지 매니져들을 다들 사용하며 프레임워크를 사용하는지 생각해보면 빠릅니다.

우리가 직접 프레임워크를 만든다면 어플리케이션 코드도 관리해야하지만 프레임워크에서 발견되는 버그들도 다 수정해야야하며 시간에 쫓겨 어플리케이션에 맞춰 프레임워크를 개발하다보면 결국은 프레임워크로서의 의미가 사라진 코드들이 남을 가능성이 높습니다.

하지만 이미 잘만들어진 프레임워크를 사용한다면 버그 업데이트도 빠르며 훨씬 쉽게 개발이 가능하기때문이 아닐까요?


저런 질문들은 결국 프레임워크와 라이브러리 차이를 알게 된다면 어느정도 방향은 알 수 있다고 생각이 듭니다.(물론 정답이란건 없지만요.)

댓글