product manager

API란 무엇인가? [코드스테이츠 PMB 10기]

오랑체리 2022. 3. 11. 01:22

API는 뭘까?

API란 Application Programming Interface의 줄임말로 ‘어플리케이션'을 ‘프로그래밍’ 하는데 필요한 ‘인터페이스’이다.
인터페이스란, 상호 정보 소통을 돕기 위해 경계에 존재하는 시스템을 의미한다. 예를 들어 은행 창구의 직원은 고객이 은행에 돈을 넣고 빼는 과정을 돕기 위해 고객과 은행의 경계에서 해당 업무를 처리하는 역할을 하는 것과 유사하다.

출처 : API란? 비개발자가 알기 쉽게 설명해드립니다! - wishket


다시 한번 쉬운 예시를 들어보겠다. 예를 들어 내가 레스토랑에 있다고 가정해보자. 그럼 나는 점원이 가져다준 메뉴판을 보면서 먹음직스러운 스테이크를 고른다. 그리고 점원은 주문을 받아 요리사에 요청을 한다. 그러면 요리사는 정성껏 스테이크를 만들어 점원에게 주고, 나는 점원이 가져다준 맛있는 음식을 먹는다.


여기서 점원의 역할을 한 번 살펴보자. 점원은 손님에게 메뉴를 알려주고, 주방에 주문받은 요리를 요청한다. 그다음 주방에서 완성된 요리를 손님께 다시 전달한다. 이와 같이 API는 점원과 같은 역할을 하는 것이다. API는 손님(프로그램)이 주문할 수 있게 메뉴(명령 목록)를 정리하고, 주문(명령)을 받으면 요리사(응용프로그램)와 상호작용하여 요청된 메뉴(명령에 대한 값)를 전달한다. 쉽게 말해, API는 프로그램들이 서로 상호작용하는 것을 도와주는 매개체로 볼 수 있다.

출처 : API란? 비개발자가 알기 쉽게 설명해드립니다! - wishket


IT 서비스 내에서 정보의 소통이 일어나는 곳은 서버와 클라이언트 간이 될 것이다. 서버와 클라이언트가 서로 정보를 어떻게 주고받을지에 대해 API의 형태로 미리 정의하고, 이를 바탕으로 프론트엔드와 백엔드 개발을 진행하는 것이 일반적이다. 웹 기반 서비스의 경우, 웹 주소 형식을 통해 정보를 요청하고 전달받는 방식을 주로 사용한다.


그러나 애플리케이션 분리 및 통합, 다양한 클라이언트의 등장 등 멀티 플랫폼에 대한 지원을 위해 서비스 자원에 대한 아키텍처를 세우고 이용하는 방법을 모색한 결과, REST에 관심을 가지게 된다. 예를 들어 모바일 애플리케이션의 경우 작은 변화에도 html을 계속 받으려니 데이터 낭비가 심했다. 그래서 바뀌는 부분만을 적용하기 위해 필요한 데이터만 주고받으려고 REST API가 나오게 되었다.(그로 인해 데이터 소모량이 줄어들었다.) 또한 하나의 REST API 서버를 만듦으로써 웹브라우저만이 아니라 모바일 애플리케이션까지 담당할 수 있게 되었다. (필요한 데이터만 보내면 되니까) 또한 서버도 요청한 데이터만을 보내주면 되기 때문에 가벼워지고 유지보수성이 좋아졌다.



REST API & RESTful API

REST API는 REST를 기반으로 서비스 API를 구현한 것이다. 여기서 REST는 Representational State Transfer의 약자인데, 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것들을 의미한다. HTTP URL(Uniform Resource Identifier)을 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다. 쉽게 말해서, 자원(HTTP URI로 정의됨)을 어떻게 하겠다(GET, POST, PUT, PATCH, DELETE 등)를 구조적으로 깔끔하게 표현하는 방법이다. 그리고 RESTFUL APIREST API 설계 가이드를 따라 API를 만든 것을 말한다.

CRUD Operation

C : Create(생성) : POST
R : Read(조회) : GET
U : Update(변경) : PUT(전체) / PATCH(일부)
D : Delete(삭제) : DELETE
REST 구성

1. 자원(Resource) - URI
2. 행위(Verb) - HTTP Method(POST, GET, PUT, DELETE)
3. 표현(Representations)


예를 들어 '휴지'라는 이름을 가진 강아지 정보를 생성합니다'라는 HTTP 요청이 있을 때, REST 형태로 표현하면 다음과 같다.

  1. 자원 - 강아지 정보라는 자원을 (Resource)
  2. 행위 - 생성합니다. (Verb)
  3. 표현 - 그 이름은 휴지 (Representations)
POST http://mypet/pets
{
"pets":{ "name": "휴지"
}
}


