프레임워크와 라이브러리의 차이점에 관한 질문은 프로그래머 면접 질문중에서 많이 등장하는데요.
그래서 이 주제, 그리고 이에 대한 나의 견해를 가지고 포스팅을 해보기로 했습니다.
예를 들어 React는 프레임워크냐 라이브러리냐 같은 논쟁들인데 저는 이런 논쟁이 그닥 중요하다고 생각하지 않습니다.
라이브러리와 프레임워크
이 둘에 대한 차이점을 알려주는 여러 블로그 글들을 보면 공통적으로 나타나는 둘 사이의 구분은 다음과 같은 특징을 가지고 있습니다.
라이브러리
- 주도권이 프로그래머에게 있고 필요한 부분에서만 가져와서 사용
- 집을 짓는데 창문, 가구 등을 가져오는 것
jquery는 유명한 라이브러리입니다. 만약 jquery에서 데이터를 불러오고 싶다고 한다면 $.ajax
와 같이 호출을 해서 가져올 수 있습니다.
프레임워크
- 주도권이 프레임워크에 있고 프로그래머는 그 안에서 필요한 부분을 구현해서 사용
- 프레임워크 정해놓은 model, view, controller 등의 규칙이 이미 있고 여기에 따라야 함
- 수도, 전기, 배관등이 다 갖추어진 집에 들어와서 완성시켜 나가는 것
요즘 핫한 Next.js를 설치해보면 pages라는 폴더 아래에 엔드포인트가 될 파일을 넣어야 합니다. 그렇지 않으면 제대로 작동하지 않죠.
하지만 둘 사이를 구분하는게 그닥 중요하지 않은 이유
저는 그런데 라이브러리와 프레임워크를 명확히 구분하는 것에 대해서는 회의적인 입장이고 그렇게 중요한 것은 아니다라고 생각합니다. 원래 태생적으로 용도나 쓰임새가 비슷한 어떤 물건 혹은 개념이 있다면 구분이 그렇게 명확히 쉽지는 않기 때문입니다.
물컵 vs 밥그릇
물컵과 밥그릇을 구별할 수 있을까요? 어느 정도는 할 수 있을 것이라고 생각합니다. 예를 들어 컵은 조금 더 크기가 작고 깊이가 더 깊다던지, 밥그릇은 너비가 조금 더 넓고 깊이는 더 얇다던지 하는 특징들이 있을 것입니다.
하지만 다음과 같은 의문이 있는데요.
- 손잡이가 있으면 컵인가요? 손잡이가 없는 컵도 있습니다.
- 너비가 넓으면 밥그릇인가요? 너비가 좁은 밥그릇도 있습니다.
- 다음 사진은 밥그릇일까요? 컵일까요?
구분이 쉽지는 않습니다. 내가 어떻게 쓰느냐에 따라서 밥그릇으로 사용할수도 있고 물컵으로 볼수도 있습니다.
그리고 설령 제가 밥그릇을 물컵으로 쓰고 있다고 해도 뭐라고 할 사람이 있을까요? ‘아 나는 그냥 이걸 물컵으로 쓰고있다’라고 하면 그만이니까요.
특징, 용도만 알고 넘어가도 무방합니다. 본질이 중요합니다.
그래서 저는 React의 구분이 그렇게 중요한게 아니라고 생각합니다. React는 라이브러리의 특성과 프레임워크의 특성을 둘 다 가지고 있습니다. 내가 만든 프로젝트의 일부분만 React 라이브러리를 사용할수도 있죠. 하지만 React가 만들어놓은 거대한 시스템을 따라가고 그 안에서 메소드를 호출하고 구현했다면 프레임워크라고도 볼 수 있지 않을까요?
즉 중요한 것은 큰 틀에서 개념만 잡고 넘어가도 된다는 뜻입니다. 목숨걸지 마세요. 시간은 유한하고 할 것은 많으니까요