REST API

0_0_yoon·2023년 7월 25일
0
post-thumbnail

서론

REST API 는 HTTP 메서드로 행위를 표현하고 자원을 URI 로 표현해서 만든 API 라고 알고 있었다. 하지만 여기에 몇 가지 제약사항이 더 있다고 들었던 적이 있다. 그래서 이번에 과연 REST 는 무엇이며, 왜 만들어졌는지, REST API 를 만들기 위한 제약사항은 무엇인지, 제약사항을 지켜서 만든 REST API 는 어떤 이점이 있는지 알아보기 위해 REST 를 정의한 로이 필딩의 논문, 위키백과 를 보며 정리해 봤다.

본론

REST 란?

웹을 위한 아키텍처이다. 왜 아키텍처에 REST 라는 이름을 붙였을까?
REST 는 대표 상태 이동 즉 웹 페이지에서 링크를 통한 다른 웹 페이지로의 이동이다. 로이 필딩은 이와 같은 웹 애플리케이션의 동작 방식을 연상시키기 위해서 REST 라는 이름을 붙였다고 한다.

"Representational State Transfer"라는 이름은 잘 설계된 웹 애플리케이션의 작동 방식, 즉 사용자가 링크(상태 전환)를 선택하여 애플리케이션을 진행하는 웹 페이지 네트워크(가상 상태 머신)의 이미지를 연상시키기 위한 것입니다.
-로이 필딩

REST 의 탄생 배경

웹 사용량이 늘어나면서 기존 아키텍처의 문제가 드러났고 이를 해결하고 기존 아키텍처와의 호환성을 유지하기 위해서 웹 프로토콜 표준 아키텍처(REST) 가 만들어졌다.
예상과 달리 웹 사용량이 급속도로 증가하면서 인터넷 인프라의 용량을 빠르게 초과했다.
인터넷 엔지니어링 태스크포스는 이미 널리 배포된 아키텍처에 새로운 기능을 도입하고 기존 아키텍처와의 호환성을 유지하기 위해 기존 아키텍처의 문제(확장성, 공유캐싱 및 중개자 지원의 제한)를 식별하고 해당 문제를 해결하기 위한 일련의 표준을 정했다.

REST 의 통일된 인터페이스

인터페이스를 만듦으로써 전체 시스템 아키텍처가 단순화되고 상호 작용의 가시성이 향상된다. 서버와 클라이언트가 독립적으로 발전할 수 있다. 예를 들어 크롬을 업데이트시켜도 구글에 접속할 수 있다. 구글이 웹페이지를 변경했다고 크롬을 업데이트할 필요가 없다. 그러나 단점은 정보가 특정 응용 프로그램의 요구 사항에 맞는 형식이 아닌 표준화된 형식으로 전송되기 때문에 균일한 인터페이스가 효율성을 저하한다.

제약사항

자원의 식별

초기 웹 아키텍처에서는 URI 에서 Resource 를 문서 식별자(네트워크상의 문서 위치에 따른 식별자)로 정의했다. 하지만 이 경우 해당 문서가 수정될 때마다 식별자가 변경된다는 문제점, 서버가 문서만을 제공하는 게 아니기(Get 이외의 요청에 대한 응답, JSON 형식의 응답) 때문에 개념을 식별하도록 정의했다.

REST의 리소스 정의는 식별자가 가능한 한 자주 변경되지 않아야 한다는 간단한 전제를 기반으로 합니다.
-로이 필딩

즉 서버 개발자는 (변경이 발생하지 않을)개념을 식별하도록 URI 를 구성해야 한다.

표현을 통한 리소스 조작

어떻게 사용자가 하이퍼텍스트 링크를 통해 자원에 접근, 조작, 전송할 수 있을까? REST 는 식별된 리소스를 표현하도록 항목을 정의해서 해결한다.
즉 사용자가 리소스를 조작할 때 리소스 식별자에 의해 정의된 인터페이스를 통해 표현을 전송하여 조작된다.
여기서 표현이란 바이트 시퀀스와 해당 바이트를 설명하는 메타데이터로 구성된다.

즉 서버 개발자는 클라이언트의 요청을 올바르게 처리하기 위해서 인터페이스에 맞도록(올바른 HTTP 메서드, Content Type 등의 메타데이터) API 를 구성해야 한다.

자기 설명 메시지

요청 내 호스트 식별 부족, 메세지 제어 데이터와 표현 메타데이터 간의 구문적 구별 실패 등 초기 HTTP 는 자체 설명적이지 못했다. REST 에서는 이 문제점들을 해결하고자 HTTP 메시지는 자신을 어떻게 처리해야 하는지에 대한 충분한 정보를 포함하도록 했다.

즉 서버 개발자는 JSON 형식의 응답을 하는 경우에도 충분한 정보를 포함하도록 해야한다.(JSON 의 키값을 정의한 문서를 응답에 포함)

HATEOAS(Hypermedia as the engine of application state)

사용자는 애플리케이션이나 서버와 상호 작용하는 방법에 대한 사전 지식이 필요하지 않다. 그저 하이퍼링크를 통해 관련된 자원에 접근한다.
즉 서버 개발자는 JSON 형식의 응답을 하는 경우에도 관련된 자원에 접근할 수 있는 링크를 포함해야 한다.

결론

웹 사용자가 빠르게 늘어나면서 발생된 인프라 자원의 부족, 기존 아키텍쳐의 문제점을 해결하고 기존 아키텍쳐와의 호환성을 지키기 위해서 새로운 웹 표준 아키텍쳐를 만들었는데 이것이 바로 REST 다.
결과적으로 웹은 REST 로 인해 독립성과 확장성, 대기 시간과 네트워크 통신을 최소화했다.
웹에서 사용할 API 를 REST 의 인터페이스 조건에 맞게 만들면 REST 의 이점을 누릴 수 있다.(클라이언트와 서버가 독립적인 발전을 할 수 있다)

REST는 구성 요소 구현의 독립성과 확장성을 최대화하는 동시에 대기 시간과 네트워크 통신을 최소화하려고 시도하는 조정된 아키텍처 제약 세트입니다.
-로이 필딩

profile
꾸준하게 쌓아가자

0개의 댓글