상세 컨텐츠

본문 제목

REST

Back-end/JavaSpringBoot

by 본투비곰손 2022. 8. 4. 22:25

본문

728x90

REST(Representational State Transfer : 자원의 상태 전달) - 네트워크 아키텍처

1. Clint, Server : 클라이언트와 서버가 서로 독립적으로 분리 되어있어야 한다.
2. Stateless: 요청에 대해서 클라이언트의 상태를 서버에 저장하지 않는다.
3. Cache : 클라이언트는 서버의 응답을 Cache(임시저장)할 수 있어야 한다.
클라이언트가 Cache를 통해서 응답을 재사용할 수 있어야 하며 이를 통하여 서버의 부하를 낮춘다.
4. 계층화 (Layered System) : 서버와 클라이언트 사이에 방화벽, 게이트웨이, Proxy, 등 다양한 계층 형태로 구성이 가능
해야하며, 이를 확장 할 수 있어야 한다.
5. 인터페이스 일관성 : 인터페이스의 일관성을 지키고, 아키텍처를 단순화 시켜 작은 단위로 분리하여, 클라이언트,
서버가 독립적으로 개선 될 수 있어야 한다.
6. Code On Demand (Optional) : 자바 애플릿, 자바스크립트, 플래시 등 특정한 기능을 서버로부터 클라이언트가 전달받아
코드를 실행할 수 있어야 한다.

인터페이스 일관성이 잘 지켜졌는지에 따라 REST를 잘 사용했는지 판단 할 수 있다.
1.자원의 식별
웹기반의 REST 에서는 리소스 접근을 할때 URI를 사용한다.
https://foo.co.kr/user/100
Resource : user 이고 식별자 : 100 이다.

2.메시지를 통한 리소스 조작
Web에서는 다양한 방식으로 데이터를 전달 할 수 있습니다.
그중에서 가장 많이 사용하는 방식은 HTML , XML, JSON, TEXT등 이 있습니다.
이중에서 어떠한 타입의 데이터인지를 알려주기 위해서 HTTP Header 부눈에 content-type을 통해서 테이터의 타입을 지정해 줄 수 있습니다.
또한 리소스 조작을 위해서 데이터 전체를 전달하지 않고 이를 메시지로 전달 합니다.
예) 서버의 user라는 정보의 전화번호를 처음에는 number라고 결정했고 이정보를 Client와 주고 받을때, 그대로 사용하고 있었다면, 후에 서버의 resource변경으로 phone-number로 바뀌게 된다면 Client는 처리하지 못하고 에러가 발생합니다.
이를 방지하기위해, 별도의 메시지의 형태로 데이터를 주고 받으며, client-server가 독립적으로 확장 가능하도록 합니다.

3.자기 서술적 메시지
요청하는 데이터가 어떻게 처리 되어져야 하는지 충분한 데이터를 포함할 수 있어야한다.
HTTP기반의 REST에서는 HTTP Method와 Header정보, 그리고 URI의 포함되는 정보로 표현할 수 있습니다.

GET: http://foo.co.kr/user/100 : 사용자 정보요청
POST : http://foo.co.kr/user 사용자정보 생성
PUT : http://foo.co.kr/user 사용자정보 생성 및 수정
DELETE: http://foo.co.kr/user/100 사용자정보 삭제
그 외에 담지 못한 정보들은 URI의 메시지를 통하여 표현한다.

4. 애플리케이션 상태에 대한 엔진으로써 하이퍼 미디어
REST API를 개발할 때 단순히 Client 요청에 대한 데이터만 응답해주는것이 아닌 관련된 리소스에 대한 link 정보까지 같이 포함 되어져야 한다.
이러한 조건들을 잘 갖춘 경우 REST Ful하다고 표현하고 이를 REAT API라고 부른다

728x90

'Back-end > JavaSpringBoot' 카테고리의 다른 글

HTTP Protocol  (0) 2022.08.04
URI 설계 패턴  (0) 2022.08.04
웹 개론  (0) 2022.08.04
전략 패턴  (0) 2022.08.03
파사드 패턴  (0) 2022.08.03

관련글 더보기