위 글은 아래 글을 참고하여 작성했습니다.
참조글
MERN Clone Coding_blog-app
위 링크의 동영상을 보면서 clone coding을 하던 중 들었던 궁금증. library
와 framework
라는 말이 계속해서 등장하는데, 도대체 둘의 차이점은 무엇일까?
library
와 framework
의 가장 큰 차이점은 바로 지배의 전환(inversion of control) 이다. library
를 쓸 때에 사용자는 통제 권한을 갖은 채 method를 불러 사용한다. 반대로 framework
에서는 사용자에게 통제 권한이 없고 framework
가 사용자를 호출한다. 아래 그림을 한번 살펴보자.
(출처: https://www.quora.com/What-is-the-difference-between-a-library-framework-and-a-language)
(출처: https://www.quora.com/What-is-an-example-of-a-framework)
컴퓨터 사이언스에서 library
는 소프트웨어를 개발하기 위해 미리 작성해놓은 source의 모음이다. 위 그림에서 볼 수 있듯 사용자는 library
에서 필요한 코드를 그때그때 꺼내서 사용한다. 반면 framework
로 작업할 경우 해당 framework
에 귀속되어 작업을 하게 된다.
비유를 들자면 library
를 통한 작업은 이미 갖고 있는 집을 꾸미기 위해 이케아에 가서 필요한 가구를 사는 일과 비슷하다.
(출처: https://ko.wikipedia.org/wiki/%EC%9D%B4%EC%BC%80%EC%95%84)
반면 framework
를 통한 작업은 모델하우스를 짓는 일과 비슷하다. 이미 규격화된 설계도가 있고 세부적인 지시사항도 정해져 있어서 합의된 치수를 바꾸거나 내 마음대로 방 평수를 늘리는 등 사용자의 재량이 개입될 여지가 적다. 즉 framework
라는 관리자가 언제, 어디에 사용자가 input을 할 수 있는지 알려주는 것이다.
요약하자면 library
와 framework
는 둘 다 작업을 간소화하기 위해 미리 작성된 코드인 점에서는 동일하지만, framework
는 사용자에게 무엇이 필요한지 입력하라고 요구를 하고(ex. Spring, Go, Django, Express, Angular, Vue.js etc.), library
에서는 사용자가 필요한 기능을 자유롭게 꺼내서 쓰면 된다. 도서관에서 책을 빌리는 그림을 생각하면 될듯하다.(ex. axios, multer, bcrypt, path etc.)