요즘 백엔드 개발자라면
거의 필수적으로 알고 있어야 할
API와 REST API에 대해 알아보고자 한다.
나도 아직 백엔드 취준생이나 마찬가지이기 때문에,
실무에서 접해봤다거나 직접 구현해보지는 않았고
일단 이론에 대해서만 정리하려고 한다.
이번 글은 API에 대해서만 작성하며,
아래 사이트와 유튜브에서 정보를 얻어 작성했다.
- API란 무엇이고, 기업은 왜 API를 신경 쓸까?
- API(애플리케이션 프로그래밍 인터페이스)란 - 개념, 기능, 장점
- UI와API
API?
API란 Application Programming Interface의 약자이다.
위 그림만 봐도 API가 어떤 역할을 하는 지
어렴풋이 감이 오는 것 같지만,
늘 그래왔듯 단어 하나씩 뜯어보자.
그런데 앞 두 단어 Application과 Programming은
이미 많이 보고 잘 알고 있는 단어들이기 때문에
상대적으로 생소한 Interface에 대해 알아보면
API가 어떤 녀석인지 느낌이 올 것 같다.
Interface
위키 백과에 따르면 아래와 같은 의미를 갖고 있다.
인터페이스(interface)는
서로 다른 두 개의 시스템, 장치 사이에서
정보나 신호를 주고받는 경우의 접점이나 경계면이다.
즉, 사용자가 기기를 쉽게 동작시키는데 도움을 주는 시스템을 의미한다.
위키는 읽을 때마다 참 말이나 단어의 조합이 어렵게 느껴진다.
좀 더 쉽게 풀어 쓰자면,
기계와 기계 혹은 기계와 사람, 소프트웨어와 소프트웨어 사이 등에서
정보를 교환하기 위한 수단이나 방법을 의미한다.
우린 이미 실생활에서 수많은 인터페이스를 다루는데,
두 가지 예를 생각해보자.
아침에 기상 후, 뉴스를 보기 위해 TV를 키려고 한다.
이때 필요한 것이 리모컨이고,
TV에게 명령을 내리는 리모컨과
명령받은대로 결과물을 출력해주는 TV 스크린은
(하드웨어적) 인터페이스이다.
그리고 무언가 검색을 하기 위해
스마트폰을 켜고 네이버 앱을 들어갔을 때 나오는 수많은 버튼들은
인간과 기계간의 (소프트웨어적) 인터페이스이다.
그런데 우리가 그러한 리모컨이나 화면의 버튼을 누를 때,
'내가 이걸 누르는 순간, 무슨 무슨 일이 벌어질거야'
생각하면서 내부의 동작 과정을 모두 알고 있던가?
아니다.
구현 방식을 알지 못해도,
서로 커뮤니케이션이 되는 기기 혹은 기능을 사용할 수 있는 것이 인터페이스이다.
추가적으로,
컴퓨터 관련 지식이 좀 있는 사람이라면
여기서 UI(User Interface)를 떠올릴 수 있다.
UI란 유저가 어떠한 시스템을 사용할 때
그 시스템에게 명령을 내릴 수 있는 인터페이스들을 말하는데,
예를 들어,
버튼들이 '얼마나 직관적으로 이해하기 쉽게 만들어졌는지',
'눈으로 볼 때 불필요한 정보는 많이 없는지' 등이 있다.
이러한 UI의 Interface 역시,
우리가 지금까지 주구장창 떠든 Interface이다.
종합
위 세 단어의 뜻을 알아본 결과,
'응용 프로그램에서 사용할 수 있는 인터페이스'를 API라고 하는 것 같다.
즉, 단순하게 말하면 API는 인터페이스이다.
확실치 않으니 API에 대한 위키 백과를 보자.
위키에서는 API를 아래처럼 정의하고 있다.
응용 프로그램에서 사용할 수 있도록,
운영 체제나 프로그래밍 언어가 제공하는 기능을
제어할 수 있게 만든 인터페이스를 뜻한다.
주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.
우리가 추측했던 API의 뜻과 나름 유사한 것 같다.
하지만 개인적으로는 아래 나무 위키의 API 정의가 잘 와닿았다.
프로그래밍에서,
프로그램을 작성하기 위한 일련의 부(sub) 프로그램, 프로토콜 등을 정의하여
상호 작용을 하기 위한 인터페이스 사양을 말한다.
이렇게 읽어보니 그동안 코드를 작성하며 썼던 라이브러리가 떠오르며
'라이브러리가 인터페이스인가?' 하는 생각이 든다.
신기하게도 나무위키에서 이 생각에 대한 답을 준다.
라이브러리와 종종 헷갈리곤 하는데,
구현 로직의 유무가 다르다.
API가 단순히 컴퓨터공학 분야의 개념이라면
라이브러리는 이러한 API들을 기반으로 개발자에게 기능을 제공할 수 있도록
실제 구현된 구현체라고 볼 수 있다.
그러니까,
무언가 기능을 만들 때
API는 해당 기능이 어떻게 작동하는지 등에 대해 알 수 있는 사양(명세, Specification)이고
라이브러리는 API를 기반으로 실제로 만들어진 구현(Implementation)이기 때문에,
API는 사양만을 정의한다.
(라이브러리 자체는 API 없이 존재할 수 있고,
Visual C++ Runtime Library, DirectX Runtime 등이 그러하다)
그래서 잘 설계된 API는 프로그램 개발을 보다 쉽게 해준다고 한다.
왜?
구현해야 할 기능들의 명세가 잘 설계되어 있으니깐.
우리가 레고나 가구 등을 조립할 때
설명서가 잘 적혀있으면 쉽게 조립하는 것처럼 말이다.
API와 라이브러리가 함께 제공되는 경우도 있는데,
이러한 것을 SDK(Software Development Kit)라고 한다.
SDK는 일반적으로 API, 라이브러리와 함께
프로그램을 개발하는데 필요한 여러 보조 프로그램을 뜻한다.
API (인증)키?
어떠한 서비스의 API를 사용하려고 웹 사이트에 들어가보면
인증키를 받으라고 하거나 입력하라는 것을 볼 수 있다.
외부에 데이터를 공개하는 회사의 입장에서
아무나 막 데이터를 빼서 임의로 사용하면 안되기 때문에
(인증)키라는 것을 만들어
해당 키를 발급받고 사용하는 유저만이 API를 사용할 수 있도록 하는 것이다.
API 비유
우리의 일상 생활에서 볼 수 있는 예시로
비유를 들어 API를 이해해보자.
API는 식당의 '점원'
위 그림만 봐도 뭘 말하려는지 딱 느낌 온다.
식당의 점원은 손님에게 메뉴판을 보여주고
받은 주문을 주방의 요리사들에게 넘겨주는데,
API가 그러한 역할을 한다.
API는 손님(프로그램)이 주문할 수 있게
메뉴(명령 목록)을 정리하고,
주문(명령)을 받으면 요리사(응용 프로그램)와 상호작용하여
요청된 메뉴(명령에 대한 값)를 전달한다.
즉, API는 리소스에 대한 접근 권한을 제공하고
보안과 제어를 유지할 수 있게 해주며,
접근 권한을 어떻게 / 누구에게 제공할지 여부만 결정하면 되는 것이다.
API 예시
Windows API & Web API
우리가 자주 사용하는 Windows 운영체제에도 API가 존재한다.
Microsoft의 Windows API 공식 문서에 들어가보면
Windows에 대한 상세 지식이 없어도
Windows에서 제공하는 기능을 사용할 수 있도록 하는 API들을 볼 수 있다.
그리고 다음 글에서 작성할 RESTful API와도
관련이 깊은 웹 API라는 것도 존재한다.
웹 API는 웹 애플리케이션 개발에서
다른 서비스에 요청을 보내고 응답을 받기 위해
정의된 명세(사양, Specification)를 일컫는다.
예를 들어,
블로그 API를 이용하면
블로그에 접속하지 않고도 다른 방법으로 글을 올릴 수 있다.
그 외에 우체국의 우편번호 API,
구글과 네이버의 지도 API 등 유용한 API들이 많으므로,
요즘은 홈페이지 구축이나 추가 개편 시
따로 추가로 개발하지 않고 이런 오픈 API를 가져와 사용하는 추세다.
도서 유통 회사 예시
도서를 유통하는 회사를 예로 들어
API에 대해 좀 더 이해해보고 이점을 간단하게 생각해보자.
이 도서 유통업체는 어떠한 어플리케이션을 만들었는데,
고객이 그 어플리케이션을 통해 서점 직원에게
특정 도서의 재고를 확인하도록 부탁하는 기능을 한다.
하지만 이와 같은 방식은
애플리케이션 개발 자체에도 많은 시간이 들지만,
플랫폼의 제약을 받을 수 있으며
지속적인 유지 관리가 필요하다.
따라서 어플리케이션 대신
재고 확인용 API를 만들어 외부에 제공하면
아래와 같은 여러 이점을 얻을 수 있다.
(1) 고객이 API를 통해 데이터에 접근하므로 한 곳에서만 재고 정보를 통합 관리하면 된다.
(2) API 작동에 문제가 없는 한, 도서 유통업체는 고객에게 영향을 미치지 않고
내부 시스템을 변경할 수 있다.
(3) 도서 유통업체의 개발자나 도서 판매자, 혹은 제 3자가
API를 이용하여 고객이 원하는 도서를 찾도록 도와주는 애플리케이션을 개발할 수 있으며
이는 매출을 늘리거나 기타 비즈니스 기회를 창출할 수도 있다.
API 역할
지금까지 API가 어떤 녀석인지 알아봤으니
정확히 어떤 역할을 하는 지에 대해 알아보자.
1. 서버와 DB에 대한 출입구 역할
DB에는 수천, 수만, 수억 건의 소중한 개인정보들이 담겨있는 경우가 많다.
아무나 이러한 DB에 접근할 수 있으면 안되기 때문에
API는 이를 방지하는 서버와 DB에 대한 출입구 역할을 하며
허용된 사람들에게만 접근성을 부여해준다.
2. 애플리케이션과 기기가 원활하게 통신할 수 있도록 함
애플리케이션, 즉 우리가 앱스토어나 플레이 스토어에서 다운로드하는
스마트폰 어플이나 컴퓨터 프로그램 등에 대해
API는 기기가 이러한 어플리케이션과 데이터를
원활히 주고받을 수 있도록 돕는 역할을 한다.
3. 모든 접속을 표준화함
말 그대로 API는 모든 접속을 표준화하기 때문에
기계 / 운영체제 등과 상관없이 누구나 동일하게 접근이 가능하다.
즉, 범용 플러그처럼 작동한다.
API 유형
기업이나 기관에서 만든 API들이
항상 외부로 공개되어 있는 것은 아니다.
외부 공개 범위에 따라 크게 아래 3가지 유형으로 나뉜다.
1. Private API
Private이라는 단어가 붙은 것처럼 내부 API를 뜻하며,
회사 개발자가 자체 제품과 서비스를 개선하기 위해
내부적으로 발행한 API이다.
따라서, 외부의 제 3자에게 노출되지 않는다.
2. Public API
개방형 API로, 모두에게 공개된다.
누구나 제한 없이 API를 사용할 수 있다.
3. Partner API
기업이 데이터 공유에 동의하는 특정인들만 사용할 수 있는 API이다.
비즈니스 관계에서 사용되는 편이며,
종종 파트너 회사 간에 소프트웨어를 통합하기 위해 사용된다.
API 장점
1. 개발자의 작업 능률 상승
Private API 같은 경우,
개발자들의 어플리케이션 코드 작성 방법을 표준화함으로써,
간소화되고 빠른 프로세스 처리를 가능하게 한다.
또한, 소프트웨어를 통합하고자 할 때
개발자 간의 협업을 용이하게 만들 수 있다.
2. 풍부한 사용자 경험 창출 & 사용자 증가
Public API와 Partner API를 사용하면,
기업은 타사 데이터를 활용하여 브랜드 인지도를 높일 수 있을 뿐만 아니라,
고객 데이터베이스를 확장하여 전환율까지 높일 수 있다.
예를 들어,
이커머스 기업에게 온라인 결제는 아주 중요한 요소인데
직접 온라인 결제 시스템을 구축하는 대신
타 회사의 검증된 결제 API를 사용하면
안전한 온라인 결제 시스템을 빠르게 구축할 수 있다.
다른 예시로,
소매 체인점을 운영하는 기업에서
본인들의 홈페이지에 전국 체인점 주소를 쭉 나열하는 것보다
Google Maps Embed API와 같은 것을 사용하여
단순히 위치만 알아보는 것에 그치지 않고
더 많은 정보를 얻게 하여 사용자 유치 확률을 높일 수 있다.
왜 API를 사용?
1. 간편하고 빠름
A라는 회사에서 보유한 상품들의 정보를
Z라는 회사에 보내야 한다고 가정하자.
이때, 세가지 정도의 방법을 생각할 수 있다.
(1) 이메일, 웹하드, 외장하드 등의 수동적인 방법으로 A에게 정보를 얻어와
같은 수동적인 방법으로 Z에게 정보를 전달한다.
-> A가 가진 정보가 바뀔 때마다 Z가 실시간으로 받아올 수가 없다, 그리고 매우 귀찮다.
(2) A의 DB 접근 권한을 얻는다.
-> 휴대폰 잠금 비밀 번호나 패턴을 알려주는 것과 다름없다.
(3) API를 사용한다.
-> 앞서 언급된 두 방법의 단점을 모두 커버할 수 있다.
2. 사용자 이탈율 저하
API를 제공하려면,
별도의 규격을 만들어야 하고
그 규격에 대한 설명 문서도 만들어야 하는 등
귀찮은 일이 한두가지가 아니다.
그런데도 왜 수많은 기업들은 API를 만들고 제공할까?
구글, 페이스북, 네이버, 카카오톡 등
대형 플랫폼 대부분이 제공하는
간편 로그인 API를 예로 들어 알아보자.
간편 로그인 API의 목적은
사용자가 여러 사이트를 하나씩 가입하다보면
가입할 때마다 똑같은 정보를 입력해야 하는 번거로움을 줄여
간편하게 회원 가입을 할 수 있도록 하는 데에 있다.
구글 간편 로그인을 이용하여
수십 개의 사이트에 회원 가입을 했다고 가정하자.
구글 아이디를 지우는 순간,
내가 가입했던 수십 개의 사이트에서도 자동으로 회원 탈퇴가 되며
그동안 쌓아온 포인트나 주문 내역 등이 모두 사라지게 된다.
그렇게 본인들의 플랫폼 이탈율을 현저히 줄일 수 있기 때문에
최근 거의 모든 대형 플랫폼은 간편 로그인을 제공하고 있다.
다음은 REST API에 대해 알아본다.
끝!