REST API

EenSung Kim·2021년 10월 16일
0

restful : 1. 평안을 주는 2. 평온한 3. 조용한 (다음 어학사전)


REST

HTTP 를 만드는 데 기여한 로이 필딩이라는 형님이 있었습니다. HTTP 를 만들며 이러저러한 의도를 담아냈는데, 막상 웹에서 HTTP 를 사용하는 방식은 원작자들의 의도와는 너무 달랐던 모양입니다. 그래서 로이 필딩은 논문을 통해 REST 라는 일종의 원칙을 소개하게 되었고, 이는 곧 많은 사람들의 공감을 얻어 널리 사용되었습니다.

REST 는 REpresentational State Transfer 의 약자입니다. 'RESTful' 이란 REST 라는 원칙을 잘 준수한 디자인을 표현하는 단어라고 할 수 있죠. 이번 블로깅에서는 REST API 에 대해 공부한 바를 풀어내보려고 합니다. (지난 블로깅에서 소개한 공부방법을 적용해 최대한 참고 없이 이해한 바를 풀어내보도록 하겠습니다.)


REST API

흔히 API 를 가리켜 메뉴판이라고 비유하죠. 제목과 가격, 그리고 약간의 설명을 포함한 메뉴판으로 식당에서 서비스하는 메뉴를 소개하는 것처럼, API 를 통해 클라이언트가 어떻게 서버로부터 리소스를 받아갈 수 있는지를 안내할 수 있습니다.

메뉴판의 쓰임새는 무엇일까요? 식당의 메뉴를 이미 잘 알고 있는 주인을 위해서일까요? 그렇지는 않습니다. 주인은 메뉴판 없이도 식당에서 서비스하는 메뉴를 상세히 잘 알고 있을 겁니다.

메뉴판은 손님을 위한 것입니다. 단골 손님이야 메뉴판 없이도 주문할 수 있겠지만 대부분의 손님은 그렇지 않겠죠. 메뉴판이 있어야 오랜 시간과 많은 노력 없이도 손님에게 우리 가게의 메뉴를 알릴 수 있습니다.

개발자의 상황을 살펴보겠습니다. 대부분의 개발자는 협업을 통해 서비스를 만들어냅니다. 알아보기 쉬운 변수명, 코드 스타일 통일과 같은 것들은 협업을 더욱 용이하게 하기 위한 방법론이죠. 메뉴판처럼 나를 위해서가 아닌 협업하는 상대방을 위한 것입니다.

REST API 는 URI(엔드포인트), HTTP 메소드, 페이로드 이 3 가지를 통해 그 자체적으로 무엇을 요청하는지를 알 수 있도록 하는 디자인 방법입니다. 잘 만든 메뉴판이 별다른 설명 없이도 메뉴를 소개해주는 것처럼, RESTful 하게 작성된 API 는 그것만으로도 어떤 요청을 보내고 있는지를 설명해줍니다.

메뉴(리소스)는 URI 에 명사로!

'푹 끓인 사골곰탕' 이런 메뉴 보신 적 있으신가요? 어딘가에 있을지는 모르겠습니다만 일반적인 상황은 아니죠. REST API 에서 리소스를 요청할 때는 URI(엔드포인트)에 명사를 사용해 표현합니다.

안 좋은 예시
/getArticle
/writeComment

RESTful 한 예시
/article
/comment

행위는 HTTP 메소드만으로!

API 는 일반적으로 CRUD 를 전부 포함합니다. 게시물이라고 하면 게시물을 만들고, 읽고, 수정하고, 지울 수 있어야 한다는 것이죠. 이 때 리소스에 대한 행위는 오로지 HTTP 메소드만을 사용해야 합니다.

주로 GET, POST, PUT, PATCH, DELETE, 이 5 가지 메소드를 사용해 CRUD 를 구현하며, GET, DELETE 는 별도의 페이로드를 갖지 않습니다.

C: GET
R: POST
U: PUT(전체 수정), PATCH(일부 수정)
D: DELETE

위의 예시를 가져오자면 다음과 같습니다.

안 좋은 예시 (uri 에 get, write 처럼 동사 혼용)
/getArticle
/writeComment

RESTful 한 예시
GET /article
POST /comment

outro

간단하게 정리해봤지만, 깊이 들어가면 꽤나 심오한 내용들을 다루는 것 같습니다. 실제로 레너드 리처드슨이라는 분은 REST 를 얼마나 성숙하게 다루고 있는지를 4 단계의 모델로 표현해 제시했다고 하죠.

RESTful 하게 만드는 건 의외로 쉽지 않습니다. 어떻게 적용해야 할지 기획 단계에서부터 고민하는 과정이 필요하죠. 프로젝트 단계에서는 서로 이해가 부족하다 보니 의견을 다투다 'restful' 하지 못한 상태가 될 때도 있었습니다. 하지만 이를 거쳐야 결국 그 다음의 프로그래밍 과정이 평안하게 흘러갈 수 있습니다. 아마 그래서 여러 의미를 담아 RESTful 이라는 표현을 만들게 된 거 아닐까 싶기도 합니다.

오늘은 이것으로 마치도록 하겠습니다.

profile
iOS 개발자로 전직하기 위해 공부 중입니다.

0개의 댓글