REST API를 설계하기전 배경지식에 대해 공부해보았다.
REST는 웹과 같은 분산 하이퍼미디어 시스템에서 사용하는 통신 네트워크 아키텍처로, 네트워크 아키텍처의 원리 모음입니다.
웹은 전송 방식으로 HTTP를, 식별 방법으로 URI를 사용합니다.
HTTP는 웹에서 GET, POST, PUT, DELETE 등의 메서드를 사용하여 정보를 주고받는 프로토콜입니다.
REST는 HTTP와 URI의 단순하고 간결한 장점을 계승한 네트워크 아키텍처입니다. REST는 다음과 같은 목적으로 만들어졌습니다.
- 구성요소 상호작용의 규모 확장성
- 인터페이스의 범용성
- 구성요소의 독립적인 배포
- 중간적 구성요소를 이용하여 응답 지연 감소, 보안 강화, 레거시 시스템 인캡슐레이션
서버 한 대가 여러 클라이언트에 대응하려면 REST API가 필요로 합니다. REST API는 다음과 같이 구성해야합니다.
- 자원(resource):URI
- 행위(verb):HTTP 메서드
- 표현(representations):리소스에 대한 표현(HTTP Message Body)
REST의 구현 원칙을 제대로 지키면서 REST 아키텍처를 만드는 것을 RESTful이라고 설명합니다. Restful 제약조건으로 다음 6가지가 있습니다.
- 클라이언트-서버(client-server) : 관심사의 명확한 분리를 뜻합니다. 관심사의 명확한 분리가 선행되면 서버의 구성요소가 단순화되고 확장성이 향상되어 여러 플랫폼을 지원할 수 있습니다.
- 무상태성(stateless) : 서버에 클라이언트의 상태 정보를 저장하지 않는 것을 의미합니다. 단순히 들어오는 요청만 처리하여 구현을 단순화합니다. 단, 클라이언트의 모든 요청은 서버가 요청을 알아듣는 데 필요한 모든 정보를 담고 있어야 합니다.
- 캐시 가능(cacheable) : 클라이언트의 응답을 캐시할 수 있어야 합니다. REST는 HTTP의 장점을 그대로 계승한 아키텍처여서 HTTP의 캐시 기능도 적용할 수 있습니다.
- 계층화 시스템(layered system) : 서버는 중계(게이트웨이, 프록시)나 로드 밸런싱, 공유 캐시 등의 기능을 사용하여 확장성 있는 시스템을 구성 할 수 있습니다.
- 코드 온 디맨드(code on demand) : 클라이언트는 서버에서 자바 애플릿, 자바스크립트 실행 코드를 전송받아 기능을 일시적으로 확장할 수 있습니다. 이 제약 조건은 선택 가능합니다.
- 인터페이스 일관성(uniform interface) : URI로 지정된 리소스에 균일하고 통일된 인터페이스를 제공합니다. 아키텍처를 단순하게 분리하여 독립적으로 만들 수 있습니다.
인터페이스 일관성은 세부 원칙을 갖고 있습니다. 인터페이스 일관성이 잘 지켰는지에 따라 REST를 제대로 사용했는지 판단할 수 있습니다. 인터페이스 일관성에는 다음 4가지 프로퍼티가 존재합니다.
자원식별 : 웹 기반의 REST에서 리소스 접근은 주로 URI를 사용한다.
메세지를 통한 리소스 조작 : 클라이언트가 특정 메시지나 메타데이터를 가지고 있으면 자원을 수정,삭제하는 충분한 정보를 갖고 있는것을 볼 수 있다.
자기 서술적 메세지 : 각 메세지는 자신을 어떻게 처리해야 하는지 충분한 정보를 포함해야 한다.
HATEOAS(Hypermedia as the engine of application state)
: 클라이언트 요청에 응답할 때 단순히 결과 데이터만 제공해주기보다는 URI를 함께 제공해야한다는 원칙이다.출처:김영재, 「처음 배우는 스프링부트2」, 한빛미디어