API / Web API / REST API / RESTful API 개념 정리하기

API란

API는 Application Programing Interface의 약자로, 쉽게 말해 둘 이상의 컴퓨터 프로그램이 서로 통신을 하기 위한 규칙을 말합니다. ‘컴퓨터 프로그램 간의 통신’이 도대체 무엇일까요? 컴퓨터의 소프트웨어는 다른 소프트웨어에 서비스를 제공합니다. 그리고 우리가 사용하는 대부분의 컴퓨터 프로그램이나 웹 서비스는 이러한 소프트웨어들 간의 협업을 통해 동작합니다.

예를 들어 사용자가 네이버 메인에 있는 기사를 보고 링크를 클릭하면, 크롬과 같은 웹 브라우저는 네이버 기사 서버에 이 기사를 보여달라는 요청을 합니다. 그러면 네이버 서버에서는 요청을 받고 브라우저에게 기사의 내용이 담긴 응답을 전달해주죠. 우리는 이러한 응답을 웹 브라우저를 통해 읽을 수 있게 됩니다. 웹 브라우저라는 컴퓨터 프로그램과 네이버의 서버가 ‘통신’을 하게 된 것이죠. 이러한 일련의 과정을 위해 네이버 서버는 ‘기사를 보기 위해 요청을 할 때는 이러한 방식과 내용으로 전달해줘’라고 규칙을 정해놓습니다. 그리고 이러한 합의된 규칙이 바로 API인 것입니다.

API라는 용어는 역사가 아주 오래 되어, 예전에는 운영체제, 키보드나 마우스와 같은 하드웨어, 그리고 계산기, 메모장과 등의 소프트웨어같은 프로그램 간의 소통 규칙을 의미했습니다. 하지만 요즘에는 인터넷을 통해 컴퓨터 간 통신을 가능하게 하는 웹(HTTP) API로 많이 사용됩니다.

Web API란

Web API는 웹 서버 또 클라이언트(브라우저) 간의 소통 규칙입니다. 웹 API는 ‘Server side web API’와 ‘Client side web API’로 나눠볼 수 있습니다. 보통 요즘 많이 보이는 날씨 API, 지도 API 등을 일컬을 때는 Server side API를 의미합니다. 서버 사이드 웹 API는 사전에 정의된 요청/응답 시스템을 ‘엔드포인트’라는 것으로 정의해서 공개하는 것을 의미합니다. 웹 서버는 일반적인 경우 HTTP 프로토콜 기반의 서버를 사용하고, JSON, XML, YAML 등의 형식으로 데이터를 주고 받습니다. 그리고 클라이언트 사이드 웹 API는 웹 브라우저와 같은 클라이언트 내에서 기능을 사용하기 위한 API를 의미합니다.

REST API란

프로그램마다 Web API를 사용하는 방식이 상이하다면, API를 사용할때마다 개발자들은 그 방식을 익히기 위해 많은 시간을 들일 수 밖에 없습니다. 또한 새로운 프로그램의 API를 개발할 때도 마찬가지겠죠. 따라서 대부분의 개발자들은 전세계적으로 공유된 규칙과 방식을 기반으로 API를 개발하는데, 그 규칙을 바로 REST(REpresentational State Transfer)라고 합니다.

REST는 자원(Resource)에 대해 CRUD(Create, Read, Update, Delete) 연산을 수행하기 위해, 자원을 구분짓는 URI로 GET, POST 등의 메서드를 사용하여 요청을 보내고 JSON, XML 등의 형태를 통해 자원의 상태를 전달하는 아키텍쳐를 의미합니다.

REST의 제약 조건으로는 크게 네가지를 들 수 있습니다.

  1. Client-server Architecture: 클라이언트와 서버의 역할을 분리합니다.
  2. Statelessness: 서버는 클라이언트의 세션이나 쿠키와 같은 정보를 저장하지 않습니다.
  3. Cacheable: HTTP의 캐싱 기능을 활용합니다.
  4. Layered System: 클라이언트는 보안, 로드밸런싱, 암호화, 프록시, 게이트웨이와 같은 다중 계층으로 구성될 수 있습니다.
  5. Uniform Interface: HTTP를 따르는 모든 언어, 기술에서 사용될 수 있습니다.
  6. Self-Descriptiveness: 요청만 보고도 쉽게 이해할 수 있습니다.

결과적으로 REST API는 REST 설계 규칙을 기반으로 구현된 Web API를 의미합니다.

RESTful API란

REST 설계 규칙을 준수하여 구현된 서비스는 ‘RESTful’하다고 표현합니다. 따라서 일반적으로 REST의 원리를 잘 따르는 API를 RESTful API라고 칭합니다. 두 가지 모두 REST 아키텍쳐 기반의 API라 대부분은 사람들은 통용하는 단어이지만, Restful API의 경우 몇 가지의 조건을 추가적으로 만족합니다. 혹시 궁금하시다면 이 포스팅을 읽어보세요.