Search

API

API의 이론적 개념

API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.

먼저 UI는 뭘까?

일단 인터페이스가 뭔지 알아보자. UI(User Interface)는 사용자와 기계나 시스템 같은 사물이 소통하는데 도움을 주는 매개체다.
가장 많은 예시로 드는 것이 스마트폰의 홈 버튼이나 전원 버튼이다. 보통 우리는 바탕화면과 시작 메뉴에 있는 아이콘들을 더블 클릭하여 응용 프로그램들을 실행한다. 이 모든 것들이 GUI(Graphic User Interface)의 일부다. GUI가 없다면 끔찍한 CLI를 써야할 것이다. 하지만 CLI도 역시 인터페이스이기 때문에 이것으로 파일 시스템에 접근하거나 프로그래밍을 하는 등의 일을 할 수 있다. 하지만 여전히 사용자들에게 불편한 것은 사실이다.
이렇게, UI, GUI, CLI의 공통점은 모두 어떤 사물(스마트폰, 컴퓨터, 인터넷 등)과 사용자 사이를 이어주는 다리 역할을 한다는 점이다.
한 발 더 나아가 API도 마찬가지이다. API는 프로그램과 프로그램 간 다리가 되어준다. 더 깊이있게 이해해보자.

API 개념과 장점

흔히 API를 레스토랑에 빗대어 표현하기도 한다. 손님(내가 만드는 프로그램)이 자리에 앉아 웨이터(API)에게 주문을 한다. 그럼 웨이터는 주문 내역을 주방(API 제공자. 기상청, 공공포탈 등)에 갖다준다. 주방에서 요리를 해 웨이터에게 주면 웨이터가 다시 손님에게 음식을 가져다준다. 즉, 웨이터가 매개체의 역할을 하는 것이다.
여기서 손님은 주방에서 무슨 일이 일어나는지 잘 모른다. 대개는 관심도 없으며 관심을 가질 필요도 딱히 없다. 이것이 API의 장점이다. 내가 가져다쓰려는 API의 기능을 어떻게 구현하는지 몰라도 되고 난 그저 API가 갖다주는 걸 사용만 하면 된다.
즉, 시간과 노력을 동시에 아낄 수 있다. 이처럼 API는 처음부터 개발하거나 유지 보수할 필요가 없는 외부 데이터와 기능에 접속할 수 있게 해준다.
예를 들어 내가 동대문에서 옷을 떼다 온라인으로 팔려고 한다. 그런데 내가 결제 시스템을 알 필요가 있을까? 물론 결제 시스템을 직접 만들 수도 있겠지만 시간도 오래 걸리고 정작 옷을 파는 본업에 집중할 시간이 없을 것이다. 게다가 오류가 난다면 고쳐야하는 시간도 들 것이다. 이런 상황이라면 결제 시스템 API를 제공자에게 받아서 내 사이트에 넣는 것이 훨씬 현명할 것이다.

API는 문서 공개 없으면 쓸 수 없다

API는 프로그램과 프로그램 간 다리, 프로그램을 위한 인터페이스다. 조금 더 자세하게 설명하자면 데이터를 주고 받기 위한 방법과 그 규격을 뜻한다고도 할 수 있다. 무슨 데이터? 환율 정보, 미세먼지 정보, 날씨 정보가 바로 그것이다.
API는 public, protected, private API 등으로 나뉘는데 public은 우리가 다 알고 쓰는 공공 포탈 API다. 공공 포탈이 아니더라도 개발자 등록을 하고 키를 받아서 얼마간 무료로 쓸 수 있는 건 거의 다 public이라고 보면 된다. 이에 반해 private은 API 제공자가 API를 공개하지 않은 것이다. 즉, 사용법을 알려주지 않아서 쓸 수가 없어서 개발자가 그 제공자의 API를 쓸 수 없다.
API 문서가 바로 이 사용법과 규격을 제공하는 문서다. 이 사용법이 제공되어 있지 않으면 private이다. 보통 API 제공자들은 DB, 기능을 모듈화해서 인증받은 사용자(개발자 키가 있는 사람들)에게 규격화된 명령으로 데이터를 가져갈 수 있게 한다.
이 API는 공짜 음식일 때도 있고 일정량 이상을 먹으면 돈을 내야 하는 음식일 때도 있다. 보통은 무료인데 일정 횟수 이상 호출하게 되면 지불해야 될 수도 있다.

API의 예시

API는 UI와 달리 사용자 눈에 보이지 않는다. 그런 면에서 앞의 레스토랑 예시가 완벽한 건 아니다. 개인적인 예시로는 열쇠를 API의 예시로 들고 싶다. 거대한 인터넷 세상의 사원인 우리는 어느 자료실에 가서 자료를 가져와야 할 때마다 관리자들에게 열쇠를 요청한다. 관리자들에게 이름을 알리고 복사키를 받아가면 자료를 갖다쓸 수 있는 것이다. 하지만 구글의 검색 순위 알고리즘이나 페이스북 사용자 데이터베이스를 조회하는 열쇠 이런 건 요청할 수 없다. 그건 제작자들이 허락하지 않은 private API이기 때문이다.
사실 우리는 알게모르게 API를 쓰고 있다. 그게 무슨 말일까?
예를 들어 파이썬으로 다음과 같은 코드를 짰다고 하자.
print("Hello World!")
Python
복사
이걸 실행하면 출력창에 ‘Hello World!’ 가 나온다. 이때 출력창의 규격은 다 브라우저에서 제공해준 것이고 내용만 우리가 지정한 것이 된다. 즉 우리는 이미 웹 API를 쓰고 있는 것이다. 사실 코딩하면서 쓰는 함수들 거의 전부가 API라고 해도 과언이 아니다.
이번에는 좀 더 실용성 있는 예시를 들어보도록 하겠다. 어떤 웹페이지를 만들었다고 하자. 에 세상에 하나뿐인 디자인이고 콘텐츠도 혁기적이다. 최대한 많은 사람들이 와서 이 페이지를 구경해주면 좋겠다고 생각한다. 그래서 페이지에 공유 버튼을 만들기로 했다. 사람들이 네이버를 많이 쓰니까 네이버에 공유하기를 하고 싶다. 어떻게 해야 할까?
제일 단순하게는 블로그나 카페, 밴드 등에 그냥 링크를 복사해서 게시물로 올리면 된다. 하지만 버튼 하나로 공유할 수 있는 방법은 없을까? 네이버에서는 그 방법을 제공한다.
확인해보면 utf-8 인코딩을 해서 url과 title값을 넣어 GET 방식으로 요청을 해야 한다. 인코딩을 하지 않으면 잘못된 예시라고 알려 준다. 이런게 API 규격이다. 즉 “공유하고 싶으면 이렇게 쓰세요!” 알려주는 것이다. 만약 이런게 없다면 웹페이지에서 서비스 공유하는 버튼을 만들 수가 없을 것이다. 만약에 할 수 있다고 해도 공식이 알려주는 방법이 없으니 돌아돌아 먼 길을 가야 할 수도 있다. 내 페이지가 네이버 API를 사용해서 사용자들이 네이버 서비스에 내 페이지를 공유할 수 있도록 요청하는 것이다.