[CS] 프레임워크 vs 라이브러리

hyeona·2025년 1월 21일

CS

목록 보기
3/5
post-thumbnail

개요

평소 개발을 진행하면서 프레임워크와 라이브러리를 많이 사용하는데, 이 둘의 차이점을 잘 알지 못하고 있었다. 이에 인터넷으로 여러 사람들의 블로그 내용을 정리하면서 둘의 차이점을 확실하게 알고자 글을 작성하게 되었다.



📌 프레임워크

: 원하는 기능 구현에 집중하여 개발할 수 있도록 일정한 형태와 필요한 기능을 갖추고 있는 골격, 뼈대
: 앱/서버 등의 구동, 메모리관리, 이벤트 루프 등 공통된 부분은 프레임워크가 관리하고, 사용자는 프레임워크가 정해준 방식대로 클래스, 메소드를 구현

  • 자유도 : 낮음
  • 거의 모든 기능을 제공

⭐️ 기능

  1. 코드 재사용성 : 공통 기능을 제공하여 코드 재사용에 용이
  2. 일정한 구조 제공 : 애플리케이션의 구조를 정의하여 개발자가 그 구조를 따르도록 함
  3. 모듈화 : 기능을 모듈화하여 독립적인 컴포넌트로 나눌 수 있게 함
  4. 생산성 향상 : 반복적인 작업을 자동화하고 개발 생산성을 높임
  5. 유지보수성 : 일관된 코드 구조를 유지하여 유지보수성을 향상

⭐️ 종류

  • Java 서버 개발 : Spring
  • Python 서버 개발 : Django, Flask
  • 안드로이드 앱 개발 : Android
  • 아이폰 앱 개발 : Cocoa Touch
  • 웹 개발 : Angular, Vue.js 등
  • Java 기반의 JSP : Struts
  • 루비로 작성된 MVC패턴을 이용 : Ruby on Rails




📌 라이브러리

: 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임
: 특정 기능을 모와둔 코드, 함수들의 집합이며 코드 작성 시 활용 가능한 도구
: 미리 작성된 코드, 변수, 함수, 클래스가 포함된다.

  • 자유도 : 높음
  • 기본 기능 외 제공 X

⭐️ 기능

  1. 코드 재사용성: 특정 작업을 처리하는 코드의 재사용을 촉진
  2. 추상화: 복잡한 작업을 간단한 함수 호출로 추상화
  3. 모듈화: 기능별로 모듈화되어 필요에 따라 가져다 쓸 수 있음
  4. 유연성: 개발자가 필요에 따라 라이브러리를 선택하여 사용할 수 있음

⭐️ 종류

  • TensorFlow: 머신러닝과 딥러닝을 위한 Python 라이브러리
  • Pandas: 데이터 분석과 조작을 위한 Python 라이브러리
  • NumPy: 수치 계산을 위한 Python 라이브러리
  • jQuery: HTML 문서 탐색 및 조작, 이벤트 처리, 애니메이션, Ajax를 쉽게 처리할 수 있게 하는 JavaScript 라이브러리
  • Lodash: JavaScript 유틸리티 라이브러리로서 배열, 객체, 문자열 등 다양한 작업을 편리하게 처리할 수 있게 해




✔️ 프레임워크 vs 라이브러리

🌱 프레임워크

  • 주도권 : 프레임워크
    -> 프레임워크가 제공하는 기능을 이용하거나 허용하는 범위 내에서만 추가 도구 사용 가능

  • 프레임워크는 모델하우스를 짓는것에 비유할 수 있다. 모델하우스의 소파의 위치, 의자와 책상의 위치, 방의 용도 등. 우리가 수정할 수 있는 범위는 제한적이다. 주방의 위치, 기둥의 개수, 방의 개수 등 집을 이루고있는 굵직한 뼈대는 수정할 수 없다. 사용자는 모델하우스가 제공하는 청사진 안에서"만" 움직일 수 있다. 프레임워크가 제공하는 틀에 따라 코드를 작성해야 하는것이다.


🌱 라이브러리

  • 주도권 : 개발자
    -> 기능 구현을 원하는 방향으로 진행
    -> 쓰고싶은 도구, 쓰고싶은 기술 사용

  • 라이브러리는 이케아에서 산 재료로 가구를 조립하는것에 비유할 수 있다. 집에서 사용할 가구를 조립하거나 만들기 위해 벌목부터 시작해서 목공을 하거나, 가죽을 얻기위해 사냥을 하고싶은 사람은 거의 없을것이다. 그래서 이케아 혹은 가구점에 가서 기본적인 재료를 사서 입맛대로 조립하고 배치할 수 있다.


[ 토비의 스프링 中 ]

  • 프레임워크는 단지 미리 만들어준 반제품이나, 확장해서 사용할 수 있도록 준비된 추상 라이브러리의 집합이 아니다. 프레임워크가 어떤 것인지 이해하려면 라이브러리와 프레임워크가 어떻게 다른지 알아야 한다.
  • 라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접 제어한다.
    단지 동작하는 중에 필요한 기능이 있을 때 능동적으로 라이브러리를 사용할 뿐이다.
  • 프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용된다.
    프레임워크에는 분명한 [제어의 역전] 개념이 적용되어 있어야 한다.
  • 애플리케이션 코드는 프레임워크가 짜 놓은 틀에서 수동적으로 동작해야 한다.




❗️ 정리

공통점

  • 코드 작성에 도움이 되는 타인이 작성한 코드의 집합

차이점

  • 어플리케이션의 Flow(흐름)를 누가 가지고 있는가

  • 프레임워크

    • 프로그램이 필요한것을 개발자에게 알려줌으로써 제어권을 역전
    • 전체적인 흐름을 프레임워크가 쥐고 있으며 사용자는 그 안에 필요한 코드를 짜 넣으면 됨
      (틀안에 제어 흐름에 대한 주도성 내포)
    • 전체 어플리케이션의 구조를 정의하여 일정한 개발 패턴을 따르게 함
  • 라이브러리

    • 개발자가 필요할 때 마다 설치, 혹은 호출함으로써 개발자가 능동적으로 사용
    • 사용자가 전체적인 흐름을 직접 만들고 필요에 따라 라이브러리를 가져다 씀
      (사용자가 전적으로 제어 흐름에 대한 주도성 가짐)
    • 특정 기능만을 제공할 뿐 어플리케이션의 전체 구조에는 관여하지 않음
      (개발자 스스로 원하는 방식으로 구조 설계 가능)




참고 링크 :

0개의 댓글