Computer Science/모델링 & 아키텍쳐 & 패턴

[CS] API vs Library vs Framework

findTheValue 2021. 7. 11. 09:51

티버님, 임루트, 욘님의 10분 테코톡 읽고 작성했습니다.

 


 

API(application programming interface)

: 응용 프로그램에서 운영 체제나 프로그래밍 언어가 제공하는 기능(다른 프로그램들, 서비스들)을 제어할 수 있게 만든 인터페이스

(프로그램 간의 연결을 시켜주는 다리)

(직접구현이 아닌 제어를 담당)

 

인터페이스는 시스템을 구성하는 두개의 구성요소가 상호작용하기 위해서는 경계가 필요한데 인터페이스는 경계에서 각 구성요소가 접속하기 위한 하드웨어, 소프트웨어, 조건, 규약등의 총체이다.(가구들을 연결해주는 멀티탭)

클라이언트, 서버간의 메시지, 언어 등.

 

App은 OS를 제외한 나머지 소프트웨어.(정의)

 

Programming은 코딩을 통해 만들고 인터페이스에 접근하는 행위, 결과물? 총체

 

 

ex) 지도어플(서비스) -> /map/위도&경도 를 client가 보내주면 지도 서비스는 관련 정보를 response 해줌.

/map/위도&경도 = API

 

특징

  • 구현과 독립적으로 사양만 정의되어 있다.
  • API에 따라 접근 권한이 필요할 수 있다.
  • Java API, 여러기업들의 오픈 API 등등...

++구글 클라우드 플랫폼가면 다양한 API가 많아서 개발할때 쓰기 편함.


Library

: 응용 프로그램 개발을 위해 필요한 기능(메소드)을 모아놓은 프로그램

개발자가 사용할 수 있는 API들을 종류나 목적에 따라서 나누어 정의한 API묶음

객체설정을 응용프로그램에서 해줘야함.

목적은 코드재사용(특정 도메인에 메이더라도)

 

특징

  • 독립성을 가진다(각 라이브러리들끼리 의존x) 필요할 때 필요한 것만 호출 해 사용.
  • 응용 프로그램이 능동적으로 라이브러리를 사용한다.(필요할 때 호출해서 사용한다.)(능동태) 
  • Apache Commons, Guava, Lombok, JQuery..

Framework

: 응용 프로그램(App)이나 소프트웨어 솔루션 개발을 수월하게 하기 위해 제공된 소프트웨어 환경(틀)

개발자들이 좀 더 비즈니스 로직에 집중하도록 기능을 제공함., 협력흐름을 정해놓음. 협력(객체간 관계)

객체 생성, 관계설정, 생명주기를 제어. 어노테이션을 붙히면 알아서 관계설정을 해줌.

목적은 설계재사용.

 

특징

  • 상호협력하는 클래스와 인터페이스의 집합.
  • 응용프로그램이 수동적으로 프레임워크에 의해 사용된다.
  • 공통적인 개발환경을 제공한다.(개발 편의성)
  • 개발할 수 있는 범위가 정해져있다.(많은부분이 만들어져있기 때문)
  • Spring, Junit, Ruby on rails, Jandgo, node.js

 

=> 라이브러리는 내가 작성한 응용프로그램의 코드가 라이브러리를 호출해 사용한다면

프레임워크는 프레임워크의 로직(client req처리, req처리할 controller매핑, 개발자가 작성한 컨트롤러(응용 프로그램)를 호출해 수행.) => 스프링이 내가 작성한 컨트롤러를 호출함.(수동태)


결론

Library와 API의 차이점은 구현 로직의 유무이다.

Library와 Framework의 차이점은 응용프로그램의 주도권을 라이브러리가 가지고있냐? 프레임워크가 가지고있느냐? 의 차이. 핵심은 재사용성

 

+++디자인 패턴 : 소프트웨어 설계에서 반복적으로 발생하는 문제에 반복적으로 적용할 수 있는 해결방법.

실무 컨텍스트에 사용해왔고 다른 컨텍스트에서 유용할 것이라고 생각되는 방법.

(설계를 재사용, 코드 재사용이 아님)(객체간 협력의 흐름 - 전략패턴)

-코드를 재사용 할 수 없는 디자인패턴에서 나아가 코드도 재사용하고싶어하는 흐름 -> 라이브러리, 프레임워크

컴포넌트 조립방식은 실패 => 현실의 도메인은 너무나 다양하고 그에맞는 최적화 전략도 천차만별이기 때문.