"Stateful / Stateless" 에 대해 포스팅하며 RESTful에 대한 이야기가 나왔었다.
"RESTful한 API를 설계해야한다!" 라는건 많이 듣고 사용해 왔는데, 머릿속에는 "적당히 서로 알아먹기 좋게 구현된 API 설계"라는 두루뭉술한 생각이 들어있다.
이 참에 정확히 정리해보자.
RESTful에 대해 알기 위해서, 우선 REST에 대해 짚어보자.
REST: 자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것
주고받는 모든 것이라... 애매모호하다. 좀 더 알아보자.
- HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
- HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해
- 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미한다다.
앞서 나온 문장에 적용시켜보자면, "자원(문서, 이미지 등)을 어떠한 표현(JSON, HTML 등)으로 구분하여 해당 자원의 상태를 주고받는 모든 것"이 된다.
그렇다면 REST의 특징 및 장단점을 알아보자.
그럼 RESTful은 무엇인가!
"REST"와 "RESTful"은 서로 다른 개념이 아니라, 서로 연관된 용어이다.
"REST"가 웹 서비스 아키텍처
디자인 스타일
을 나타내는 것이고,
"RESTful"은 이러한 REST 아키텍처 스타일을 따르는 시스템이나 서비스를 묘사하는형용사
이다.
"REST"와 "RESTful"은 같은 단어라고 해도 될 정도로 동일한 의미로 사용되고 있다.
RESTful까지 알아봤으니 RESTful API는 이해하기 쉬울 것이다.
API: Application Programming Interface의 약자로, 프로그램 간에 상호작용할 수 있는 인터페이스
서비스가 다른 프로그램에서 사용할 수 있도록 제공되는 메서드나 함수의 집합을 의미하며,
흔히 사용해 왔던 예시로는 HTTP POST, "/users/signup"
가 있다.
이런 API가 REST 아키텍처 스타일을 따르는 것을 RESTful API라고 한다.
이전에 API Versioning 을 하며 RESTful API에 대해 이리저리 궁리해본 경험이 있는데, 그 덕분에 REST에 대해 자세히 이해하는데 도움이 되었다.