[ RESTful ] REST와 RESTful 알기

Da-hye·2021년 4월 5일
0

RESTful

목록 보기
1/1
post-thumbnail

REST 란,

Representational State Transfer, 정보를 얻고자 하는 자원에 고유한 이름을 붙혀, 해당 자원의 상태를 서버와 클라이언트 간 주고 받는 것을 의미한다.

REST 의 특징은,

REST 방법론을 이용해 API를 설계했을 때 아래와 같은 특징을 지닌다.

1) 서버/클라이언트 (Server-Client) 구조
자원에 대해 클라이언트는 request, 서버는 response 하는 구조로 각각의 역할이 확실하게 구분되고, 일관적인 인터페이스로 분리되어 작동할 수 있다.

2) 무상태성 (Stateless)
서버는 세션, 쿠키 정보를 별도로 관리하지 않고, 데이터의 상태정보를 기억할 필요 없이, 클라이언트 사이드에서 들어온 요청에 대해서만 처리해주면 되기 때문에 구현이 쉽고 단순해진다.

3) 캐시 처리 가능 (Cacheable)
클라이언트는 응답 데이터를 캐싱할 수 있어야한다.

4) 자체 표현 구조 (Self-descriptiveness)
JSON형태의 구조로 구성되어, REST API 메시지를 만 확인하고도 어떤 메서드로 무슨 요청을 하고 있는지 직관적으로 이해가 가능하다.

5) 계층형 구조
서버의 계층을 다중으로 구성하여, 보안, 암호화 계층 등을 추가하여 구조상의 자유도를 높일 수 있다. Proxy, Gateway와 같은 네트워크 기반의 중간매체 사용도 가능하다.
ex) 사용자 인증을 위해 request 헤더에 토큰을 추가하여 서버에서 인증 절차를 거칠 수 있게 한다.

RESTful API

⚠️ URI 설계 시 주의할 점

  • 슬래시 구분자(/)는 계층 관계를 나타내는 것에 사용한다.
  • URI 마지막 문자에 슬래시(/)를 포함하지 않는다.
  • 파일확장자는 URI에 포함하지 않는다.
  • 밑줄(_)은 URI에 포함하지 않으며, 하이픈(-)을 이용하여 가독성을 높인다.
  • URI 경로에는 소문자가 적합하다.

Method 방식

대표적으로 사용하는 Method는 GET, POST, PUT, DELETE 이다.

🚀 GET 방식

  • GET을 통해 해당 자원을 조회하고, 가져올 수 있다.
  • 주소창에 쿼리 스트링이 그대로 노출되어 보안성이 낮다.
  • POST 보다 상대적으로 전송 속도가 빠르다.

🚀 POST 방식

  • POST를 통해 해당 URI를 요청하면, 자원을 생성한다.
    즉, 클라이언트에서 서버로 일정 크기 이상의 데이터를 전송한다.
  • 주소창에 전송 데이터의 정보가 노출되지 않아 GET에 비해 보안성이 높다.
  • GET 보다 속도가 느리다.
  • 서버로 데이터를 전송하기 전 인코딩하고, 전송 후 서버에서 디코딩 작업을 해주어야 한다.

🔎 더 알아보기 : GET vs POST 차이
프로젝트를 진행하면서 GETPOST의 차이에 대해서 궁금했다. 어떤 상황, 어떤 상태에 맞게 자원을 관리해야하는지 REST의 개념에 더 접근하여 알아보려 한다.
GET 방식
- 클라이언트에서 서버에 데이터를 요청할 때 주로 사용
- 전달되는 데이터가 255개의 문자를 초과하면 문제가 발생할 수 있다.
POST 방식
- 클라이언트에서 서버로 데이터를 전송할 때 주로 사용
- 서버에 많은 데이터를 전송하기 위해서 주로 사용


🚀 PUT 방식

  • 해당 자원의 전체 교체 및 수정이 필요할 때 사용한다.
    🚀 DELETE 방식
  • 해당 자원을 삭제할 때 사용한다.

💭

REST에 대한 개념은 알고 있었지만, 추상적이었기에 정확히 어떤 과정을 의미하는지 모르고 있었다. 서버와 클라이언트 간의 데이터를 주고받는 프로젝트를 통해 react-router와 fetch를 더 자세히 공부해보고 실습해보면서, RESTful한 API의 설계 원리에 대해 확실히 알게 된 것 같다. 다만 앞으로 여러 다양한 상황에서 자원을 관리해보면서, 각각의 역할에 맞는 메소드를 활용해 RESTful한 방식에 대해 더 알아가야할 것 같다고 느꼈다 😊

profile
🌱 차근차근, 오래 즐겁게!

0개의 댓글