프레임워크(Framework)? 라이브러리(Library)? 둘의 차이점? 이것만 알면 됩니다.

막 프로그래밍을 배우기 시작했거나 프로그래밍을 모르는 분들에게 저 두 개념은 아주 헷갈리는 개념일 것입니다. 사실 어느정도 숙달된 프로그래머라도 일반인에게 저 두 개념을 쉽고 확실하게 설명하는 것은 솔직히 상당히 어려운 일입니다.


이제부터 저 헷갈리는 두 개념을 파헤쳐보고 그 저 둘의 차이점을 알아보도록 하겠습니다.


| 프레임워크(Framework)?


프레임워크(Framework)는 Frame + work라는 두 단어가 합쳐진 단어입니다. 합성어라고... 도 할 수 있겟죠.( 언어 전공이 아니라.. 틀렸다면 죄송합니다 ㅎㅎ)


자 그렇다면 Frame은 무슨 뜻일까요? 어떤 이미지가 떠오르나요? 예 맞습니다. '틀'입니다. 틀!



위의 이미지를 생각하면 딱이겠군요. 감이 오시나요?


그렇다면 Work는 무슨 뜻일까요? 네 그렇습니다. '일하다'입니다. 



그렇다면 이 둘의 단어를 합쳐보죠. '틀, 뼈대를 가지고 일한다'가 됩니다. 즉 어떤 일정한 짜여진 틀, 뼈대를 가지고 어떤 일을 하는 뜻으로 받아들이면 되겠습니다. 목수가 일하는 이미지를 보고 어떤 것인지 감만 잡으시면 됩니다.


일단은 프레임워크는 '일정하게 짜여진 틀, 뼈대를 가지고 일한다'라는 느낌을 받아가면 되겠습니다.


자 이제부터 쉽게 장난감 키트를 가지고 예를 들어보겠습니다. 


아래는 장난감 키트에서 제공하는 부품들입니다.


(요즘은 이런 태양광 장난감 키트도 나오네요)


이 키트를 가지고 아래 같은 다양한 형태의 장난감을 만들 수 있습니다. 



장난감 키트가 제공해주는 일정한 부품들과 틀을 가지고 다양한 형태의 장난감을 만들 수 있게 되죠. 또한 이 장난감을 만들기 위해 메뉴얼에 포함된 규약을 지키면서 만들어야 할 것 입니다.


일정한 형태의 틀, 부품을 가지고 다양한 형태의 결과물을 만드는 것! 이것이 바로 프레임워크입니다. 


즉, 프레임워크는 '제공받은 일정한 요소와 틀, 규약을 가지고 무언가를 만드는 일' 이라고 정의할 수 있겠습니다.


위 개념을 프로그래밍, 소프트웨어에서는 어떻게 대입할 수 있을까요?


위 장난감 키트를 예로들었을 때, 어떤 일정한 부품, 틀인 키트를 제공해주는 것은 장난감 제조사일 것입니다. 즉 저 장난감을 만들기 위한 요소들을 제공해주는 누군가가 있어야하죠. 


IT에서는 저 요소들을 제공해주는 프로그램이 있습니다. 바로 그것이 개발자들이 말하는 프레임워크입니다. 엄밀히 이야기하면 프레임워크 제공 프로그램이라 불러야 하지만 그냥 프레임워크라 불립니다. 우리가 흔히 들을 수 있는 프레임워크인 Spring, Django, Ruby on Rails 등등이 바로 그것이죠. 


이 프레임워크는 어떤 프로그램을 쉽게 만들기 위한 요소와 룰을 제공해 줌으로서 소프트웨어의 생산성과 품질을 높이는 역할을 하는 것입니다.


결론적으로 소프트웨어에서의 프레임워크는 


'특정 프로그램을 개발하기 위한 여러 요소들과 메뉴얼인 룰을 제공하는 프로그램'


으로 이야기 할 수 있습니다.


| 라이브러리(Library)


저 장난감들을 만들 때에 꼭 사용해야하는 요소와 메뉴얼에서 이야기하는 지켜야되는 규약들이 있을 것입니다. 이 요소들과 지켜야 되는 규약이 바로 프레임워크죠.


하지만 저 장난감을 만들 때 자기 손으로 만들 든, 아빠한테 도와달라고 이야기해서 만들든 망치를 가지고 만들든 상관이 없습니다. 자기 편한대로 알맞은 도구를 써서 만들면 되는거죠.


이 편한대로 알맞은 도구가 바로 라이브러리입니다.



즉, 라이브러리는 도구의 모음입니다.


프레임워크를 가지고 프로그램을 프레임워크에서 제공하는 요소와 그것을 사용하기 위한 규약을 지키면 그 밖에 나머지는 어떤 라이브러리를 가져다가 써도 어떤 패키지를 가져다가 써도 상관이 없는 것입니다.


이 라이브러리는 정말 어마어마하게 많은 종류가 있습니다. Python에서 Datetime, Pandas, Beautifulsoup ..., Java에서는 Guava, Apache common library, ... C++ 에서는 STL 등등 소프트웨어의 개발을 쉽게 하기 위한 도구들이 많이 있습니다.


요약하자면 라이브러리는


소프트웨어를 개발하기 쉽게 어떤 기능을 제공하는 도구들


이라 할 수 있습니다.


| 프레임워크(Framework)와 라이브러리(Library)의 차이 그리고 공통점


설명을 들으며 느끼셨을 테지만, 이 둘의 결정적인 차이는 바로 자유도입니다. 이것이 바로 프레임워크와 라이브러리의 결정적 차이죠. 


프레임워크를 가지고 프로그램을 만들기 시작하면 어떤 규약을 꼭 지키면서 만들어야합니다. 하지만 라이브러리는 도구입니다. 이 프레임워크가 가지고 있는 규약을 지키면서 나머지 자유로운 부분은 어떠한 도구를 써도 무방하다는 거죠. 


하지만 결국 둘 다 프로그램을 쉽게 만들기 위해서 만든 것들이라는 점에서 공통점이 있습니다.


| 요약


  • 프레임워크 : 특정 프로그램을 개발하기 위한 여러 요소들과 메뉴얼인 룰을 제공하는 프로그램
  • 라이브러리 : 프로그램을 개발하기 위해 쓰는 공구와 같은 도구들
  • 공통점 : 프로그램을 쉽게 만들 수 있게 하는 공통된 목적이 있음
  • 차이점 : 자유도, 프레임워크는 꼭 써야되는 것과 지켜야되는 룰이 있다. 라이브러리는 쓰든 안 쓰든 자기 마음이다.


출처 : https://ko.aliexpress.com/item/Solar-Power-6-in-1-Toy-Kit-DIY-Educational-Robot-Car-Boat-Dog-Fan-Plane/32217717099.html






이 글을 공유하기

댓글(4)

  • 2020.04.15 12:57 신고

    감사합니다. 이 글의 예시를 보고 머리속에서 정말 정확하게 정리가 되었습니다.

  • 2020.06.04 13:53

    이 글 및 예시를 보고 이해가 많이 되었습니다. 감사합니다.

    • 2020.06.09 00:01 신고

      예전에 쓴 글인데 갑자기 많이 찾아주시네요 ㅎㅎ; 이해되셨다니 감사합니다.

Designed by JB FACTORY