프레임워크와 라이브러리의 차이는?

권태형·2023년 3월 15일
4

지식정리

목록 보기
30/72
post-thumbnail

우리는 프레임워크와 라이브러리를 알아보았다. 두 가지 개념은 비슷한 듯 다른 개념인데 이에 대해서 알아보자.

두 개념의 공통점

앞서 적은 프레임워크 포스팅라이브러리 포스팅의 공통점이 있다. 바로 둘다 코드의 모음이자 집합체라는 것이다. 프레임워크를 설명할 때 소프트웨어나 프로젝트 코드의 틀이라고 설명했는데, 이 틀 또한 '코드로 만들어진 틀'이라고 생각하면 된다.

따라서 두 가지의 개념모두 코드의 집합이라고 볼 수 있다.

모두 코드의 집합이라면, 하나의 의미로 쓰면 되는데 왜 다른 개념으로 쓰이는 것일까?

두 개념의 차이점

프레임워크는 라이브러리를 포함한 코드의 집합이고, 간단하게 생각하면 "라이브러리들의 모음"이며, 프레임워크는 라이브러리 보다 더 상위의 큰 개념이라고 생각하면 된다.

무엇보다 라이브러리와 프레임워크의 가장 큰 차이점은 제어 흐름에 대한 책임의 차이가 있다.

라이브러리는 개발자가 코드를 작성하는 데 필요한 도구를 제공한다. 개발자는 라이브러리를 호출하여 필요한 코드를 가져올 수 있지만, 제어 흐름은 개발자가 제어한다.

반면에, 프레임워크는 개발자가 작성하는 코드를 프레임워크가 제어한다. 코드는 개발자가 짜고 제어하여 원하는 위치에서 원하는 동작이 할 수 있도록 작성하는데, 결과적으로 프레임워크는 개발자가 작성한 코드를 가져와 실행한다. 이러한 현상을 제어의 역전(IoC)이라고 부른다. 이는 프레임워크가 프로그램의 아키텍처를 강제하면서 개발자가 작성하는 코드를 더 일관성 있게 만들어 준다.

위의 그림을 옆으로 돌려서 바라보자.

프레임워크가 가장 상위에서 아래로 제어를 하고 있음을 알아 볼 수 있다. 개발자가 작성한 코드가 항상 주도권을 가지는 것이 아니다. 프레임워크라는 가장 큰 틀이 우리가 작성한 어플리케이션의 코드를 불러 동작시키고, 어플리케이션 코드는 따로 외부 라이브러리를 불러서 동작시킬 수 있다.

주의점

IoC는 프레임워크의 중요한 특징 중 하나이지만, 모든 프레임워크가 반드시 IoC를 지원해야 하는 것은 아니다.
IoC를 지원하지 않더라도 다른 기능들로 프레임워크로 분류될 수 있다.

필자는 개발을 배울때 javascript언어와 node.js를 사용해서 express라는 프레임워크를 사용했다.
Express 프레임워크는 제어의 역전(IoC)을 지원하지 않지만, 라우팅, 미들웨어, 요청 및 응답 처리 등의 기능을 제공하며, 이를 통해 개발자가 웹 애플리케이션을 보다 쉽게 개발할 수 있다. 이러한 이유로 Express는 여전히 프레임워크로 분류된다.

따라서 프레임워크가 반드시 IoC를 지원해야 하는 것은 아니며, IoC는 프레임워크의 특징 중 하나일 뿐이다.


참고자료(출처)
인파블로그 포스팅 👩‍💻 프레임워크 & 라이브러리 차이 정리
코드연구소 포스팅 프레임워크(Framework)와 라이브러리(Library)의 차이
용어 정리 - Framework, Library, API

profile
22년 12월 개발을 시작한 신입 개발자 ‘권태형’입니다. 포스팅 하나하나 내가 다시보기 위해 쓰는 것이지만, 다른 분들에게도 도움이 되었으면 좋겠습니다. 💯컬러폰트가 잘 안보이실 경우 🌙다크모드를 이용해주세요.😀 지적과 참견은 언제나 환영합니다. 많은 댓글 부탁드립니다.

4개의 댓글

comment-user-thumbnail
2023년 3월 25일

IoC 구현여부가 프레임워크/라이브러리를 절대적으로 단정짓는 게 아니었네요
좋은 내용 배워갑니다!

1개의 답글
comment-user-thumbnail
2024년 6월 2일

IOC로 라이브러리와 프레임워크를 구분짓는다는 다른 글과 달리 반례가 있다는 점에서 상당히 인상적으로 글을 읽었습니다! 그런데 여기서 한 가지 궁금한 점이 있어서 질문 남깁니다~!
그림에서 프레임워크가 라이브러리쪽으로 포함이라는 워딩이 작성되어있는데. 프레임워크가 라이브러리를 포함해서 그림이 저렇게 작성된 것 일까요? 만약 그렇다면 "프레임워크는 무조건 라이브러리를 포함한다"라는 명제는 무조건 참이 되야하는 것 일까요?

답글 달기