Programming/Web

RESTful API 개념과 특징, 설계 시 중요한 점 (Representational State Transfer)

Jan92 2021. 8. 10. 00:30

RESTful API

RESTful API (Representational State Transfer) 란,

 

REST API는 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용한 웹의 장점을 최대한 활용한 아키텍쳐 스타일입니다.

 

자원의 이름 (자원의 표현) 으로 구분하여 해당 자원의 상태 (정보) 를 주고받는 모든 것을 의미하며, 조금 더 자세하게는 HTTP URI로 자원을 표현하고, Method (GET, POST, PUT, PATCH, DELETE)를 통해 자원에 대한 처리를 합니다.

 


 

RESTful API는 Resource (자원) + Method (행위) + Representation of Resource (자원의 형태) 세 가지로 구성됩니다.

 

  • Resource : 서버는 Unique 한 ID를 가지는 Resource를 가지고 있으며, 클라이언트는 이 리소스에 요청 (Request)를 보냅니다. 쉽게는 URI이 이 Resource에 해당됩니다.
  • Method : 서버에 요청을 보내기 위한 방식으로 GET, POST, PUT, PATCH, DELETE가 있으며, CURD 연산 중 처리를 위한 연산에 맞는 method를 사용하여 서버에 요청을 보내야 합니다.

  • Representation of Resource : 클라이언트와 서버가 데이터를 주고받는 형태로 JSON, XML, TEXT, RSS 등이 있습니다. 요즘 추세는 Key, Value를 활용한 JSON을 많이 사용합니다.

 

앞에서 언급된 내용이지만 REST API 설계시 가장 중요한 두 가지 항목은 다음과 같습니다.

 

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

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

 

 

실제 URI의 예시를 보면 아래와 같습니다.

@GetMapping("/members")
public ResponseEntity<?> 회원 리스트 조회() {}

@GetMapping("/members/{memberIdx}")
public ResponseEntity<?> 회원 조회() {}

@PostMapping("/members")
public ResponseEntity<?> 회원 추가() {}

@PutMapping("/members")
public ResponseEntity<?> 회원 수정() {}

@DeleteMapping("/members")
public ResponseEntity<?> 회원 삭제() {}

* URI는 정보의 자원을 표현해야 하므로 동사보다는 명사를 사용합니다.

* delete, update 같은 동사는 "/member/delete" 처럼 URI에 포함하지 않고 HTTP Method를 통해 전달합니다.

* / 는 계층 관계를 나타낼 때 사용하며, URI의 맨 마지막에는 / 를 사용하면 안 됩니다.

 


REST의 특징입니다.

 

 

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

: HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하며, 특정 언어나 기술에 종속되지 않습니다.

 

 

- Stateless (무상태성)

: REST는 작업을 위한 상태 정보를 따로 저장하거나 관리하지 않습니다. 

(HTTP 프로토콜이 Stateless Protocol 이기 때문에 REST도 같은 무상태성을 갖습니다.)

 

 

- Cacheable (캐시 가능)

: REST는 HTTP라는 기존 웹 표준을 그대로 사용하기 때문에 웹에서 사용하는 기존 인프라를 그대로 활용할 수 있습니다.

덕분에 HTTP 프로토콜 표준에서 사용하는 Last-Modified 태그나 E-Tag를 이용하여 캐싱 구현이 가능합니다.

이런 식으로 캐시를 사용하여 응답 시간을 빠르게 하면 REST Server 트랜잭션이 발생하지 않기 때문에 전체 응답 시간, 성능, 서버 자원의 이용률을 높일 수 있다는 장점이 있습니다.

 

 

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

: REST는 REST API 메세지만 보고도 이를 쉽게 이해할 수 있도록 자체 표현 구조로 되어있습니다.

 

 

- Client-Server 구조

: REST 서버는 API 제공 및 비즈니스 로직 처리, 저장의 역할을 하고 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보) 등을 직접 관리하는 구조이기 때문에 서버와 클라이언트 각각의 역할이 확실하게 구분됩니다.

때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로 간의 의존성이 줄어들게 됩니다.