Back-end/네트워크

RESTful

Ho's log 2021. 4. 28. 16:50

REST?

REpresentaional (표현) Steate (상태) Transfer (전달)

자원의 표현(HTTP URI)을 가지고 상태(Http Method)를 전달

아키텍쳐 스타일의 제약조건을 모두 만족하는 시스템

 

제약 조건

1. Client - Server

2. Steateless

3. Cache

4. Uniform InterFace

 -Identification of Resources

 -Manipulation of Resources through Representaiton

 -Self-Descriptive Message

 -Hypermedia As The Engine of Application State

5. Layered System

6. Code-On-Demand(Option)

 

Level0

Http를 RPC를 기반으로한 원격 통신을 위한 터널링 메커니즘으로 사용됨

POX를 주고받는 단순한 RPC 스타일 시스템

*RPC(Remote Procedure Call): 별도의 원격제어를 위한 코딩없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게하는 프로세스간 통신 기술 

1. Server - Client

Client가 Server에게 Request를 보내고, Server가 Client에게 Response를 보내는 구조

서버는 API제공과 제공된 API를 이용하여 비즈니스 로직을 처리하거나 저장하는 역할

클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보) 등을 관리하는 역할 

 

2. StateLess

클라이언트와 서버의 통신에는 상태가 없어야 한다

모든 요청은 필요한 모든 정보를 담고 있어야 한다 

 

3. Layered System

계층 으로 구성이 가능해야 한다

클라이언트 입장에서는 서버만 호출함

서버는 다중 계층으로 구성될 수 있음

*순수 비즈니스 로직을 수행하는 서버, 사용자 인증, 암호화, 로드 밸런싱 등을 하는 계층을 추가 하거나 PROXY, 게이트웨이 같은 중간 매체를 사용가능함

 

4. Manipulation of Resources through Representaiton

Respresentation의 형태는 Content-type으로 결정된다

text/html, aplication/xml, application/json 등

 

Level1

리소스를 도입한다

모든 요청을 서비스엔드포인트로 보내는 것이 아니라 개별리소스와 통신한다

 

 

1. Identification of Resources

자원은 유일하게 식별가능해야 한다

Resource가 하나 이상의 유일한 특정 주소인 URI롤 식별 되는지

아직 POST Method로만 Request를 보내기 때문에 URI나 RequestBody로 어떤 동작을 할지 알려줘야 한다.

 

Level2 - HTTP Methods

Get, Put, DELETE 등 다른 메소드를 사용 할 수 있다

Level0, 1 보다 HTTP의 사용법에 가능한 가깝게 사용한다

 

1. Manipulation of Resources through Representaion

HTTP Methods Idempostent Safe
GET Y Y
HEAD Y Y
PUT Y N
POST N N
DELETE Y N
PATCH N N

*Idempotent : 같은 요청을 여러 번 하더라도 그 결과가 동일함

*Safe : 자원을 변경하지 않음 

HTTP Method로 표현(CRUD)을 담아야 한다

안전한 오퍼레이션과 안전하지 않을 오페레이션 간의 강한 분리를 제공해야 한다.

 

2. Self - Descriptive Messages

메시지는 스스로를 설명해야 한다

메시지는 요청 작업을 완료할 수 있도록 응답을 이해 할 수 있도록 충분한 정보들을 HTTP Method, Status Code, Header등을 활용하여 전달 해야 한다.

발생한 에러의 종류를 커뮤니케이션하기위해 상테 코드를 사용 

 

3. Cache

일반적인 서비스에서 80%의 트랙잭션이 Select와 같은 조회성 트랜잭션

GET은 얼마든지 호출에도 매번 같은 결과(Idempotent)를 만들어내므로 캐싱이 가능하다 

 

Level3

HATEOAS 도입

클라이언트가 전적으로 서버와 동적인 상호작용이 가능함

클라이언트가 서버로부터 어떠한 요청을 할 때, 요청에 필요한 URI를 응답에 포함시켜 반환하는것 

 

1. HATOAS(Hypermedia As The Engine of Application State)

하이퍼링크를 통해서 애플리케이션의 상태가 전이되어야한다

HTTP Response에 다음 Action이나 관계되는 리소스에 대한 HTTP Link를 함께 리턴

요청 URI가 변경되더라도 클라이언트에서 동적으로 생성된 URI를 사용함으로써, 클라이언트가 URI수정에 따른 코드를 변경하지 않아도 됨 

 

 

+(Option)Code - On - Demand

서버가 네트워크를 통해 클라이언트에 프로그램을 전달하면 그 프로그램이 클라이언트에서 실행될 수 있어야 한다. 

(javascrpit)

 

요약

REST는 소프트웨어 아키텍쳐의 한 형식이다

REST 아키텍쳐는 여러 개의 제약 조건을 가지고 있다

RESTful은 위의 제약 조건들을 모두 만족시켜야 한다.

HTTP Method, Status Code를 용도에 맞게 써야하고, HTTP헤더와 LINK를 신경 쓰면 RESTful한 서비스를 설계!

 

 

www.youtube.com/watch?v=xY7cpMuWh4w&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=86

 

'Back-end > 네트워크' 카테고리의 다른 글

Foward Proxy, Reverse Proxy  (0) 2021.05.22
Connection Pool& Keep-Alive  (0) 2021.05.19
요청 응답 흐름 과정  (0) 2021.05.12
TCP/ UDP  (0) 2021.05.07
인증과 인가  (0) 2021.04.29