집을 직접 짓는 것과 같다. 당신이 원하는 구조를 선택하여 원하는 방식으로 방을 정렬할 수 있다.
프로그래밍에서의 라이브러리란 필요한 기능들이 모여있는 코드의 묶음이라고 생각할 수 있다.
자주 사용되는 기능들을 라이브러리(객체나 함수등의 형태)로 만들어두면, 필요할 때마다 직접 호출하여 사용할 수 있다.
물론 남들이 만들어둔 외부 라이브러리도 가져다 사용할 수 있다.
라이브러리는 어떻게 사용할 것인가에만 집중되어 있다. 즉 HTTP, 라우팅 등의 상태 관리를 위한 라이브러리는 지원하지 않는다. 이러한 특징 덕분에 사용자는 자신이 필요한 라이브러리만 직접 선택할 수 있다.
즉, 라이브러리를 사용하면 애플리케이션에 대한 통제권을 가질 수 있으며, 원하는 부분만 추가하면 되므로 제작과정이 더욱 원활해진다.
특정 아키텍처를 직접 제작하다 보면 애플리케이션이 망가질 수 있으므로 주의해야 한다. 일부 사람들이 Angular 또는 Vue를 선택하는 이유는 자신만의 규칙을 꾸축하는 데 시간과 돈을 투자하고 싶지 않기 때문이다. 이러한 프레임워크를 사용하면 단순히 규칙을 배운 뒤, 실제 제작에만 집중할 수 있다.
새집을 사는 것과 같아서 구조를 직접 다룰 필요가 없지만, 집은 이미 지어져 있기 때문에 방을 정렬하는 방식을 선택할 수 없다.
프레임워크는 작업(work)의 구조(frame)가 정해져 있는 라이브러리라고 볼 수 있다.
단, 프레임워크가 원하는 방식대로 다양한 기능을 제공한다.
앱/서버 등의 구동, 메모리 관리, 이벤트 루프 등의 공통된 부분은 프레임워크가 알아서 관리하며, 개발자는 서비스별로 다른 부분만 프레임워크가 정해준 방식대로 클래스, 메서드 등에 구현해두면 된다.
유명한 프레임워크로는 아래와 같은 것들이 있다.
일반적으로 프레임워크는 우리가 무엇을 해야 할지 알려준다. 프레임워크는 사용에 관한 모범 사례(best practice)를 가지고 있으며, 사용자를 지원하는 도구를 제공한다.
전담 팀에 의해 만들어진 이러한 프레임워크는 대규모 애플리케이션을 구축하는 데 필요한 모든 것들이 제공된다. 프레임워크의 개발팀은 모범 사례를 따르는 공식 스타일 가이드를 제공한다. 이러한 가이드를 통해 사용자는 빠르게 생산성을 높이고, 다른 팀원에 대한 교육도 쉽게 할 수 있다.
프레임 워크는 많은 코드를 작성하여 구축된다. 즉, 로딩 시간이 길어지곡 성능이 저하된다. 확장 가능한 아키텍처(Scalable architecture)는 수 많은 기능들을 제공한다. 일부 애플리케이션은 매우 간단하므로, 이러한 프레임워크의 사용이 자칫 개발 과정을 더욱 복잡하게 만들 수도 있다.
프레임워크를 사용하려면 지속해서 공부해야 한다. 새로운 버전이 나올 때마다 항목이 추가되고, 어떤 항목들은 제거되거나 더는 사용되지 않으므로 최신 지식을 유지해야 한다.
가장 큰 차이점은 코드 흐름의 제어권이 누구에게 있느냐이다.
라이브러리의 객체나 함수를 개발자가 직접 호출하여 사용한다.
개발자가 구현한 메서드가 프레임워크에 의해 호출된다.
이를 제어의 역전(IoC: Inversion of Control)이라고 한다.