REST는 'Representational State Transfer'의 약어로 하나의 URI는 하나의 고유한 리소스를 대표하도록 설계된다는 개념에 전송방식을 결합해서 원하는 작업을 지정한다.따라서 REST방식은 다음과 같이 구성된다고 생각할수 있습니다.
따라서
- REST는 Representational State Transfer 약자로 웹의 장점을 최대한 활용활 수 있는 아키텍처 이다.
REST와 관련해서 알아 두어야 하는 어노테이션들은 다음과 같습니다.
- REST 방식에서 가장 먼저 기억해야 하는점은 서버에서 전송하는 것이 순수한 데이터라는 점입니다. 기존의 Contrller에서Model에 데이터를 담아서 JSP등과 같은 뷰(View)로 전달하는 방식이 아니므로 기존의 Controller와는 조금 다르게 동작합니다. @Controller 외에 @RestController라는 어노테이션을 추가해서 해당 Controller의 모든 메서드의 리턴 타입을 기존과 다르게 처리한다는 것을 명시합니다. @RestController 이전에는 Controller와 메서드 선언부에 @ResponseBody를 이용해서 동일한 결과를 만들수 있습니다. @RestController는 메서드의 리턴 타입으로 사용자가 정의한 클래스 타입을 사용할 수 있고, 이를 JSON이나 XML로 자동으로 처리할 수 있습니다.
Rest 방식의 데이터 교환에서 가장 특이한 점은 기존의 GET/POST 외에 다양한 방식으로 데이터를 전달한다는 점입니다. HTTP의 전송방식은 아래와 같은 형태로 사용됩니다.
작업 |
전송방식 |
Create |
POST |
Read |
GET |
UPDATE |
PUT |
DELETE |
DELETE |
REST 방식은 URI와 같이 결합하므로 회원(member)이라는 자원을 대상으로 전송방식을 결합하면 다음과 같은 형태가 됩니다.
작업 |
전송방식 |
URI |
등록 |
POST |
/members/new |
조회 |
GET |
/members/{id} |
수정 |
PUT |
/members/{id} + body(json데이터등) |
삭제 |
DELETE |
/members/{id} |
1. Client-Server
- 사용자의 요청과 데이터의 저장을 분리하기 위해서 클라이언트-서버 모델 사용
- 서버의 각 컴포넌트는 클라이언트와 독립적으로 구성되어 확장이 용이
2. Stateless
- 클라이언트와 서버 사이는 client-stateless-server(CSS) 스타일로 무상태 통신
- 클라이언트의 각 요청은 필요한 모든 정보를 포함해야 하며, 서버에 컨텍스트에 대한 어떠한 정보도 포함할 수 없음
3. Cache
- 성능 향상을 위해 캐시 추가
- 캐시 사용에 대한 유무는 요청에 설정에 따라 결정되며, 캐시가 가능할 경우 클라이언트는 응답 데이터를 캐시로부터 사용 가능
4. Uniform Interface
- 다른 네트워크 기반의 스타일과 REST 아키텍처 스타일의 가장 큰 차이점은 일관된(uniform) 인터페이스 제공을 강조
- 어떤 인터페이스의 형식이 때로는 비효율적이더라도 REST는 일관된 형태의 인터페이스를 제공
5. Layered System
- 계층화된 시스템은 각 계층 내에서 컴포넌트의 동작을 제한하여 해당 계층 이외에서 어떻게 상호작용되는지 볼 수 없음
- 단일 계층에 정보가 제한되어 전체 시스템 복잡도가 높아져도 단일 계층은 복잡도가 높아지지 않음
- 단점으로는 응답이오기까지의 시간이 오래걸릴 수 있음
6. Code-On-Demand
- REST는 애플릿이나 스크립트 코드를 다운로드하고 실행하여 클라이언트 기능 확장 가능
- 이는 미리 구현되어야 하는 기능의 수를 줄임으로써 복잡도를 줄임
- 배포 후 기능을 다운로드 하도록 허용하면 시스템 확장성이 향상
REST 응답의 역할
- 처음 웹의 자원은 WWW(World Wide Web)에서 URL로 식별되는 문서 또는 파일로 정의
- 오늘날의 자원은 웹 상에서 어떤 식으로든 식별, 명명, 주소 지정 또는 처리될 수 있는 포괄적이고 추상적인 의미로 사용
- RESTful 웹 서비스에서 리소스 URI의 요청은 HTML, XML, JSON 또는 기타 페이로드 포맷으로 지정된 응답 생성
- 응답은 저장된 자원의 변경을 확인하고, 다른 자원으로 하이퍼텍스트 링크를 제공하는 등의 기능 가능
출처
https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_1
https://en.wikipedia.org/wiki/Representational_state_transfer
'Spring' 카테고리의 다른 글
@PathVariable(스프링 지향) (0) | 2020.12.01 |
---|---|
SprtingSecurity(메뉴 권한 및 WebIgnore 설정) (0) | 2020.11.14 |
Oracle 연동 (0) | 2020.11.09 |
Aop 패러다임 (0) | 2020.11.09 |
MVC구조 (0) | 2020.10.31 |