REST는 Representational State Transfer의 약자로, 자원을 name으로 구분하여 해당 자원의 상태를 주고 받는 아키텍처 입니다. HTTP의 주요 저자 중 한 사람인 필딩씨가 2000년 처음 논문에서 사용하면서 사용 되었는데, 나중에 저도 하나 줄여서 역사에 남겨볼랍니다.
다시 본론으로.. 말 그대로 자원의 표현으로 하는 상태 전달하는 것을 의미 합니다.
🙄여기서 자원은?
프로그램이 관여하는 데이터나 설계 등등의 모든 것들
🙄표현 방법은 어떻게?
예를 들어서 직원 목록(자원)을 제공하는 서비스일 경우, 'person'이라는 이름으로 표현합니다.
🙄상태 전달은?
데이터를 조회/추가/변경/삭제가 필요할 때 자원의 상태를 전달합니다
필딩씨가 소개한만큼, REST는 HTTP 프로토콜과 같이 쓰입니다.
개인적으로는 이보다 더 직관적이고 효율적인 방법이 있을까 싶습니다.
API 서버를 개발할 때도, 자원을 요청하는 클라이언트와 서버 사이에서 통신할 때는 무조건 사용하게 되는 것 같아요.
REST는 HTTP URI를 통해 자원을 정의하고, HTTP Method를 사용하여 해당 자원에 대한 CRUD를 수행하는 방식을 뜻합니다.
인터페이스 일관성
URI로 자원에 대한 요청을 하는 동작 형식.
Server-Client 구조
자원을 제공하는 쪽 -> Server
자원을 요청하는 쪽 -> Client
Stateless
HTTP 프로토콜이 Stateless 프로토콜이기 때문에, REST 또한 그렇다
서버는 클라이언트의 요청을 처리하고, 세션이나 쿠키 등은 관리하지 않는다
Cacheeable
여윽시 HTTP의 특징 중 캐싱 기능 사용 가능.
Layered System
프록시에 대한 설명과 비슷하다. 클라이언트는 자원을 얻기 위해 진짜 서버/중간 서버로 요청할 뿐. 중간 서버는 로드밸런싱 또는 공유 캐시 등을 제공할 수 있다 -> 시스템 규모 확장에 유용하다
Code on demand
이건 처음 알았는데, 자바 스크립트의 제공을 통해 서버가 클라이언트가 실행시킬 수 있는 로직을 전송해서 기능 확장이 가능하다고 한다.
- 구성 요소 상호작용의 규모 확장성
- 인터페이스의 범용성
- 구성 요소의 독립적인 배포
- 중간적 구성요소를 이용해 응답 지연 감소, 보안 강화