웹 서버 API 서버 차이 - web seobeo API seobeo chai

기상청 날씨정보 API, 증권 API, 지도 API 등등 막연하게 API란 단어를 들어왔다. API를 가져다 써, API로 개발한다 등등 개념은 제대로 모르며 사용 해왔기에 이번엔 API에 대해 개념적으로 정리해보고자 한다. API의 마지막 알파벳 i가 뜻하고 있는 인터페이스 개념부터 살펴보자.

*인터페이스(Interface): 사물과 인간 사이의 경계에서 상호 간의 소통을 위해 만들어진 물리적 매개체나 프로토콜을 말한다. 예를 들어 TV 리모콘 전원 버튼은 인터페이스다. 사람이 리모콘 버튼을 눌러 TV가 켜지도록 연결하는 매개체이기 때문이다. 
웹 서버 API 서버 차이 - web seobeo API seobeo chai
인간과 사물 사이의 인터페이스

API(Application Programming Interface)

애플리케이션(응용프로그램)에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 즉, 애플리케이션이 어떤 프로그램이 제공하는 기능을 사용할 수 있게 만든 매개체다. 

컴퓨터와 인간을 연결시키는 사용자 인터페이스(UI)와 반대로, API는 컴퓨터나 소프트웨어를 서로 연결한다.

서버는 프로그램에게 자신이 제공하고자 하는 데이터나 기능을 제어할 수 있는 API로 만들면, 접근 권한이 있는 프로그래머나 프로그램이 API를 통해 서버에서 제공하는 데이터를 요청해서 사용할 수 있게 된다.

예로 날씨 정보 앱을 만들려면, 기상청(서버)이 제공하는 API에 원하는 날씨 정보를 요청해 데이터를 받은 다음 UI 형태로를 사용자에게 날씨 정보를 제공할 수 있다. 더 자세히는 기상청이 DB서버에 날씨 정보를 보관해놓고, 다른 응용 프로그램들이 DB서버에서 날씨 데이터를 조회하고 조작할 수 있도록 API를 미리 개발해놓는다.  

API의 한 가지 목적은 서버 시스템이 동작하는 방식에 관한 내부의 프로세스를 숨기는 것으로, 내부의 세세한 부분이 나중에 변경되더라도 프로그래머가 유용하게 사용할 수 있고 일정하게 관리할 수 있는 부분들만 노출시킨다. 

웹 서버 API 서버 차이 - web seobeo API seobeo chai

우리가 흔히 쓰는 배달의 민족 앱을 통해 API를 생각해보자.

배달의 민족은 다양한 정보를 조회하고 조작할 수 있도록 다양한 API를 미리 개발해놨다. 

ex. 가게목록 조회 API, 주문 API, 메뉴목록 API 등등

그럼 갤럭시S10에서 배달의 민족 어플리케이션을 실행하면, 이 앱이 메뉴목록 API를 호출해 서버에서 데이터를 가져와사용자에게 메뉴 목록 정보를 보여줄 수 있게 되는 것이다.

그럼 HTTP API란?

HTTP를 사용하여 프로그램끼리 소통하는 API를 말한다. 보통 우리가 흔히 보는 OPEN API, facebook API, kakao API 등의 대부분 API는 HTTP라는 통신 규칙으로 소통하는 API이다.

🔎 HTTP를 사용하지 않는 API도 있나?

웹 서버 API 서버 차이 - web seobeo API seobeo chai

