글 작성자: 개발자 올라프

 

들어가며

 

프레임워크와 라이브러리는 소프트웨어 개발에서 재사용 가능한 코드의 모음을 의미하지만 구조와 사용 방식에 있어서 차이점이 있다.

 


 

프레임워크(Framework)

 

✅ 무언가를 만드는데 필요한 모든 것이 갖춰져서 제공되는 것

 

UI, Routing, HTTP Clients, State Management 등이 제공되어 프로젝트를 구현하는데 필요한 모든 것들이 제공된다. 애플리케이션 흐름을 프레임워크가 관리하고, 개발자는 프레임워크 내에서 정해진 방식에 따라 코드를 작성하게 된다. 정해진 방식에 따라서 개발하는 환경이기에 어떤 라이브러리를 사용할지와 같은 고민을 하지 않을 수 있지만, 프레임워크에서 제공하는 내용들을 익혀야 하므로 진입장벽이 상대적으로 높고 자율성이 떨어진다는 단점이 있다.

 


 

라이브러리(Library)

 

✅ 특정 작업을 수행하는 함수나 클래스의 모음

 

프레임워크와 달리 골격과 규칙이 정해지지 않고 조금 더 좁은 문제를 해결하기 위한 단위이다. 예를 들어서 React는 UI 문제를 해결하기 위한 라이브러리로 개발 도중 네트워크 통신이 필요하면 통신 라이브러리를 설치할 수 있으며, 라우팅이 필요하면 라우팅 라이브러리를 추가로 설치하여 필요한 것을 골라서 사용하는 유연한 개발이 가능하다. 이처럼 라이브러리는 개발자의 코드 내에서 호출되며, 개발자가 애플리케이션의 흐름을 제어하게 된다.

 


 

제어 역전(Inversion of Control)

 

프레임워크에는 제어의 역전이라는 개념이 있다. 이는 프로그램의 흐름 제어가 사용자 코드에서 프레임워크나 라이브러리로 옮겨진 상태를 가리킨다. 전통적인 프로그래밍에서는 사용자가 작성한 코드가 애플리케이션의 흐름을 제어하여 함수나 필요한 메소드를 호출하고, 객체를 생성하며, 작업 순서를 결정한다.

 

제어 역전을 적용한 경우, 이러한 흐름의 제어가 프레임워크나 라이브러리로 이동한다. 사용자가 작성한 코드는 프레임워크에 의해 호출된다. 예를 들어서 서버가 클라이언트의 요청을 받고 적절한 핸들러 함수를 호출하는 것이 제어의 역전이라고 할 수 있다. 개발자가 요청에 대응하는 핸들러 함수를 작성하지만, 언제 호출될지는 프레임워크가 결정하는 것이다. 이는 개발자가 비즈니스 로직(무엇을)에 집중할 수 있게하며, 공통적인 작업(어떻게)은 프레임워크가 처리하여 코드의 재사용성과 모듈성이 향상되게 한다.