[코드스테이츠 PMB 09] API・RESTful API・OPEN API
오늘은 API와 RESTful API 그리고 OPEN API에 대해 알아보겠습니다.
• API
• RESTful API
• OPEN API
- 카카오
API is a set of programming code that enables data transmission between one software product and another
API(Application Programming Interface)란 어플리케이션을 프로그래밍하기 위해 필요한 인터페이스 입니다. 컴퓨터와 컴퓨터 혹은 프로그램과 프로그램 사이를 연결하는 장치, 시스템을 의미합니다. API를 구성하는 단어들을 살펴 보겠습니다.
• 어플리케이션은 응용 소프트웨어라고도 하며, 운영체제(OS)에서 실행되는 모든 소프트웨어를 의미합니다.
• 인터페이스란 쉽게 말해 상호작용하는 규칙 입니다.
단어들을 합쳐서 해석하면, API는 응용 소프트웨어에서 사용되는 상호작용 규칙이라고 말할 수 있습니다. API는 컴퓨터나 프로그램 사이 정보를 주고 받을 때 중간에서 상호작용(소통)을 돕는 역할을 담당하죠.
구체적으로 돕는 방법은 코드를 통해서 입니다. 정보 요청과 응답이 발생했을 때 해당 정보를 어떻게 주고 받을지 코드로 정의함으로써 컴퓨터나 프로그램 간 상호작용을 돕습니다. 예를 들어, 모바일 앱(App)에서 어떤 기능을 실행했을 때 미리 정해진 정보나 이벤트가 작동하게 되죠.
• 장점
1. 자동화 : 직접 구현하지 않아도 관련 내용을 자동으로 생성, 처리 가능
2. 확장성 : 확장에 용이한 설계 구조 / 타 서비스와의 연계
3. 유연성 : 데이터 수집, 전달하는 데 유연한 환경 구축
API는 정의된 규칙이기 때문에 개발자가 직접 정의할 수도 있습니다. 다만, 수많은 규칙들이 존재하고, 서로 상이하다면 정보 교환이 어려워지겠죠. 그래서 규칙을 통일하게 되었고, 이때 만든 통일된 규칙이 Rest API입니다.
REST 아키텍처 스타일(설계규칙)을 준수하며 설계된 API를 RESTful API라고 합니다. 그렇다면 REST는 무엇일까요?
• 정의 : 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일로서 네트워크에서 클라이언트와 서버 간 통신 방식 중 하나입니다. 즉, REST는 자원을 이름(자원의 표현)으로 구분해 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미합니다.
자원 : 해당 소프트웨어가 관리하는 모든 것 (문서, 그림, 데이터, 해당 소프트웨어 등)
표현 : 자원을 표현하기 위한 이름 (DB의 학생 정보가 자원이면, 'student'를 자원 표현으로 정함)
상태 전달 : 데이터가 요청되는 시점에 자원의 상태를 전달한다 (JSON 혹은 XML을 통해 데이터를 주고 받는 것이 일반적
** 출처 : <REST란? REST API 와 RESTful API의 차이점?> [슬기로운 개발생활]
• 구성 : 어떤 자원에 대해 CRUD(Create, Read, Update, Delete) 연산을 수행하기 위해 URI(Resource)로 GET, POST 등의 방식(Method)을 사용하여 요청을 보내며, 요청을 위한 자원은 특정한 형태(Representation Resource)로 표현됩니다.
① 자원 (Resource) ➜ URI
(URI: 자원 식별자 ⊃ URL: 자원 위치)
② 행위 (Verb) ➜ Method : GET, POST, PUT, PATCH, DELETE (Method는 CRUD 연산을 위해 사용)
③ 표현 ➜ Representation Resource
• 6가지 특징 : REST는 아래와 같은 특징을 갖습니다.
1. Server-Client (서버-클라이언트 구조)
2. Stateless (무상태)
3. Cacheable (캐시 처리 기능)
4. Layered System (계층 구조)
5. Uniform Interface (인터페이스 일관성)
6. Self-Descriptiveness (자체 표현)
이런 REST 아키텍처 스타일을 준수하여 설계된 API를 RESTful API라고 합니다.
Open API는 누구나 사용할 수 있도록 공개된 API 입니다. 즉, API 중 플랫폼 기능, 콘텐츠를 외부에서 웹 프로토콜(HTTP)로 호출하여 사용할 수 있게 개방한 API를 의미합니다.
처음부터 모든 것을 개발하려면 시간과 비용이 많이 들겠지만 Open API를 사용하면 유용한 기능들을 빠르게 구현할 수 있는 장점이 있습니다. Open API를 사용하면, 서비스 사용자는 키를 발급받을 수 있습니다. 해당 키에 따라 할당량을 부여받고, 할당량을 초과할 경우 과금되기도 해요.
API 중에서 플랫폼의 기능 또는 콘텐츠를 외부에서 웹 프로토콜(HTTP)로 호출해 사용할 수 있게 개방(open)한 API를 의미합니다.
Open API처럼 API를 공개하는 이유는 무엇일까요? 정부와 공공기관은 공적인 목적으로 활용할 수 있는 Open API를 제공합니다. 공적인 목적의 활용은 사회 전체에 긍정적인 영향을 줄 수 있습니다. 기업의 경우는 공적인 목적과 더불어 다른 목적도 갖습니다. 기업에서 Open API를 제공하면 해당 서비스의 영향력을 확대시킬 수 있는 밑거름이 됩니다. 간편 소셜 로그인으로 많이 활용하는 카카오, 네이버, 페이스북, 구글 API는 쉽고, 빠르게 개발할 수 있도록 도와주지만 그만큼 이러한 기업들의 영향력이 커진다고 볼 수 있습니다.
카카오 kakao
네이버 Naver
구글 Google
스포티파이 Spotify
공공 데이터 포털 : 공공기관이 생성・취득하여 관리하고 있는 공공데이터 제공
깃허브 Github
Public API
1에서 살펴 본 오픈 API 중 하나(이상) 를(을) 선정해서 제공하는 기능과 구조를 살펴보고, 간단하게 요약해 정리해 봅니다.
(선택) 기능 하나를 선정해 API의 역할, 입출력 구조를 정리
카카오에서 제공하는 Open API에 대해 살펴보겠습니다.
카카오의 경우 세 가지 카테고리 안에 Open API를 관리하고 있습니다. 각각의 카테고리 안에는 다양한 API들이 있습니다.
① 소셜통합 API ➜ 카카오 로그인 / 카카오 소셜 / 메시지 / 지도・로컬 / 카카오내비 / 카카오스토리
② 비즈니스 API ➜ 카카오싱크 / 카카오톡 채널 / 카카오페이 / 카카오모먼트 / 카카오 키워드광고 / 푸시 알림
③ 인공지능 API ➜ 검색 / 음성 / 비전 / 포즈 / 번역
이중 카카오 로그인을 알아보겠습니다.
정의
카카오 로그인을 사용하면 직접 이용자 정보(ID, 비밀번호)를 입력받고 검증하는 대신 카카오 로그인을 통해 사용자를 인증하고 회원 정보를 수집할 수 있습니다.
기능
카카오계정과 앱을 연결하고 토큰을 발급받아 카카오 API를 사용할 수 있도록 하는 기능입니다. 토큰(Token)은 사용자를 인증하고 API 호출권한을 부여하거나, 인증상태를 갱신하는 역할을 합니다. 카카오 로그인 API에서 제공하는 세부 기능은 아래와 같습니다.
위 기능 표에서 볼 수 있듯이 카카오 로그인 API가 제공하지 않는 가입 및 탈퇴는 서비스에서 직접 구현해야 합니다. 카카오 로그인 API를 통해 회원정보를 저장하거나 삭제할 수 없는 건 카카오가 서비스 데이터에 접근하지 않기 때문입니다.
설계
카카오 로그인은 Kakao SDK for Android, iOS, JavaScript와 REST API로 제공되며 OAuth 2.0(표준 인증 방법) 기반입니다. API의 지원 범위는 다음과 같습니다.
카카오 로그인과 관련된 기능들은 다음의 과정을 거쳐 작동합니다.
1. 앱에서 카카오 로그인 버튼 클릭
2. [카카오톡으로 로그인] 선택 ➜ 카카오톡 실행 또는 실행 중인 카카오톡으로 연결
[다른 카카오계정으로 로그인] 선택 ➜ 직접 계정 정보를 입력하는 화면 출력
카카오톡 미설치 or PC웹 환경 ➜ 직접 계정 정보 입력하여 카카오계정으로 로그인
3. '카카오톡으로 간편로그인'한 경우, 카카오톡에 연결된 카카오계정의 자격정보(Credentials)를 통해 사용자 인식. 직접 카카오계정을 입력해 로그인 한 경우 해당 계정의 자격정보로 인식
4. 자격정보가 올바르다면 카카오 로그인 동의 화면을 통해 사용자로부터 사용자 정보 및 기능 활용 동의 받음
5. 사용자가 필수 항목에 동의하고 로그인을 요청하면 인가 코드(Authorization Code)가 발급. 이 코드는 앱 정보의 Redirect URI에 전달
6. 앱은 전달 받은 인가 코드를 기반으로 토큰을 요청하고 받음
*[그림1]에서 카카오 서버는 2개로 존재합니다. 호스트 인증서버와 API 서버. 호스트 인증서버는 카카오 로그인 담당하고, API 서버는 사용자 정보 가져오기 등 다른 기능을 요청받고 작업을 수행합니다.
이번 글을 통해 API와 RESTful API 그리고 OPEN API에 대해 알아보았습니다. 데이터를 주고 받기 위해 만들어진 API가 안정성・확장성・편의성을 높이는 방향으로 발전해온 모습이 인상깊었습니다. 이번 글을 통해 개략적이지만 정리해볼 수 있어 좋았습니다.