REST

dogyeong·2021년 1월 19일
2

REST란?

REST = Representational State Transfer

2000년에 로이 필딩이 박사논문에서 소개한 개념으로, 네트워크의 리소스가 어떻게 정의되고, 어떻게 주소를 표현하는 지를 나타내는 몇가지 원칙에 기반한 소프트웨어 아키텍쳐이다. 웹에 있는 자원들을 구조화하는 스타일을 제시했다고도 할 수 있다.

당시에 웹에서는 여러 프로토콜들을 사용하고 있었는데, 이러한 프로토콜들이 공통적으로 사용할 수 있는 표준적인 가이드를 만들고자 했던 것 같다.

이러한 구조화하는 스타일을 만들기 위해서 여러 제한(규칙)들을 만들었는데, 당시 여러 프로토콜에서 표준적으로 사용할 수 있게 제네릭하게 제한들을 만들었다.

REST 제한 조건

클라이언트-서버

클라이언트, 서버를 분리하고 인터페이스로만 의사소통할 수 있게 한다. 이렇게 함으로써 서버는 클라이언트가 어떤 형태든지 상관없이 일정한 인터페이스만 유지하면 되고, 각 컴포넌트들은 서로 독립적으로 발전할 수 있다.

Stateless(무상태성)

요청 간 클라이언트의 상태가 서버에 저장되어서는 안 된다. 상태가 필요하면 클라이언트에 의존할 것. 이는 서버에서 클라이언트의 요청만 신경쓰면 된다는 장점이 생기지만, 클라이언트에서 상태를 매번 전송해야 한다는 단점도 있다.

Cache

클라이언트는 서버의 응답을 캐싱할 수 있어야 한다.

일관된 인터페이스

모든 서버-클라이언트 간 통신이 일관된 인터페이스를 사용해야 한다. 전체 시스템 구조가 단순해지고 가시성이 향상된다. 하지만 모든 어플리케이션에서 같은 인터페이스를 사용하므로 효율성이 떨어질 수 있다.

Layered system

인터넷 단위의 요구사항을 위한 행동을 향상하기 위해 이 제약을 도입. 이 제약은 OSI 7계층 모델처럼 컴포넌트가 인접한 컴포넌트 의외의 영역을 “볼 수 없는 것처럼”한다. 이를 통해 전체 시스템 복잡도에 한계를 주고 독립성을 증진한다. 레이어는 레거시 서비스를 감싸서 새 서비스를 레거시 클라이언트로부터 보호할 수 있다.

Code-on-demand

REST는 애플렛(Applet)이나 스크립트의 형태의 코드를 다운로드하고 실행해서 클라이언트 기능성이 확장되는 것을 허용한다.



참조

논문을 통한 REST에 대한 고찰
Wikipedia - REST
service-architecture.com
Microsoft - 웹 API 디자인

profile
Engineer

0개의 댓글