[include(틀:다른 뜻1, other1=에이전트 오브 쉴드의 용어, rd1=에이전트 오브 쉴드, anchor1=프레임워크)] [목차] == 개요 == {{{+1 Framework}}} 어떠한 목적을 달성하기 위해 복잡하게 얽혀있는 문제를 해결하기 위한 구조로, [[소프트웨어]] 개발에 있어 하나의 뼈대 역할을 한다. == [[라이브러리]]와의 차이점 == 읽기전에 답부터 이야기하면 둘의 차이를 엄밀히 말하는건 불가능에 가깝다. 여러 사이트들의 설명[* 이는 나무위키도 포함한다]들은 학술적으로는 의미가 없는 내용이다. 해외의 유명한 개발책들을 읽어도 갑론을박이 활발한것을 알 수 있다. 아래의 설명을 읽을 때 '''대략 이런 경향이있다'''로 이해를 해야지 단순하게 라이브러리는 무엇이고 프레임워크는 무엇이다 같은 이야기를 면접때 한다면 매우 불리해질 것이다.[* 보통 FE프레임워크로 자주 예시를 드는게 Vue와 React이고 둘은 일반적으로 우리가 이야기하는 프레임워크 정의에 완벽하게 부합하지만 Vue는 본인을 프레임워크라고 소개하고 React는 본인을 라이브러리라고 소개한다.][* 또한 유닛테스트를 보통 우리는 프레임워크라고 부르는 경향이 있는데 언어마다 유닛테스트를 어떤관점으로 보는지 또한 완전 다르다.] 보통 프레임워크라고 하면 여러 기능을 가진 [[객체 지향 프로그래밍|클래스]]와 [[라이브러리]]가 '특정 결과물을 구현하고자' 합쳐진 형태라고 볼 수 있다. 따라서 프레임워크는 라이프 사이클이나 일종의 상태를 가지며 대부분의 프레임워크들은 다양한 기능들을 지원하기 위해 많은 라이브러리들을 가지고 있다. 다만 이 분류법도 예외가 있다. [[메서드(프로그래밍)|메서드]] 및 [[객체 지향 프로그래밍|클래스]]화, 즉 [[모듈화]]를 하는 이유 중 하나가 재사용성인데, 프레임워크는 이 재사용성을 큰 그룹 단위로 묶어주었다고 보면 된다. 재사용 가능한 수많은 클래스들과 라이브러리들을 융합한 채로 처음부터 제공해 주기 때문에, 여러 개의 표준을 만들지 않아도 돼서 개발자의 피곤함을 덜어준다. 예를 들어, [[웹 프레임워크]]는 '웹 서버'를 구현하기 위한 목적으로 만들어진 프레임워크다. 웹 서버를 구현하기 위해선 페이지 구현, DB 관리, 유저 인증, API 서버, 라우팅, 사이트맵, 세션 관리 등 여러 기능이 들어있어야할 것이다. 각 기능을 보유한 라이브러리들을 한데 묶어 담은 것이 바로 프레임워크라고 보면 된다. 현재는 만든사람이 라이브러리라고 하면 라이브러리이고 프레임워크라고 하면 프레임워크로 굳는 분위기 이다. == 종류 == * [[Spring(프레임워크)|Spring]]: [[Java]]의 [[웹 프레임워크]] * [[아파치 HTTP 서버|Apache]] 시리즈 (Sling, Structs 2, Wicket 등) * JWT * [[Django]]: [[Python]]의 [[웹 프레임워크]] * [[Flask]]: Python의 마이크로 [[웹 프레임워크]] * [[Ruby on Rails]]: [[Ruby]]의 [[웹 프레임워크]] * [[Laravel]], Codeigniter, CakePHP, Symfony, Zend: [[PHP]]의 [[웹 프레임워크]] * [[Bootstrap(프레임워크)|Bootstrap]]: [[트위터]]의 [[JavaScript]] 기반 [[웹 프레임워크]] * [[Microsoft .NET#Framework|.NET Framework]] * [[Qt(프레임워크)|Qt]] * [[Node.js]]의 [[Express.js]], [[NestJS]], meteor 프레임워크 * 웹 프론트엔드의 [[SPA]]용 프레임워크 ([[Angular]], [[Vue.js]] 등) * Play: 함수형 언어 [[Scala]]의 [[웹 프레임워크]] * [[안드로이드(운영체제)|안드로이드]]: 안드로이드 애플리케이션용 프레임워크 * [[Cocoa API|Cocoa]]: [[iOS]], [[macOS]] 애플리케이션용 프레임워크 * [[ALSA]] * [[Electron(프레임워크)|Electron]] == 관련 문서 == * [[웹 프레임워크]] * [[라이브러리]] * [[날코딩]] [[분류:프레임워크]]