framework
개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 골격 혹은 뼈대를 의미한다.
어플리케이션 개발 시 필수적인 코드, 알고리즘 DB 연동과 같은 기능들을 위해 어느 정도 뼈대(구조)를 제공하며 이러한 뼈대 위에서 프로그래머(사용자)가 코드를 작성해 어플리케이션을 개발한다.
앱/서버 등의 구동, 메모리 관리, 이벤트 루프 등의 공통된 부분은 프레임워크가 관리하고 프로그래머(사용자)는 프레임워크가 정해준 방식대로 구현하면 된다.
예를 들어,
java 서버 개발에 사용되는 spring
python 서버 개발에 사용되는 django, flask
안드로이드 앱 개발에 사용되는 android
아이폰 앱 개발에 사용되는 cocoa touch
웹 개발에 사용되는 angular, vue.js, 등
java 기반의 JSP를 위한 프레임 워크인 struts
루비로 작성된 MVC 패턴을 이용하는 Ruby on Rails
(Node.js는 프레임워크라기보다는 자바스크립트 실행 환경으로 봐야)
프레임워크의 장점으로는, 특정 디자인 패턴이나 동작과 기능들을 위한 기능이 미리 정의되어 있어 편리하다는 점과, 여러 사용자가 협업할 때 기준이 될 수 있다는 점을 들 수 있다.
library
소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임. 즉, 특정 기능을 모아둔 코드나 함수들의 집합이며 코드 작성시 활용 가능한 도구들을 의미한다.
즉, 작업을 단순화하는데 사용할 수 있는 미리 작성된 코드 모음이다. 본질적으로는 프로그래머가 작업을 단순화하고 개발 프로세스 속도를 높이는 데 사용할 수 있는 미리 정의된 함수 및 클래스 집합이다.
대부분 라이브러리는 크기가 크지 않다. 일반적으로 라이브러리는 문자열, 소켓 및 IO 등과 같은 좁은 범위에 중점을 두므로 API도 작고 종속성이 더 적다.
예를 들어,
python pip로 설치한 패키지/모듈 (tensorflow, pandas, beautifulsoup 등)
c++의 표준 템플릿 라이브러리 (STL)
node.js에서 npm으로 설치한 모듈
html의 클라이언트 사이드 조작을 단순화하는 jQuery
웹에서 사용자 인터페이스 개발에 사용되는 React.js
react.js는 사용자 인터페이스를 만들기 위한 라이브러리라고 한다. 반면, express.js는 가장 인기가 많은 웹 프레임워크라고 한다.
차이점
라이브러리와 프레임워크의 차이점으로 IoC(Inversion of Control)가 언급된다. 어떤 면에서는 프레임워크를 라이브러리 모음으로 생각할 수 있지만 완전히 다르다.
사용자(프로그래머)는 라이브러리는 사용해 프로그램 흐름을 제어할 수 있다. 라이브러리는 언제 어디서나 원하는 대로 호출할 수 있다. 이에 반해, 프레임워크는 흐름이 사용자(프로그래머)가 아니라 프레임워크에 의해 제어된다.
프레임워크는 기반구조이며, 라이브러리는 개발 편의 도구.
프레임워크의 제어 주도권은 프레임워크가 갖지만(상대적으로 자유도가 낮음), 라이브러리의 제어 주도권은 사용자가 갖는다(상대적으로 자유도가 높음).
라이브러리는 개발자에게 미리 정의된 함수와 클래스를 제공해 작업을 더 쉽게 만들고 개발 프로세스를 향상시킨다. 반면 프레임워크는 개발자가 특정 플랫폼용 어플리케이션을 구축하는 기반과 같다.
일반적으로 라이브러리는 a collection of helper modules, objects, classes, functions, message templates, pre-written code, 등을 말한다. 반면 프레임워크는 a lot of APIs, compilers, toolsets, support programs, libraries 등을 말한다.
참고