개발 공부를 하면서 자연스럽게 API를 만들어 사용하고 있었지만 API에 대한 정확한 개념은 모른 채로 사용하고 있어서 문서를 읽을 때 이해를 잘 못하는 경우가 생겼다. 공부는 남에게 설명할 수 있을 정도로 개념을 파악하는 것! 이라고 머리로는 알고 있어도 여러가지 핑계를 대며 어영부영 넘어가곤 한 점에 대해 반성하면서 API에 대해 스터디를 하고자 한다.
API란?
위키백과에 따르면 API란 Application Programming Interface의 약자로, 응용 프로그램 프로그래밍 인터페이스를 의미한다고 한다.
이렇게 보면 당연히 이해가 안간다. 난 문과니까
알기 쉽게 그림과 예시로 이해해보자. 호텔리어 출신인 나에게 많이 와닿는 예시가 있어서 가져와봤다
레스토랑에는 손님이 있고 점원과 요리사가 있다. 손님은 점원이 가져다 준 메뉴판을 보고 점원에게 주문을 하고, 점원은 손님이 주문한 메뉴를 요리사에게 전달하며, 요리사는 주문에 따라 음식을 조리해서 점원에게 주고, 점원이 음식을 손님에게 가져다준다.
할 일이 많은 우리 점원씨의 역할은 손님에게 메뉴을 소개하고, 요리사에게 주문을 전달하고, 완성된 요리를 손님에게 전달한다.
여기서 점원의 역할이 API가 하는 역할이다.
손님(클라이언트)가 주문(요청)을 할 수 있게 메뉴(명령 목록)을 제공하고, 주문(요청)을 요리사(서버)에 전달하여 음식(응답값)을 손님(클라이언트)에게 전달해준다.
정리해보자면, API는 프로그램간의 상호작용을 도와주는 중간다리, 중재자, 매개체이다.
API의 역할
API의 역할을 정리하자면 이렇게 요약할 수 있다.
- API는 서버와 DB에 대한 출입구 역할을 한다.
데이터베이스에는 중요한 정보들이 저장된다. 그런데 이 데이터베이스에 모든 사람들이 접근할 수 있다면? 그 서비스는 아주 엉망진창이 될 것이다. API는 서버와 DB간의 출입구 역할을 하며, 허용된 사람들만 접근할 수 있게 해준다. - API는 애플리케이션과 기기가 원활하게 통신할 수 있도록 한다.
- API는 모든 접속을 표준화한다.
API는 모든 접속을 표준화하기 때문에 기계/ 운영체제 등과 상관없이 누구나 동일한 액세스를 얻을 수 있다. 쉽게 말해, API는 범용 플러그처럼 작동한다고 볼 수 있음!
API의 유형
API는 공개범위에 따라 3가지로 나눌 수 있다.
- private API
내부 API, 비공개 API
회사 개발자가 자체 제품과 서비스를 개선하기 위해 내부적으로 발행. 제 3자에게 노출되지 않음.
ex) 조직 근태관리 API - public API
오픈 API, 공개 API
누구나 제한없이 사용 가능.
ex) 공공 API,네이버맵, 구글맵 - partner API
파트너 API
회사 외부에서도 허가받은 사람들이 사용할 수 있음.
주로 비즈니스 관계에서 사용되며, 파트너 회사간의 소프트웨어를 통합하기 위해서도 사용된다
REST API
오늘날 웹에서 볼 수 있는 가장 많이 사용되고 유연한 API이다.
지난 포스팅에서 정리해놓은 글이 있으니 첨부하겠음!
2021.12.14 - [Study/개발지식] - [개발지식] REST API, REST-ful이란?
[개발지식] REST API, REST-ful이란?
REST(REpresentational State Transfer)란? HTTP 통신에서 어떤 자원에 대한 CRUD 요청을 Resource와 Method로 표현하여 특정한 형태로 전달하는 방식 즉, REST란 어떤 자원에 대해 CRUD연산을 수행하기 위해 U..
annajin.tistory.com
마치며
가장 기본이 되는 개념이라서 무의식적으로 만들고 사용하던 API인데, 이렇게 개념을 정리하고나니 왜 API를 생성해서 사용하는지 알게 되었다. 뭐든 기초가 탄탄하게 쌓여야 무너지지않기 때문에 이런 개념들은 헷갈릴 때마다 명확히 짚고 넘어가야겠다는 생각을 하게 됐다.
참고
'Study > CS' 카테고리의 다른 글
[CS] 브라우저의 동작 원리 (1) | 2022.06.01 |
---|---|
[CS] 동기 & 비동기 vs 블로킹 & 논블로킹 (3) | 2022.05.30 |
[CS] Rest API: URL 디자인 가이드 (0) | 2022.02.11 |
[Network] 라우팅(Routing) (0) | 2021.12.19 |
[CS] REST API, REST-ful이란? (0) | 2021.12.14 |