HTTP의 주요 저자 중 한 명인 로이 필딩(Roy Fielding)이 2000년도에 박사학위 논문에서 최초로 소개되었으며 당시 그는 웹(HTTP) 설계의 우수성에 비해 제대로 제대로 사용되지 되지 못하고 있다고 생각하였고, 웹의 장점을 최대한 활용하는 아키텍처로서 REST를 발표하였다.
“Representational State Transfer”의 약자로, 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다.
자원(resource)의 표현(representation)
상태(정보) 전달
데이터가 요청되는 시점에서 자원의 상태(정보)를 전달한다.
JSON 혹은 XML를 통해 데이터를 주고받는 것이 일반적이다.
REST API는 REST라는 설계도를 구현한 API를 말한다. 웹 애플리케이션이 제공하는 각각의 데이터를 리소스(자원)로 간주하고 각각의 자원에 고유한 URI(통합 자원 식별자)를 할당함으로써 이를 표현한 API이다.
자원(Resource): URI
행위(Verb): HTTP Method
표현(Representation of Resource)
1) Uniform Interface (유니폼 인터페이스)
REST는 HTTP 표준만 따른다면 모든 플랫폼, 언어에서 사용이 가능하다.
2) Stateless (무상태성)
작업을 위한 상태 정보를 따로 저장하고 관리하지 않는다.
세션 정보나 쿠키 정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순히 처리하면 된다.
그렇기에 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해진다.
3) Cacheable (캐시 가능)
HTTP라는 기존 웹 표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용이 가능하다.
따라서 HTTP가 가진 캐싱 기능이 사용할 수 있으며 HTTP 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용하면 캐싱 구현이 가능하다.
4) Self-descriptiveness (자체 표현 구조)
주석과 같은 다른 부연 설명 없이 REST API 메시지만 보고도 이해가 가능하다.
5) Client - Server 구조
자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client가 된다.
역할이 확실히 구분되기 때문에 Client와 Server에서 개발해야 할 내용이 명확해지고 서로 간 의존성이 줄어들게 된다.
6) 계층형 구조
크롤링 - 셀레니움(Selenium)/ChromeOptions/WebDriverWait (1) | 2022.09.28 |
---|---|
메세지 다국어 처리 / 공통 Message 처리 (MessageSource) (0) | 2022.09.19 |
annotation-driven / component-scan / annotation-config 차이 정리 (1) | 2022.03.28 |
[Spring] ApplicationContext / WebApplicationContext 개념 (0) | 2022.03.21 |
[JAVA] Multi-Thread 사용법 (0) | 2022.03.02 |
댓글 영역