원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 골격, 뼈대
어플리케이션 개발시 필수적인 코드, 알고리즘, DB 연동과 같은 기능들을 위해 어느 정도 뼈대(구조)를 제공하며 이러한 뼈대 위에서 사용자는 코드를 작성하여 어플리케이션을 개발함.
앱/서버 등의 구동, 메모리 관리, 이벤트 루프 등의 공통된 부분은 프레임워크가 관리하며, 사용자는 프레임워크가 정해준 방식대로 클래스, 메소드를 구현하면 됨.
객체 지향 개발을 하게 되면서 통합성, 일관성의 부족이 발생되는 문제를 해결할 방법 중 하나라고 할 수 있음.
EX) Java 서버 개발에 사용되는 Spring, Python 서버 개발에 사용되는 Django, Flask 등
그 외에도 Android(안드로이드 앱), Cocoa Touch(아이폰 앱), Augular, Vue.js(웹 개발), Struts(JSP), Ruby on Rails(루비 MVC) 등이 있음.
단순 활용가능한 도구들의 집합
개발자가 만든 클래스에서 호출하여 사용, 클래스들의 나열로 필요한 클래스를 불러서 사용하는 방식을 취하고 있음.
EX) tensorflow, pandas, beautifulsoup (Python), STL(C++), Node.js에서 npm으로 설치한 모듈
JQuery나 React.js도 이에 속함.
프레임워크와 라이브러리는 제어 흐름(IoC)의 권한이 어디에 있느냐에 따라 달라짐.
IoC(Inversion of Control): 어떠한 일을 하도록 만들어진 프레임워크에 제어 권한을 위임하는 것.
프로그램의 제어 흐름 구조가 뒤바뀐 것을 의미함.
라이브러리를 사용할 때 사용자는 어플리케이션 코드의 흐름을 직접 제어해야 하지만,
프레임워크는 어플리케이션의 코드가 프레임워크가 짜 놓은 틀에서 수동적으로 동작하기 때문에 제어의 흐름을 프레임워크가 가지고 있음.
코드를 연결할 수 있는 위치를 제공하고 필요에 따라 사용자가 연결한 코드를 호출하는 제어 흐름 권한을 가지고 있음.
→ 라이브러리: 함수들이나 기능 모음
→ 프레임워크: 특정 디자인 패턴이나, 전처리 후처리에 필요한 동작과 기능들을 수행하기 위해서 프레임워크가 실행되다가 중간 중간에 특정 비지니스나, 특정 구현 단에서만 사용자의 코드를 검색하여 사용하는 형태
https://cocoon1787.tistory.com/745
https://webclub.tistory.com/458
https://flowingmooon.tistory.com/19