어떤 것을 생성한다 (Create)의 의미를 가진 HTTP POST 요청,
생성하려 하는 대상인 강아지라는 리소스는 http://mypet/pets라는 URI,
생성하고자 하는 정보인 강아지의 이름은 JSON 방식으로 제공하였다.


Open API

그리고 위의 과정을 거쳐 잘 설계한 API를 오픈해 제공하는 것을 오픈 API라고 한다. 페이스북이나, 네이버, 카카오톡과 같은 대형 플랫폼에서는 대부분 간편 로그인 API 정보를 제공하고 있다. 간편 로그인 API의 목적은 사용자가 여러 사이트를 하나식 가입하다 보면, 너무 많은 사이트에 가입해야 하는 단점이 있으니, 누구나 사용하고 있는 대형 플랫폼의 가입정보를 공유함으로써 간편하게 회원가입을 할 수 있도록 설계된 API이다.

만약 카카오톡 간편 로그인 기능을 통해 여러 사이트를 가입했다고 가정해보자. 그리고 카카오톡이 쓰기 싫어지고, 탈퇴하고 싶은 마음이 생겼다 하더라도 카카오톡을 탈퇴하는 순간 카카오톡을 통해 가입했던 수많은 사이트 또한 포기해야 되는 상황이 발생하게 된다.

즉, 간편 로그인 기능을 제공함으로써 플랫폼 이탈률을 현저히 줄일 수 있기 때문에 대형 플랫폼들은 간편 로그인 기능을 제공하고 있다. 공유 경제 시대가 흐르면서 정보를 독점하는 것보다 공유함으로써 더 많은 이익을 가져갈 수 있는 생태계가 만들어지고 있으며, 이러한 과정에서 다양한 오픈 API가 제공되고 있다.
이와 같이 메타 서비스를 제공하는 대기업들은 시장 확대를 목적으로 오픈 API를 운영하거나 공공의 목적으로 비영리기관에서 무료로 API를 제공하는 경우도 있다.

 

Open API 찾아보기

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

예시로 카카오톡 메시지 "나에게 보내기" REST API를 살펴보았다. 

 

 

나에게 보내기 API는 Request - Response - Sample 순서로 설명되어 있었다. 먼저 Request를 확인해보자. 

 

 

URL 부분은 POST, HOST, Authorization에 대해 설명하고 있는데, Request 요청 방식으로 POST 방식을 사용하고 있음을 알 수 있다.

 

 

Response는 응답을 의미한다.

요청에 대한 상태는 HTTP의 상태 코드(Status code) 에러에 대한 정보를 담은 에러 코드(Error code)로 나뉜다.  

 

요청 성공 시
요청 실패 시

 

요청이 성공하면 상태 코드 200과 함께 요청에 대한 응답 바디(response body)가 반환되고, 요청이 실패하면 code와 msg로 이루어진 에러 코드가 반환된다. 

 


HTTP의 상태 코드를 확인하여 에러가 발생했을 때마다 원인을 파악하고 수정할 수 있다.


그럼 이번엔 "친구에게 보내기" REST API를 살펴보자.


URL 부분은 POST, HOST, Authorization에 대해 설명하고 있는데, Request 요청 방식으로 POST 방식을 사용하고 있음을 알 수 있다. 그리고 친구에게 메시지 보내기 요청 시, 친구 목록 가져오기 API의 응답으로 받은 uuidreceiver_uuids 파라미터에 전달한다. 또한 한 번에 최대 5명의 친구에게 메시지를 보낼 수 있다.


Sample Response를 살펴보자.
친구에게 보내기 요청이 성공하면 상태 코드 200과 함께 응답 바디(response body)가 반환되고, 요청이 실패하면 code와 msg로 이루어진 에러 코드가 반환된다.


샘플 응답에서 나온 에러 코드 -532를 확인해보니, 에러의 원인은 특정 앱에서 보내는 이가 받는 사람 관계없이 하루 동안 보낼 수 있는 쿼터를 초과한 경우임을 알 수 있었다.




이번 과제를 통해 API에 대해 조금이나마 이해를 할 수 있던 시간이었다. PM이 되면 개발 업무를 이해하고, 개발자와 진행 상황을 공유하고 조율을 해나가야 하는 만큼 개발적인 지식은 필수인 것 같다. 어렵긴 하지만 깊이 배워보고 싶다..!





참고자료
Kakao Developers
REST란? REST API 와 RESTful API의 차이점? :: 슬기로운 개발생활😃 (tistory.com)
API란? 비개발자가 알기 쉽게 설명해드립니다! - wishket
API, REST API, RESTful API 개념정리 (velog.io)
REST API란 무엇인가? (tistory.com)
REST와 REST API란? (velog.io)
REST API #1 - 이해하기 :: 키위남 (kiwinam.com)
카카오 OpenAPI 활용 - 나에게 카톡 메시지 보내기 (tistory.com)