개발을 하거나, 개발관련 강의를 듣거나 혹은 그냥 인터넷을 보다가도 API와 SDK는 자주 등장하게 된다. 들었던 내용과 쓰던 상황을 토대로 API는 이런거구나, SDK는 이런거구나 유추하며 써왔었기에 그 개념들을 한번 천천히 정리해 보려고 한다.
우리가 수의사 클리닉을 위한 모바일 앱을 만든다고 생각해보자. 이 앱은 접수원이 애완 동물이 클리닉에 들어올 때 사진을 찍을 수 있도록 하고, 앱은 시각적 인식 서비스와 통신한다(이 과정은 클라우드에서 실행된다).
<그림>
그리고 이 서비스가 동물의 이름과 파일을 반환하는 방식이다.
우리는 이과정을 어떻게 구현할수 있을까?
모바일 앱과 이 클라우드 기반 서비스간에 어떻게 통신할 수 있는 것일까?
이 과정을 도와주는 것이 바로 API 그리고 SDK이다.
API란 무엇일까?
API(Application Programming Interface)는 주로 통신에 관한 것이다.
즉, 나와는 다른 앱 또는 서비스와 통신 하기위한 정의 및 프로토콜의 집합체이다. 따라서 위의 예제에서 나의 앱과 클라우드상의 시각적 인식 서비스를 연결하는 다리가 바로 API인 것이다.
API의 주요 특징
•
Communication
서비스간 통신을 도와준다.
•
Abstraction
복잡한 논리들을 모두 추상화함으로써 필요한 데이터에 대한 접근을 걱정할 필요가 없다. 프로세스를 단순화 시켜준다.
•
Standard
API를 정의하는 방법 등에 대한 것들이 업계 표준이 되어 있다. 또한 SOAP, GraphQL, REST 등과 같이 널리 사용되는 형식이 있다.
API의 구성요소
Request (위 예제를 기반으로)
•
Operation
image와 데이터를 request해야하기 때문에 POST라는 method를 사용한다고 보면 된다. (PUT, Delete 등 다양한 HTTP method라고 생각할 수 있다)
•
Parameter(Optional)
파일 이름 등을 사용한다고 볼 수 있다.
•
End-Point
시각적 인식 서비스의 URL이라고 볼 수 있다.
Response
•
Raw-Data
JSON과 같은 원시 데이터 파일 일 수 있다.
•
End-Point
어플리케이션의 URL이라고 볼 수 있다.
그렇다면 개발을 진행할 때 이 API를 어떻게 불러오고 사용할 수 있는 것일까?
이때 SDK가 등장한다. 우리는 Request에 필요한 변수, 데이터 파싱 등 직접 처리할 필요 없이 SDK를 활용해 멋지고 간단하게 개발을 진행할 것이다.
SDK란 무엇일까?
SDK(Software Developement Kit)는 프로그램을 개발할때 도움을 주는 도구상자이다. 즉, API를 호출하는 코드라고 생각할 수 있다. 따라서 한 프로그래밍 언어에 특화되어 있을 수 있다(다양한 언어로 된 SDK가 존재하는 이유이다).
위의 예제에서는 어디서 SDK가 사용되는 것일까?
어플리케이션 안에 작은 SDK tool box를 배치하고 위에서의 모든 API request block을 실제로 활용 가능한 method를 호출하는 것이다. 예를들어 아래의 코드와 같다.
AnalyaeResponse response = visualRecognition.analyze("cat.jpeg").getResult();
label.setText(response.name);
Java
복사
직접 API를 위한 요청을 API양식에 맞게 작성할 필요 없이 SDK가 제공하는 method만으로 작업을 처리할 수 있는 것이다.
추가사항
1. REST API란?
REST(Representational State Transfer)