우아한테크코스 테코톡

아리, 디우의 프레임워크 vs 라이브러리 vs API

https://youtu.be/G9Dl5FiaOQ4

아리, 디우의 프레임워크 vs 라이브러리 vs API

API (Application Programming Interface)

  • Application(응용)
    • 운영체제 위에서 실행되는 모든 소프트웨어
  • Programming(프로그래밍)
    • 메모리에 올라가서 실행될 수 있는 명령어들의 집합인 프로그램을 작성하는 행위
  • Interface(인터페이스)
    • 서로 다른 두 개가 서로 정보를 주고 받기 위해 약속된 규약(규격)
  • OS 살짝
    • img.png
    • 하드웨어를 직접 제어하려고 하면 어떤 하드웨어 부품을 사용하는지를 일일이 다 알고 있는 상태여야 할 것이다.
    • 하지만 우리는 컴퓨터 사용자와 컴퓨터 하드웨어 사이의 중간 역할을 하는 프로그램인 OS를 통해서 이런한 부분을 추상화할 수 있다.
    • 즉, 하드웨어를 포함한 CPU 타임 등 자원에 대한 할당 단위 OS가 하드웨어 제어 등 복잡한 일을 대신해주는 것이다.

System call API

  • img.png
  • 하드웨어 뿐 아니라 컴퓨터 리소스에 대한 부분을 추상화하게 되었고 결국 어느 한 계층에서는 추상화된 하드웨어에 대한 조작이 필요해지게 됐는데 OS는 이 때 응용프로그램을 위한 인터페이스를 제공하는데 이것을 System call API라고 부르게 된다.
  • 예시
    • img.png
    • Windows에서 제공하는 시스템 콜과 Unix 계열의 OS에서 제공하는 시스템 콜의 차이가 있다.
    • 이렇게 Process Control, File, Management와 같이 동일한 인터페이스에 대한 구현은 각 OS마다 다르다는 것을 알 수 있다.
  • 결론
    • 시스템 콜이란 HW를 간접제어하고, OS가 관리하는 정보에 접근하도록 요청하는 규약을 정의한 것

Socket

  • img.png
  • 네트워크에서도 우리는 API라는 말을 들어볼 수 있다.
  • 프로세스와 컴퓨터 네트워크 사이의 인터페이스를 소켓이라는 것을 통해서 구현하게 된다.
  • 대부분의 애플리케이션은 두 프로세스가 메세지를 서로에게 보내는 통신 프로세스 쌍으로 구성된다.
  • 이때 프로세스는 소켓을 통해 네트워크로 메세지를 보내고 받는다.
  • TCP/IP 4계층에서 전송 계층 위에 놓이며 프로토콜을 이용하여 데이터 통신을 제공하는 인터페이스를 소켓이라고 한다.
  • TCP에 대한 소켓 API 호출 및 데이터 흐름
    • img.png
    • 코드의 구현 내용은 서로 다르지만 소켓을 생성하고 서보 주소를 연결한 후 연결을 시도하는 부분이 동일하다는 것을 알 수 있다.
  • 소켓이란 응용계층과 통신 계층 사잉의 인터페이스 네트워크에서 동작하는 프로세스간 통신 End Point
  • 애플리케이션 프로세스와 트랜스포트 프로토콜 간의 인터페이스

    REST API

  • REST는 Representational State Transfer의 약자
  • 2000년도 로이 필딩 논문에서 최초로 소개된 소프트웨어 아키텍처의 한 형식을 말한다
  • REST 아키텍처를 따라서 JSON 형식의 데이터를 HTTP 메서드를 통해서 주고받겠다고 정의한 명세 이를 REST API라고 부른다
  • 또한 다른 시스템에서 제공하는 명세에 따라서 클라이언트 입장이 되어 다른 시스템에서 제공하는 API를 이용해 기능의 가져다씀으로써 내가 만든 애플리케이션을 완성할 수도 있다.
  • 이렇게 REST API는 어떤 서버의 데이터와 서비스를 이용할 수 있게 해주는 소프트웨어 도구 혹은 명세

예시들 정리

  • System call
    • 응용 프로그램과 하드웨어 사이에서 OS에 동작을 요청하는 함수 또는 동작들에 대한 인터페이스
  • Socket
    • 서로 다른 컴퓨터의 프로그램과 프로그램이 네트워크 상에서 통신할 수 있도록 통신 선로를 제공
  • REST API
    • 서로 다른 애플리케이션 간에 정보를 JSON 형식으로 HTTP Method를 통해서 주고 받는다.

API란 결국 무엇인가

  • 구현과는 독립적으로 어떤 HW 혹은 서로 다른 컴퓨터 프로그램간에 정보를 주고 받을 때 사용하는 규약 혹은 사양을 정의한 것
  • 어플리케이션(응용)을 만들기 위한 하위 함수, 프로토콜, 도구 등 다양한 컴포넌트 간의 통신 규약(인터페이스)

Library

  • 컴퓨터 프로그램이 상용하는 비휘발성 자원의 모임
  • 수많은 코드들 중에서 원하는 기능을 찾아서 이용한다
  • 우리가 원하는 시점에 원하는 기능을 가져다가 쓴다는 것이다
  • 라이브러리를 능동적으로 이용
  • 라이브러리를 호출함으로써 응용 프로그램의 제어권을 우리가 가지고 있는 것이다.

Jackson

  • 일정한 형태의 데이터를 분해하고 원하는 형태로 조립하는 것을 파싱이라고 한다
  • JSON, XML 등 다양한 형식의 데이터를 파싱하는 기능을 제공한다
  • 해당 라이브러리를 이용하면 데이터의 종류가 많아지더라도 매 번 파싱하는 코드를 작성해줄 필요 없이 데이터와 클래스만 넘겨주면 된다

API, Library 어떻게 다른가?

  • 라이브러리는 재사용이 필요한 기능으로 반복적인 코드 작성을 업새기 위한, 어디서든 호출 가능한 코드의 집합
  • API는 응용 프로그램을 만드는데 필요한 연결 장치나 매개체 (컴포넌트간 규약)
  • 즉, 사용 목적에서 차이가 있다

Framework

  • 어떤한 목적을 달성하기 위해 복잡하게 얽혀있는 문제를 해결하기 위한 구조, 소프트웨어 개발에 있어 하나의 뼈대 역활
  • 프레임워크를 이용하면 일정형태의 틀을 가지고 원하는 결과물을 만들어낼 수 있다.

Spring Framework

  • 수동적이다
  • 비지니스 로직이 스프링 프레임워크에 의해 수동적으로 실행된다
  • 응용 프로그램의 제어권을 프레임워크가 가지고 있다

Library VS Framework

  • 응용 프로그램 흐름을 제어하는 제어권이 누구에게 있는가, 라이브러리와 프레임워크의 가장 큰 차이점이다
  • Library
    • 응용프로그램이 능동적으로 라이브러리를 사용
    • 즉, 제어권이 개발자에게 있다
  • Framework
    • 응용프로그램이 수동적으로 프레임워크에 의해 사용
    • 즉, 제어권이 프레임워크에게 있다

API, Library, Framework

  • API - 구현과는 독립적으로 다양한 컴포넌트 간에 정보를 주고 받기 위한 규약
  • Library - 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임, 개발자가 응용프로그램 흐름의 제어권을 가진다.
  • Framework - 소프트웨어 개발에 있어 하나의 뼈대 역할, 프레임워크가 응용프로그램 흐름의 제어권을 가진다.

© 2020. All rights reserved.

SIKSIK