REST API, RESTful이란?

JoonYoung Maeng·2022년 3월 14일
0
post-thumbnail

⁉️ REST? RESTful?

REST란 “Representational State Transfer”의 약자로 소프트웨어 아키텍처이다.

단어의 뜻을 각각 풀어보면 “Representational” 표현, “State” 상태, “Transfer” 전달로 리소스를 표현하고 리소스의 상태와 함께 전달한다는 뜻이다.

여기서 말하는 리소스는 소프트웨어가 관리하는 데이터와 같은 모든 것들을 말한다.

그러면 RESTful이란 것은 어떤 것을 나타낼까?

REST 아키텍쳐는 아래에서 설명할 제약조건(특징)들을 가지고 있는데 이 모든 제약조건이 지켜진 형태를 REST “-ful” 하다고 표현한다.

✔️ REST의 제약 조건(특징)

REST 아키텍처의 특징은 6가지로 나타낼 수 있다.

  1. Client - Server (클라이언트 - 서버)
  2. Stateless (무상태성)
  3. Cacheable (캐싱)
  4. Uniform Interface (인터페이스의 일관성)
  5. Layerd System (계층화 시스템)
  6. Code-On-Demand (Optional)

📌 1. Client - Server (클라이언트 - 서버)

클라이언트는 인증, 세션, 컨텍스트를 관리하고 REST 서버로 리소스를 Request하는 역할을 하고, 서버는 클라이언트의 Request를 비즈니스 로직과 함께 처리해 클라이언트에게 리소스를 Response하는 역할을 담당한다.

클라이언트는 요청하고 서버는 그에 따른 응답만 처리하기 때문에 서버와 클라이언트간의 의존성이 줄어든다.

📌 2. Stateless (무상태성)

리소스를 처리하는 작업에 대한 상태를 저장하지 않고, 클라이언트의 리소스 Request에 대해서만 단순히 처리를 한다.

즉, 클라이언트가 관리하는 세션, 쿠키, 컨텍스트와 같은 데이터를 서버에 저장하지 않으며, 서버는 클라이언트의 Request를 각각 Request단위로 구분하고, 각각의 Request를 처리하는데 연관을 짓지 않는다는 특징을 가진다.

📌 3. Cacheable (캐싱)

웹 브라우저의 요청중 60 ~ 80%는 “GET” 메소드를 통한 리소스의 조회이다.

따라서, 서버에서 Response한 리소스에 대해 캐싱을 함으로 써, 이후 REST 서버로 동일한 Request 전에 캐시를 확인하여 REST 서버의 트랜잭션을 줄여줄 수 있고, 리소스에 대해 Response 시간을 줄일 수 있다.

📌 4. Uniform Interface(인터페이스의 일관성)

REST 아키텍처의 Uniforme Interface 제약조건에는 4가지의 하위 제약조건이 모두 충촉되어야 한다.

  1. Identification Of Resources
    1. 리소는 유일하게 식별되어야 하기 때문에 URIHTTP Method (”GET”, “POST”, “PUT”, “DELETE”) 를 이용해 동작을 구분한다.
  2. Manipulation of Resources through Representation
    1. HTTP Method를 이용해 동작을 표현한다.
GET /members/1       // 1번 회원을 조회
POST /members        // 회원 정보를 저장
DELETE /members/1    // 1번 회원을 삭제
PUT /members/1       // 1번 회원을 수정
  1. Self - Descriptive Messages

    1. Request/Response 메세지 스스로가 어떤 동작을 하는지 설명이 되어야한다.
    2. Request 메세지는 HTTP Method를 이용해 어떤 동작을 하는지 설명이 가능하다.
    3. Response 메세지는 HTTP Status Code, Header를 이용해 응답에서 어떤 상태이고, 어떤 응답을 했는지 설명이 가능하다.
    200 OK {"id" : "1", "name" : "zayson"}  // 200 상태코드 OK , 응답 데이터 전달
  2. Hypermedia As The Engine Of Application State (HATEOAS)

    1. 앞의 약자를 따써 “HATEOAS”라고 말한다.
    2. 하이퍼링크를 이용해서 애플리케이션 상태를 전이 하는것을 의미한다.
    3. 리소스 Request에 대한 Response에 다음 Action에 대한 URI를 함께 리턴해줌으로써 요청 URI가 변경되었을 시에 클라이언트가 코드를 고치지 않고, 서버에서 동적으로 생성한 URI를 사용하여 클라이언트 코드를 변경하지 않도록 해줄 수 있다.
    200 OK 
    {
    	"id" : "1", 
    	"name" : "zayson", 
    	"links" : {
    		"grade" : "/members/1/grade",     // 등급을 수정하는 ACTION URI 전달
    		"exp" : "/members/1/exp"          // 경험치를 수정하는 ACITON URI 전달
    	}
    }

📌 5. Layered System (계층화 시스템)

클라이언트는 REST 서버로 요청만 하는 역할을 하고, 서버는 비즈니스 로직 서버, 게이트 웨이, 프록시 서버와 같은 중간 매체를 두거나 인증, 로드 밸런싱과 같은 중간 계층을 두는 것이 가능하다.

즉, 서버는 다중 계층으로 구성이 가능하여 구조상 유연성을 더해준다.

📌 6. Code - On - Demand (Opional)

서버로 부터 코드 혹은 스크립트를 클라이언트에 전달하면 클라이언트가 해당 스크립트를 실행이 가능하다. (JavaScript)

📄 References

[10분 테코톡] 이지의 RESTful : https://www.youtube.com/watch?v=xY7cpMuWh4w&t=974s

REST, REST API, RESTful에 대해 이해한다. : https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

profile
백엔드 개발자 지망생입니다!

0개의 댓글