🚀
"프레임워크와 라이브러리의 차이를 아시나요?""
"음... 프레임워크는 뼈대이고 라이브러리는 모듈 같은 것이고....😰"
"그럼 최근에 사용하신 프레임워크와 라이브러리를 알려주세요."
"... express랑.. 그리고 음.. 모듈은...."
9월달 즈음 스타트업 면접을 보면서 받았었던 질문이었는데 꽤나 기초적인 질문이었음에도 제대로 대답하지 못했었던 기억이 나네요. 이 면접 이후로 집에 와서 알고리즘 공부보단 면접 준비에 좀 더 관심을 가져야겠다고 생각했었고 프레임워크와 라이브러리의 정의, 예시들, 차이점을 확실하게 정리해서 포스팅하고자 합니다.
📖 간단한 정의
🚗 프레임워크
원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 골격, 뼈대를 의미합니다.
애플리케이션 개발 시 필수적인 코드, 알고리즘, DB 연동과 같은 기능들을 위해 어느 정도 뼈대(구조)를 제공하며 이러한 뼈대 위에서 사용자는 코드를 작성하여 애플리케이션을 개발합니다. 앱/서버 등의 구동, 메모리 관리, 이벤트 루프 등의 공통된 부분은 프레임워크가 관리하며, 사용자는 프레임워크가 정해준 방식대로 클래서, 메서드들을 구현하면 됩니다.
🔎 예시
- Java 서버 개발에 사용되는 Spring
- Python 서버 개발에 사용되는 Django, Flask
- 안드로이드 앱 개발에 사용되는 Android
- 아이폰 앱 개발에 사용되는 Cocoa Touch
- 웹 개발에 사용되는 Angular, Vue.js 등
- 자바 기반의 JSP를 위한 프레임 워크 Struts
- 루비로 작성된 MVC패턴을 이용하는 Ruby on Rails
📚 라이브러리
소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임. 즉 특정 기능을 모와둔 코드, 함수들의 집합이며 코드 작성 시 활용 가능한 도구들을 의미합니다.
🔎 예시
- Python pip로 설치한 패키지/모듈 (tensorflow, pandas, beautifulsoup 등등)
- C++의 표준 템플릿 라이브러리 (STL)
- Node.js에서 npm으로 설치한 모듈
- HTML의 클라이언트 사이드 조작을 단순화하는 JQuery
- 웹에서 사용자 인터페이스 개발에 사용되는 React.js
오잉? 리액트는 프레임워크가 아닌가요?
저도 처음 프레임워크를 접하고 검색해 봤을 때 '대표적인 프레임워크로 React, Vue, Angular 이렇게 3가지가 있다'라고 많이 봤고 그런 줄 알았었는데 자세히 검색해보니 리액트 홈페이지에서도 그렇고 프레임워크로 분류되지 않고 라이브러리로 분류된다고 합니다.
따라서 React.js 웹 서비스 중에서 사용자 인터페이스 개발을 위해 사용되는 라이브러리입니다.
그럼 Express.js는...?
익스프레스 홈페이지에 명시된 바와 같이 Express.js는 Node.js에서 가장 인기가 많은 "Web Framework"입니다.
👀 프레임워크 vs 라이브러리
프레임워크는 단지 미리 만들어준 반제품이나, 확장해서 사용할 수 있도록 준비된 추상 라이브러리의 집합이 아니다. 프레임워크가 어떤 것인지 이해하려면 라이브러리와 프레임워크가 어떻게 다른지 알아야 한다.
라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접 제어한다.
단지 동작하는 중에 필요한 기능이 있을 때 능동적으로 라이브러리를 사용할 뿐이다.
반면에 프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용된다.
프레임워크에는 분명한 [제어의 역전] 개념이 적용되어 있어야 한다.
애플리케이션 코드는 프레임워크가 짜 놓은 틀에서 수동적으로 동작해야 한다.
- 토비의 스프링中
프레임워크와 라이브러리의 차이점은 "제어 흐름"의 권한이 어디에 있는가입니다.
라이브러리를 사용할 때 사용자는 애플리케이션 코드의 흐름을 직접 제어해야 합니다.
개발 시 필요한 기능이 있을 경우 능동적으로 라이브러리를 호출하여 사용하거나 기존에 구성된 함수나 코드를 가져다 써야 합니다.
반면 프레임워크는 애플리케이션의 코드가 프레임워크에 의해 사용됩니다.
애플리케이션 코드는 프레임워크가 짜 놓은 틀에서 수동적으로 동작하기 때문에 제어의 흐름은 프레임워크가 가지고 있고 사용자가 그 안에 필요한 코드를 작성하게 됩니다.
여기서 제어의 역전(IoC, Inversion of Control)이란,
어떠한 일을 하도록 만들어진 Framework에 Control 권한을 위임하는 것을 의미하는데,
간단히 말해 프로그램의 제어 흐름 구조가 뒤바뀐 것을 뜻합니다.
라이브러리의 경우 애플리케이션의 흐름을 사용자가 직접 제어해야 하지만 프레임워크의 경우 코드를 연결할 수 있는 위치를 제공하고 필요에 따라 사용자가 연결한 코드를 호출하는 제어 흐름 권한을 가지고 있습니다.
'💻IT' 카테고리의 다른 글
[개발상식] Docker & Kubernetes (도커와 쿠버네티스 차이) (2) | 2021.11.19 |
---|---|
[개발상식] MSA(MicroService Architecture)란? (0) | 2021.11.17 |
[개발상식] 함수형 프로그래밍이란? (0) | 2021.11.08 |
[개발상식] MVC 패턴이란? (Model-View-Controller) (10) | 2021.11.05 |
국내 코딩 부트캠프 가격 비교 (2021년 11월 기준) (17) | 2021.11.04 |