RESTful API란?

2023. 1. 30. 11:58·CS 공부

* 본 글은 https://wildeveloperetrain.tistory.com/18 님의 내용이 너무 이해하기 편해 허락 맡고 그대로 가져왔습니다

 

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

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

 

 

 

느낀 점

그동안 HTTP URI, HTTP 메소드 등 써왔음에도 불구하고 RESTful API를 말만 많이 들어봤지 잘 이해가 안됐는데 이 글이 이해가 참 잘 되는거 같다 아직 캐시 이런 것들은 잘 모르지만 강의를 통해서 잘 보충해야겠다!!

'CS 공부' 카테고리의 다른 글

쿠키  (0) 2023.02.03
Http 헤더와 BODY  (0) 2023.02.02
CI / CD란?  (1) 2023.01.30
HTTP 상태 코드(4xx, 5xx)  (0) 2023.01.27
HTTP 상태 코드 소개(2xx, 3xx)  (0) 2023.01.27
'CS 공부' 카테고리의 다른 글
  • 쿠키
  • Http 헤더와 BODY
  • CI / CD란?
  • HTTP 상태 코드(4xx, 5xx)
코딩숙
코딩숙
개발이라는 끝이 없는 바다 묵묵히 꾸준히 항해하기
  • 코딩숙
    코딩숙
    코딩숙
  • 전체
    오늘
    어제
    • 분류 전체보기 (63)
      • CS 공부 (17)
        • 클라우드 (3)
        • 네트워크 (3)
      • 개발 공부 (40)
        • 오류 해결 (4)
        • 알고리즘 (12)
        • Spring (3)
        • JPA (2)
        • TIL(오늘 내가 배운 것) (9)
        • 코드복습 (1)
        • 디자인 패턴 (1)
      • IT 관련 영상 메모 (1)
      • 데일리피드백 (0)
      • Tools (1)
      • Wishy (이력서 평가 프로젝트) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바
    게임 맵 최단거리 자바
    개발자
    프로그래머스
    데이터베이스 백업
    인프런
    user mode
    isAfter()
    변수
    개발공부
    도메인설계
    프로그래머스 네트워크 자바
    programmers #정수 내림차순으로 배치하기
    getter method
    HTTP BODY
    백준
    java
    isBefore()
    setter method
    키 페어 변경
    innodb
    데이터베이스 손상
    키 페어 분실
    JPA
    appsmith
    데이터 타입
    302 Found
    404 Not Found
    마이크로서비스
    http
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
코딩숙
RESTful API란?
상단으로

티스토리툴바