(참조: 짐코딩 API란 무엇인가? https://www.youtube.com/watch?v=Jg3FFBLyhK0)

미세먼지 측정기에서 미세먼지 농도 값을 읽어와서 공기가 안 좋으면, 자동으로 창문을 개방하는 IoT어플리케이션을 개발하고 싶다고 하자. 미세먼지 측정기와 스마트 창문이 IoT 애플리케이션과 통신(소통)할 수 있는 API가 있어야 한다.
이때 사용하는 소통 방법은 HTTP통신이 아닌 저사양/저전력 환경에 적합한 MQTT, CoAP프로콜을 사용해야 한다. 

🔎 추가: API는 통신 프로토콜 레벨이 아닌, Class나 Function와 같은 소스코드 레벨이 될 수도 있다.

REST API란?

위키피디아:

REST(Representational State Transfer)네트워크 아키텍처 스타일이다. 여기서 '네트워크 아키텍처 스타일'란 네트워크 자원을 정의하고 처리하는 방법 전반을 일컫는다.

2000년도에 로이 필딩 (Roy Fielding)의 박사학위 논문에서 최초로 소개되었다. 로이 필딩은 HTTP의 주요 저자 중 한 사람으로 그 당시 웹(HTTP) 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습에 안타까워하며 HTTP의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표했다.

즉, REST는 HTTP를 잘 활용하기 위한 원칙이라고 할 수 있고
REST API는 이 원칙을 준수해 만든 API이다.

그럼 HTTP를 잘 활용하기 위한 원칙은 무엇인가?

Representational State Transfer
자원의 표현으로 상태를 전달하는 것

URI로 자원을 표현하는 데에 집중하고, 자원의 상태(행위)에 대한 정의는 HTTP METHOD로 하는 것이 REST한 API를 설계하는 중심 규칙이다.

그럼 RESTful하게 설계하는 것의 중심 규칙인 두가지에 대해 살펴보자.

  • URI로 자원(리소스)을 표현해야 한다.
  • 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현된다.
 GET /members/delete/1

위와 같은 방식은 REST를 제대로 적용하지 않은 URI이다. URI는 자원을 표현하는데 중점을 두어야 한다. delete와 같은 행위에 대한 표현이 들어가서는 안된다.

위의 잘못된 URI를 HTTP Method를 통해 수정해 보면 아래와 같이 수정할 수 있다.

DELETE /members/1

회원정보를 가져오는 행위는 GET, 회원 추가 시의 행위를 표현하고자 할 때는 POST METHOD를 사용하여 표현한다.

회원정보를 가져오는 URI

GET /members/show/1     (x)
GET /members/1          (o)

회원을 추가할 때

GET /members/insert/2 (x)  - GET 메서드는 리소스 생성에 맞지 않다.
POST /members/2       (o)

더 구체적으로 자원(Resource)의 표현(Represent)은 document, collection, store, controller 4가지 방식으로 나눌 수 있다. 자원은 URI로 표현되며 동사(자원의 행위)를 사용하지 않는다.

  • document는 1개의 객체를 나타내는 것으로 Datbase의 record와 유사한 개념을 가진다. REST에서는 리소스 집합(collection)중 하나로 표현되며 일반적으로 단수 명사로 collection의 뒤에 /를 통해 구분된다.
  • collection은 Resource(document)들의 집합입니다. 사용자(Clients)들은 일반적으로 새로운 Resource를 추가하거나 단일 Resource가 아닌 다량의 Resource가 필요할 때 collection Resource를 호출합니다. 일반적으로 복수 명사를 사용한다.
http://restapi.example.com/sports/soccer

위 URI를 보면 sports라는 컬렉션과 soccer라는 도큐먼트로 표현되고 있다. 좀 더 예를 들어보자면

http://restapi.example.com/sports/soccer/players/13

sports, players 컬렉션과 soccer, 13(13번인 선수)를 의미하는 도큐먼트로 URI가 이루어지게 되는 것이다.


우아한형제들 김영한 개발이사님 답변에 따르면,

HTTP API와 REST API는 사실 거의 같은 의미로 사용하고 있다고 하셨다.

정확한 차이점으로 REST API는 HTTP 프로토콜을 따르면서 아래의 4가지 가이드 원칙을 지켜야 한다.

1) 자원의 식별

2) 메세지를 통한 리소스 조작

3) 자기서술적 메세지

4) 애플리케이션의 상태에 대한 엔진으로서 하이퍼미디어(HATEOAS)

이러한 제약 조건들을 완벽하게 지키면서 개발하는 것을 RESTful API라고 하는데 실무에서는 이런 방법으로 개발하는 것은 현실적으로 어렵고 개발비용 대비 효과가 있는 것도 아니다. (4번째 원칙이 특히나 구현하기 어렵다.)

그런데 이미 많은 사람들이 이 조건들을 지키지 않아도 REST API라고 하기 때문에 HTTP API와 같은 의미로 사용하고 있다고 한다. 하지만 위 제약 조건들을 모두 지켜야 REST API라고 말할 수 있다.

참고:

https://ko.wikipedia.org/wiki/API

API - 위키백과, 우리 모두의 백과사전

API(Application Programming Interface 애플리케이션 프로그래밍 인터페이스[*], 응용 프로그램 프로그래밍 인터페이스)는 컴퓨터나 컴퓨터 프로그램 사이의 연결이다. 일종의 소프트웨어 인터페이스이며

ko.wikipedia.org

https://ko.wikipedia.org/wiki/REST

REST - 위키백과, 우리 모두의 백과사전

대한민국의 힙합 음악가에 대해서는 R-EST 문서를 참고하십시오. REST(Representational State Transfer)는 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이다. 이

ko.wikipedia.org

웹 서버 API 서버 차이 - web seobeo API seobeo chai

https://meetup.toast.com/posts/92

REST API 제대로 알고 사용하기 : NHN Cloud Meetup

REST API 제대로 알고 사용하기

meetup.toast.com

웹 서버 API 서버 차이 - web seobeo API seobeo chai