REST : 웹(HTTP) 의 장점을 활용한 웹 개발 아키텍쳐
1. REST(REpresentational State Transfer) 기본
* REST의 요소
- Method
Method | 의미 | Idempotent |
POST | Create | No |
GET | Select | Yes |
PUT | Update | Yes |
DELETE | Delete | Yes |
- Idempotent : 한 번 수행하든, 여러번 수행하든 결과가 같은지 여부
- Resource
** http://myweb/users 와 같은 URI
** 모든 것을 Resource(명사) 로 표현하고, 세부 Resource 에는 id 를 붙인다.
- Message
메시지 포맷이 존재한다.
: JSON, XML 과 같은 형태가 있다. (최근에는 JSON 을 쓴다.)
HTTP POST, http://myweb/users/
{
"users" : {
"name" : "terry"
}
}
REST 특징
- Uniform Interface
** Http 표준만 맞는다면 어떤 기술도 가능한 Interface 스타일이다.
예시 : REST API 정의를 HTTP + JSON 으로 하였다면 C, Java, Python, IOS 플랫폼 등 특정 언어나 기술에 종속 받지 않고 모든 플랫폼에 사용이 가능한 Loosely Coupling 구조이다.
** 포함
Self-Descriptive Messages
: API 메시지만 보고 API 를 이해할 수 있는 구조이다.(Resource, Method 를 이용해 무슨 행위를 하는지 직관적으로 이해할 수 있다.)
HATEOAS(Hypermedia As The Engine Of Application State)
: Application 의 상태(State)는 Hyperlink 를 통해 전이 되어야 한다.
서버는 현재 이용 가능한 다른 작업에 대한 하이퍼링크를 포함하여 응답해야 한다.
- Statelesss
* HTTP Session 과 같은 컨텍스트 저장소에 상태 정보를 저장하지 않는다.
* Request 만 Message 로 처리하면 되고, 컨텍스트 정보를 신경쓰지 않아도 되므로, 구현이 단순해진다.
* 따라서 REST API 실행 중 실패가 발생한 경우, 트랜잭션 복구를 위해 기존의 상태를 저장할 필요가 있다.
(POST Method 제외)
- Resource 지향 아키텍쳐(ROA : Resource Oriented Architecture)
* Resource 기반의 복수형 명사 형태의 정의를 권장한다.
- Client-Server Architecture (클라이언트/서버 구조)
: 구조를 단순화 시키고, 작은 단위로 분리 함으로서 클라이언트 - 서버의 각 파트가 독립적으로 개선될 수 있도록 해준다.
- Cache Ability (캐시처리 가능)
: WWW 에서와 같이 클라이언트는 응답을 캐싱할 수 있어야 한다. 잘 관리되는 캐싱은 클라이언트-서버 간 상호작용을 부분적으로 또는 완전하게 제거하여 scalability 와 성능을 향상 시킨다.
- Layered System(계층화)
: 클라이언트는 보통 대상 서버에 직접 연결 되었는지, 또는 중간 서버를 통해 연결 되었는지를 알 수 없다. 중간 서버는 로드 밸런싱 기능이나 공유 캐시 기능을 제공함으로서 시스템 규모 확장성을 향상시키는데 유용하다.
- Code on Demand(Optional)
: 자바 애플릿이나 자바스크립트의 제공을 통해 서버가 클라이언트가 실행시킬 수 있는 로직을 전송하여 기능을 확장시킬 수 있다.
'이론 > 웹' 카테고리의 다른 글
Web - Web Server 와 WAS (0) | 2022.01.31 |
---|---|
Web - Http status code (0) | 2022.01.31 |
Web - 쿠키 & 세션 (0) | 2022.01.31 |
Web - 브라우저 동작 방법 (0) | 2022.01.31 |