REST API에 대한 포스트에 이어REST의 특징을 따로 정리하고자 한다.
REpresentational State Transfer,
웹에서 시스템 간의 통신을 효율적으로 하기 위한 아키텍처 스타일
자원(Resource)를 URI로 명시하고, HTTP Method를 통해 자원을 처리
REST의 핵심 개념은 시스템 간의 상호작용을 간단하고 일관성있게 설계하는 것
REST의 가장 큰 특징은HTTP기존 웹 표준을 그대로 사용하므로,
웹에서 사용하는 기존 인프라를 그대로 활용 가능하다는 점이다.
REST 아키텍처에서는 클라이언트(Client)와 서버(Server)가 명확히 분리
클라이언트는 서버에 자원을 요청하고, 서버는 해당 자원에 대해 응답한다.
REST는 Stateless(무상태) Protocol을 따른다.
서버는 클라이언트의 각 요청이 독립적이며, 요청 간의 클라이언트에 대한 상태를 저장하지 않는다.
즉, 작업을 위한 상태 정보를 따로 저장하고 관리하지 않음
각 요청은 완전한 정보를 포함해야 하며, 서버는 이전 요청에 대한 정보를 기억하지 않는다.
모든 요청은 필요한 정보를 자체적으로 포함하고 있어야하며 따라서 클라이언트의 요청은 항상 동일한 방식으로 처리될 수 있고, 특정 서버에 의존하지 않는다.
서버의 복잡성이 줄어들고, 확장성(Scale Out) 향상 및 성능 개선
REST에서 응답은 캐시 가능해야 한다.
클라이언트나 중간 시스템은 서버의 응답을 캐시할 수 있어야 하며, 이를 통해 성능을 최적화할 수 있음.
HTTP가 가진 캐싱 기능을 통해 서버의 부담을 줄이고 클라이언트의 응답시간을 단축할 수 있다.
HTTP 프로토콜 표준에서 사용하는 Last-Modified Tag 또는 E-Tag를 이용해 캐싱을 구현한다.
적절한 캐싱 정책을 사용하면 성능이 크게 향상된다.
REST 시스템은 계층화된 아키텍처로 설계될 수 있다.
클라이언트와 서버 간 통신에서 중간 계층이 존재할 수 있으며,
이 중간 계층은 로드 밸런싱, 보안 정책 적용, 캐시 등의 역할을 할 수 있다.
클라이언트는 REST API Server만 호출한다.
클라이언트는 자신이 서버와 직접 통신하는지, 중간 계층을 거치는지 알 필요가 없다.
REST Server는 다중 계층으로 구성될 수 있다.
Gateway, Proxy server, Load balancer 등이 중간 계층이 위치할 수 있다.
시스템의 확장성과 보안성이 높아진다.
REST의 중요한 특징 중 하나는 모든 리소스에 대해 일관된 인터페이스를 제공하는 것이다.
리소스와의 상호작용은 HTTP 메서드(GET, POST, PUT, DELETE)를 통해 이루어진다.
REST API는 일정한 규칙에 따라 자원을 처리하고, 그 규칙이 모든 리소스에 대해 동일하게 작용한다.
REST는 일관된 규칙에 따라 리소스를 다루기 위해 HTTP 메소드를 사용한다.
이로 인해 API 사용법이 예측 가능하고 간결하며 이해하기 쉬운 구조를 제공한다.
REST의 리소스와 그와 관련된 요청 및 응답 메세지는 자체 설명성을 가져야 한다.
충분한 정보를 포함하여, 별도의 설명이 없어도 클라이언트가 해당 리소스를 이해하고 상호작용할 수 있도록 해야한다.
REST API의 요청과 응답이 스스로를 설명할 수 있는 구조를 가진다.
메세지 자체만으로도 의미를 해석할 수 있어야 한다.