본문 바로가기
책벌레와 벌레 그 사이 어딘가/개념쌓기

[개념쌓기] RESTful하다

by veganwithbacon 2022. 12. 25.
반응형

✅REST 란?

REST(Representational State Transfer, 자원의 상태 전달)

네트워크 아키텍쳐 원리

 

✅RESTful하다란 그럼 무엇일까?

RESTful한 API가 아닌 RESTful 그 자체에 대해 궁금증이 생겼다.

 

REST의 원리를 잘 지키는 시스템을 RESTful 하다라고 한다.

 

🤔그렇다면 REST의 특징은 무엇일까?

우선 REST의 구성을 먼저 알아보자

REST API는 다음으로 이루어져 있다

  • 자원(RESOURCE) - URI
  • 행위(Verb) - HTTP METHOD
  • 표현(Representations)

 

🤔REST의 특징

1) Uniform(유니폼 인터페이스)

URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일

 

2)Stateless(무상태성)

REST는 무상태성 성격을 갖는다. 다시 말해 작업을 위한 상태정보를 따로 저장하고 관리나 쿠키정보를 별도로 저장하고 관리하지 않기에 API 서버는 들어오는 요청만을 단순히 처리하면 됩니다. 때문에 서비스를 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해집니다.

 

3)Cacheable(캐시 가능)

REST의 가장 큰 특징 중 하나는 HTTP라는 기존 웹표준을 그대로 사용하기 때문에, 웹에서 그대로 활용이 가능하다.

따라서 HTTP가 가진 캐싱 기능이 적용 가능합니다. 따라서 HTTP가 가진 캐싱 기능이 적용 가능하다.  HTTP 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용하면 캐싱 구현이 가능하다.

 

4)Self-descriptiveness (자체 표현 구조)

REST의 또 다른 큰 특징 중 하나는 REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어 있다는 것입니다.

 

5) Client - Server 구조

REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야할 내용이 명확해 서로간 의존성이 줄어든다.

 

6)계층형 구조

REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있게 합니다.

 

✅마지막으로 자원을 표현하는 URI에 대해 설계 시 주의할 점에 대해 알아보자.

1. 슬래시 구분자(/)는 계층 관계를 나타내는데 사용

 

2. URI 마지막 문자로 슬래시(/)를 포함하지 않는다.

 

3. 하이픈(-)은 URI 가독성을 높이는데 사용

(불가피하게 긴 URI경로를 사용하게 되면 하이픈을 통해 가독성을 높일 수 있다.)

 

4. 밑줄(_)은 URI에 사용하지 않는다.

 

5. URI 경로에는 소문자가 적합하다.

 

6. 파일 확장자는 URI에 포함시키지 않는다.

 

 

✅리소스 간의 관계를 표현하는 방법

REST 리소스 간에는 연관 관계가 있을 수 있고, 다음과 같은 표현방법으로 사용한다.

/리소스명/리소스 ID/관계가 있는 다른 리소스명

ex)    GET : /users/{userid}/devices (일반적으로 소유 ‘has’의 관계를 표현할 때)

 

만약에 관계명이 복잡하다면 이를 서브 리소스에 명시적으로 표현하는 방법도 있다

 GET : /users/{userid}/likes/devices (관계명이 애매하거나 구체적 표현이 필요할 때)

 

👍위와 같이 REST의 기본 원칙을 성실히 지킨 서비스 디자인은 “RESTful 하다.” 라고 흔히 표현한다.

REST API 설계 시 가장 중요한 항목은 다음의 2가지로 요약할 수 있다.

첫 번째, URI는 정보의 자원을 표현해야한다.

두 번째, 자원에 대한 행위는 HTTP Method(GET,POST,PUT,DELETE)로 표현한다.

 

반응형

댓글