Framework vs Library vs API

Technique

Language :

pfl.png

포함관계

프레임워크 (Framework)

단어가 가진 의미 그대로 뼈대 역할을 한다.

  • 개발자가 코드를 작성하여 애플리케이션을 완성한다.

기본적인 뼈대가 완성되어 있고 규칙이 존재하는 개발 환경

  • 공통적인 개발 환경을 제공한다.
  • 제공되는 개발 환경에서만 개발할 수 있으므로 제한이 발생한다.

개발 구조나 규칙, 라이브러리 및 도구 모음

  • 일반적으로 사용하는 라이브러리들이 포함되어 있어 애플리케이션을 빠르게 개발할 수 있다.
  • 코드를 재사용하여 개발 시간을 단축하고 일관성 있는 코드를 작성할 수 있다.
  • 데이터베이스 연결을 단순화하고 네트워크 트래픽 및 캐싱에 최적화된 프로세스를 제공한다.

제어의 역전(IoC, Inversion of Control)이 발생한다.

  • 프레임워크가 전체적인 흐름을 제어한다.
  • 사용자는 그 흐름 안에서 필요한 코드만 작성하면 되므로 신경 써야 하는 코드가 줄어든다.

예시

  • Java: Spring, JUnit
  • Typescript: Angular
  • Python: Django
  • PHP: Laravel

라이브러리 (Library)

개발 시 재사용할 수 있는 기능들을 모아 모듈화한 것

  • 환경은 없고 의도와 목적만 있다.

사용자가 직접 코드의 흐름을 제어한다.

  • 필요한 코드를 원하는 곳에 호출해서 사용한다.

다양한 상황과 환경에 대해 사전 테스트 된 코드를 제공한다.

  • 라이브러리 개발자의 지원이 부족하면 새로운 버전에 대한 호환성 문제가 발생할 수 있다.
  • 지원되지 않는 환경에서 사용하면 래퍼가 필요해서 애플리케이션 성능에 영향을 미칠 수 있다.

애플리케이션 구축 비용을 절감할 수 있다.

  • 라이브러리를 사용하면 코드가 해당 라이브러리에 종속된다. 새로운 라이브러리로 전환하려면 코드를 변경해야 할 수 있다.
  • 라이브러리 간에 충돌이 발생하여 애플리케이션 성능이 저하될 수 있다.
  • 라이브러리에 공격자가 악용할 수 있는 보안 취약점이 있다.

예시: React, JQuery, AssertJ

API (Application Programming Interface)

다른 소프트웨어 시스템과 통신하기 위해 따라야하는 규칙을 정의한 문서

응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스

프로그램과 프로그램간에 상호작용을 돕는 시스템

예시

  • Web API: RESTful API, 기상청 API
  • 소셜 미디어 API: Facebook Graph API, Twitter API
  • 클라우드 서비스 API: Amazon Web Service(AWS) API, Google Cloud Platform(GCP) API, Ncloud API
  • 데이터베이스 API: JDBC

집 짓는 과정을 통해 알아보는 차이점

프레임워크: 모델하우스, 평면도, 청사진

  • 주방이나 현관 위치, 방 개수, 기둥 위치 등 집 구조
  • 건설사에서 설계한 그대로 사용해야 하며 사용자가 변경할 수 없다.

라이브러리: 가구, 전자제품, 공구

  • 이미 설계된 구조(뼈대) 안에서 자유자재로 인테리어를 한다.
  • 어떤 가구와 재료들을 사서 조립하고 배치할 것인지 사용자에게 권한이 있다.

API: 리모컨, 원격제어 장치

  • 프로그램들을 제어하여 원하는 결과를 얻는다.

Reference

https://www.youtube.com/watch?v=_j4u4ftWwhQ

https://cocoon1787.tistory.com/745

https://velog.io/@whitecloud94/프레임워크-vs-라이브러리

https://www.youtube.com/watch?v=yKEwNVbAFC0

https://www.baeldung.com/cs/framework-vs-library

https://webclub.tistory.com/458

https://www.geeksforgeeks.org/software-framework-vs-library

https://anarsolutions.com/libraries-vs-frameworks

https://tibetsandfox.tistory.com/13

민갤

Back-End Developer

백엔드 개발자입니다.