[개발] API
방학이 시작되면서 오래 묵혀두었던 책을 다시 한 권 꺼냈다.
'비전공자를 위한 이해할 수 있는 IT지식' 이라는 유명한 책인데,
전공자이지만 여전히 부족한 부분이 많은 것 같아 다시 읽기 시작했다.
이번에 읽은 부분은 4장 API와 JSON인데, 이 글에서는 API에 대해서 다루어볼까 한다.
이 책의 내용과 내가 추가적으로 서치한 내용들을 정리해 보겠다.
API란?
위키백과에서는 아래처럼 정의되어 있다.
'API는 컴퓨터나 컴퓨터 프로그램 사이의 연결이다. 일종의 소프트웨어 인터페이스이며 다른 종류의 소프트웨어에 서비스를 제공한다.'
그러나 너무 추상적이고, 한 번에 머리에 그려지지 않을 수 있다.
어쨋든, API는 클라이언트 서버와 같은 서로 다른 프로그램에서 요청과 응답을 주고 받을 수 있게 만든 체계이다.
더 쉽게 설명해보도록 하겠다.
클라이언트 & 서버
클라이언트와 서버라는 개념이 있다.
말 그대로 클라이언트는 고객, 즉 서비스를 사용하는 컴퓨터이고
서버는 서비스를 제공하는 컴퓨터이다. (클라이언트와 서버에 대해서는 나중에 추가로 다루어보겠다.)
클라이언트 소프트웨어는 서버에 CRUD의 요청을 보낸다.
웹 API & RESTful API
클라이언트에서 서버로 요청하는 CRUD는 각각의 주소를 가지는데, 이 요청 형식에는 HTTP 프로토콜을 사용한다.
HTTP 프로토콜이란 클라이언트와 서버 간 통신을 위한 통신 규칙 세트 또는 프로토콜을 말하는데,
프로토콜이라는 단어가 어렵다면 통신의 약속된 형태라고 이해하면 되겠다.
즉 웹 API는 클라이언트가 정의된 인터페이스를 사용하여 HTTP 프로토콜을 통한 서버와 상호 작용하는 시스템이다.
이해를 위해 쉽게 예를 들어보겠다. Create의 경우 '서버컴퓨터주소/timelinecreate', Read의 경우 '서버컴퓨터주소/timelineread' 의 주소를 가진다고 생각해보자.
이 주소로 요청을 보내면, 서버에서 해당 기능을 수행하고 응답할 것이다.
그런데 만약 주소가 너무 많아진다면? 관리하기 힘들어질 수도 있고, 몇 주소들은 기능이 겹칠 수도 있다.
그 API들이 문제를 일으키고, 버그를 만들어낼 수 있다.
그래서 만들어진 것이 RESTful API(Representational State Transfer + ful + API)이다.
쉽게 말해, 체계적인 API 관리를 위한 체계이다.
CRUD의 하나의 주소로 관리하는 대신, CRUD 중 어떤 요청인지 파악할 수 있는 스티커를 함께 전송한다.
create -> POST
read -> GET
update -> PUT(전체)/PATCH(일부)
delete -> DELETE
REST API는 절대 규칙이 아닌 일종의 사회 운동이므로 상황마다 다양한 방식이 있다는 것을 참고하자.
이 요청에 따라서 서버는 응답(response)을 보낼 텐데, 이 응답에도 체계가 존재한다. 이것이 'HTTP 상태 코드'이다.
정말 간단하게 정리하면, 요청이 잘 처리된 경우 200번대(201..202..) 코드를 반환하고
잘 처리되지 않은 경우 400번대(401..) or 500번대(500..) 코드를 반환한다.
400번대의 경우는 클라이언트의 요청에서 문제가 있는 경우, 500번대의 경우는 서버에 문제가 있는 경우를 뜻한다.
클라이언트 - 서버 간의 API
즉 두 컴퓨터 사이의 API란,
어떤 기능을 사용하기 위해 주소로 요청을 보내면 응답을 해주는 소프트웨어끼리의 체계라고 할 수 있다.
개념을 확장하여, 한 컴퓨터에 여러 SW가 함께 있는 경우의 API에 대해서 다루어 보겠다.
한 컴퓨터 - 여러 소프트웨어 간의 API
예를 들어, ○○ 소프트웨어를 개발하는 중에, 한영 번역 기능을 추가하려고 한다고 가정해보자.
이 기능을 하나하나 개발하는 대신, 다른 소프트웨어의 한영 번역 기능을 사용하려고 한다.
서로 다른 시스템의 기능을 사용하기 위해서는 'API'가 필요하다.
○○ 소프트웨어는 API를 사용하여, 다른 소프트웨어에 요청을 보낸다.
그렇다면 다른 소프트웨어는 해당 작업을 수행하여 응답을 준다.
여기서 또 다른 용어는, SDK이다. API를 '제공'해주는 '다른 소프트웨어'를 SDK(Software Development Kit)라고 한다.
소프트웨어를 개발하기 위한 도구라는 뜻이다.
예를 들어, 구글에서 만든 구글 지도라는 소프트웨어가 있다.
이 구글 지도를 다른 프로그램에서 사용하고 싶다면, 구글 지도 SDK를 설치하면 된다.
내 프로그램에서 구글 지도 SDK가 제공해주는 API들을 통해 구글 지도에 요청을 보낼 수 있다.
정리
API는 두 애플리케이션 간의 서비스 계약, 즉 요청과 응답을 포함하는 통신 방법을 말한다.
- 클라이언트 - 서버 간의 API는 요청/응답을 처리하는 애플리케이션 처리 인터페이스이고, 웹 환경을 통한 CRUD를 제공한다.
- 어떤 소프트웨어에서 다른 소프트웨어의 기능을 사용하기 위한 API는, 그 기능을 제공해주는 SDK에서 제공해주는 것이고, 그 API들을 통해서 다른 소프트웨어에 해당 기능을 요청할 수 있다.
API에는 더 다양한 개념이 많은데, 이 책에서는 특히 많이 사용되는 개념들을 정리하신 것 같다. 흐릿하게 알고 있던 부분을 정리할 수 있어 좋은 기회였다.
CS 용어는 정말 너무너무 많고 어렵다.. 공부를 해도 혼동되기 마련이다. 이게 이론공부의 한계인 것 같다.
그치만 이렇게 하나하나 적립해나가면 더욱 성장할 수 있을 것이라 확신한다. 앞으로도 파이팅!