REST
- 하나의 URI는 하나의 고유한 리소스를 대표하도록 설계된다는 개념에 전송방식을 결합해서 원하는 작업을 지정한다.
- URI + GET/POST/PUT/DELETE
- 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표
- HTTP URI를 통해 제어할 자원을 명시하고, HTTP Method(get/post/put/delete)을 통해 해당 자원을 제어하는 명령을 내리는 방식의 아키텍처
REST 구성
- 자원(Resource) - URI
- 행위(Verb) - HTTP Method
- 표현 (Representations)
잘 표현된 HTTP URI로 리소스를 정의하고 HTTP Method로 리소스에 대한 행위를 정의한다.
리소스는 JSON이나 XML 같은 여러 가지 언어로 표현할 수 있다.
REST 특징
1. Uniform (유니폼 인터페이스)
Uniform Interface는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말한다.
2. Stateless (무상태성)
REST는 무상태성 성격을 갖는다. 다시 말해 작업을 위한 상태정보를 따로 저장하고 관리하지 않는다.
세션 정보나 쿠키 정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순히 처리하면 된다.
때문에 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해진다.
3. Cacheable (캐시 가능)
REST의 가장 큰 특징 중 하나는 HTTP라는 기존 웹표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용이 가능하다. 따라서 HTTP가 가진 캐싱 기능이 적용 가능하다. HTTP 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용하면 캐싱 구현이 가능하다.
4. Self-descriptiveness (자체 표현 구조)
REST의 또 다른 큰 특징 중 하나는 REST API메세지만 보고도 이를 쉽게 이해할 수 있는 자체 표현 구조로 되어있다는 것이다.
5. Client-Server 구조
REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어들게 된다.
6. 계층형 구조
REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있게 한다.
기존 Service와 REST Service
기존 Service : 요청에 대한 처리를 한 후 가공된 data를 이용하여 특정 플랫폼에 적합한 형태의 VIew로 만들어서 반환
REST Service : data 처리만 한다 거나, 처리 후 반환될 data가 있으면 JSON이나 XML형식으로 전달. VIew에 대해서는 신경 쓸 필요가 없다. > OPen API에서 많이 사용.(이러한 이유로)
REST
- 기존의 전송방식과는 달리 서버는 요청으로 받은 리소스에 대해 순수한 데이터를 전송한다.
- 기존의 GET/POST 외에 PUT, DELETE 방식을 사용하여 리소스에 대한 CRUD 처리를 할 수 있다.
- HTTP URI을 통해 제어할 리소스를 명시하고, HTTP Method를 통해 해당 리소스를 제어하는 명령을 내리는 방식의 아키텍처다.
- 가장 큰 단점은 딱 정해진 표준이 없어 '다들 이렇게 쓰더라!'정도의 암묵적인 표준만 정해져 있다.
Create(Insert) = POST
Read(Select) = GET
Update(Upadate) = PUT
Delete(Delete) = DELETE
Jackson Library
- Jackson-databind 라이브러리는 객체를 JSON 포맷의 문자열로 변환시켜서 브라우저로 전송한다.
- jackson-dataformat-xml 라이브러리는 객체를 xml로 브라우저로 전송한다.
- pom.xml에 library 추가.
REST 관련 어노테이션
@RestController | Controller가 REST방식을 처리하기 위한 것임을 명시 |
@ResponseBody | JSP 같은 뷰로 전달되는 것이 아니라 데이터 자체를 전달 |
@PathVariable | URL 경로에 있는 값을 파라미터로 추출 |
@CrossOrigin | Ajax의 크로스 도메인 문제를 해결 |
@RequestBody | JSON 데이터를 원하는 타입으로 바인딩 |
'Spring' 카테고리의 다른 글
스프링 부트 초기 실행시 에러 (Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.) 원인 및 해결 (0) | 2022.12.07 |
---|---|
[Spring/Java] Entity 클래스의 id값을 Long 타입으로 지정해야 하는 이유 (0) | 2022.11.02 |
MyBatis / spring-myBatis (0) | 2021.10.31 |
AOP (관점 지향 프로그래밍) (0) | 2021.10.31 |
Spring WEB MVC (0) | 2021.10.31 |