카테고리 없음

프레임워크와 라이브러리

강용민 2023. 1. 8. 18:33

개발을 하다보면 어떤 프레임워크를 사용하고, 어떤 라이브러리를 사용할 지 많은 고민을 하게된다. 하지만 정작 라이브러리와 프레임워크의 차이점은 잘 모르는 경우가 많다. 특히 최근에는 라이브러리와 프레임워크의 경계가 모호해져 더욱 햇갈린다.

물론 둘의 차이점을 몰라도 개발은 할 수 있지만 이왕이면 둘의 차이점을 명확히 알고 사용하는게 좋지 않을까해서 작성했다.

 

라이브러리와 프레임워크는 둘다 다른 개발자가 쓴 코드고 우리의 프로젝트를 위해서 가져다 사용한다는 공통점이 있다.

그럼 차이점은 무엇이 있을까?? 둘의 정의를 한번 알아보자.

프레임워크

framework는 frame + work 다. frame은 '틀'이고, work는 '일하다'라는 뜻으로 이것을 합쳐보면 '틀을 가지고 일하다'가 된다. 즉 소프트웨어에서의 프레임워크는 '프로그램을 개발하기 위해 사용되는 틀을 제공하는 프로그램'이라고 본다.

애플리케이션 개발 시 필수적인 코드, 알고리즘, DB 연동과 같은 기능들을 위해 어느 정도 뼈대(구조)를 제공하며 이러한 뼈대 위에서 사용자는 코드를 작성하여 애플리케이션을 개발한다. 앱/ 서버 등의 구동, 메모리 관리, 이벤트 루프 등의 공통된 부분은 프레임워크가 관리하며, 사용자는 프레임워크가 정해준 방식대로 구현하면 된다.

 

예시

  • Java 서버 개발에 사용되는 Spring
  • Python 서버 개발에 사용되는 Django, Flask
  • Javascript 서버 개발에 사용되는 Express.js(흔히 Node.js라 부를때 Express.js를 의미한다. Node.js는 런타임환경이다.)
  • 웹 인터페이스 개발에 사용되는 Angular, Vue.js

 

라이브러리

소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임. 즉 특정 기능을 모와둔 코드, 함수들의 집합이며 코드 작성 시 활용 가능한 도구들을 의미한다. 자주 사용되는 기능들을 라이브러리(객체나 함수등의 형태)로 만들어두면, 필요할 때마다 직접 호출하여 사용할 수 있다.

 

예시

  • Node.js 환경에서 npm으로 설치한 모듈
  • python 환경에서 pip로 설치한 패키지/ 모듈
  • Browser환경에서 script src로 불러들이는 js파일(React.js, JQeury 등)

 

프레임워크 vs 라이브러리

눈썰미가 좋으신 사람은 앞서 설명한 프레임워크와 라이브러리에서 차이점을 찾을 수 있다.

프레임워크는 정해진 틀에 살(코드)를 붙혀나가는 형식이고, 라이브러리는 필요한 부분만 호출 해 코드에 붙혀넣는다. 즉 프레임워크는 누군가의 규칙(틀)에 따라 코딩을 하지만 라이브러리는 개발자가 짠 코드에 필요한 부분에만 조립형태로 들어간다 . 이것을 다른 말로는 "제어 흐름"의 권한이 어디에 있느냐의 차이다.

 

프레임워크는 애플리케이션의 코드가 프레임워크에 의해 사용된다. 애플리케이션 코드는 프레임워크가 짜 놓은 틀에서 수동적으로 동작하기 때문에 제어의 흐름은 프레임워크가 가지고 있고 사용자가 그 안에 필요한 코드를 작성하게 된다.

반면 라이브러리를 사용할 때 사용자는 애플리케이션 코드의 흐름을 직접 제어해야 한다. 개발 시 필요한 기능이 있을 경우 능동적으로 라이브러리를 호출하여 사용하거나 기존에 구성된 함수나 코드를 가져다 써야 한다.

 

여기서 제어의 역전(IoC, Inversion of Contorl)이란 개념이 들어가는데 프로그램의 제어 흐름 구조가 뒤바뀐 것을 의미한다. 기존에는 코드 흐름을 개발자가 가졌었다면 프레임워크는 프레임워크가 코드 흐름을 가져간다. 이를 그림으로 나타내면 다음과 같다.

[참고]

https://velog.io/@suss-lee/%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%ACFramework%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

https://www.youtube.com/watch?v=t9ccIykXTCM&t=2s

 

https://cocoon1787.tistory.com/745