[CS] REST: HTTP의 확장

ssoxong·2024년 10월 18일

CS

목록 보기
11/13

REST란 무엇일까?

보통 REST API, RESTful API로 많이 접해봤을 것이다. 하지만 정확히 REST란 무엇이고, REST와 Restful의 차이점이 무엇인지 정확히 알진 못한다.
이러한 것과 REST라는 개념이 어떻게 시작되었는지 알아보자.

기존 웹

기존 웹은 GET, POST 메소드를 주로 사용하였다. 브라우저에서 서버로 무언가를 받을 때는 GET을 사용했고, 브라우저에서 서버로 무언가를 보낼 때는 POST를 사용했다.
하지만 현재는 GET을 보낼 때/받을 때 전부 사용하고 있다. (uri 파라미터, 쿼리 파라미터 등) 또한 원래 보낼 때 사용하던 POST는 GET 요청으로 할 수 없울 정도로 URL 길이가 길거나, 파일 업로드, 보안이 필요할 때만 사용하고있다.

REST

REST의 사전적 정의는 웹의 자원을 정의하고 자원에 대한 주소를 지정하는 방법에 대한 아키텍처 스타일이다.
또한 HTTP 메소드 (GET/POST)를 확장하여 웹이 아니더라도 HTTP로 통신할 수 있도록 확장한 형태이다.

방화벽이 생기면서 웹이 아닌 것도 HTTP 통신을 할 필요가 생겼다.

방화벽의 등장으로 인한 확장

기본적으로 방화벽의 등장으로 인해 80, 8080, 443, 8443 포트 이외에는 block하고 HTTP, HTTPS, TCP만 통과할 수 있게되었다. 따라서 기존 FTP(20), telnet(23) 등 HTTP가 아닌 프로토콜 포트 전부가 방화벽을 넘어갈 수 없는 것이었다.
결과적으로 방화벽을 넘어갈 수 있도록 HTTP를 사용하는 웹이 아닌 형태가 필요해졌다.

대표적으로 80/HTTP를 사용하는 파일 서버인 WebDAV, ElasticSearch 등이 존재한다.
이러한 형태로 계속 발전하기 이해 HTTP를 확장하여 GET/POST/PUT/DELETE를 전부 가능하도록 하였다.

HTTP 메소드와 REST 기반 CRUD

REST는 HTTP 메소드를 활용하여 CRUD 작업을 매핑한다.
CRUD는 Create, Retrieve, Update, Delete를 의미한다.

  • Create(POST)
  • Retrieve(GET)
  • Update(PUT/PATCH)
  • DELETE(DELETE)

REST vs Restful

Rest를 CRUD 사용하는 것이라고 정의하면, Restful은 무엇일까?
기본적으로 url 파라미터 부분에서 차이를 보이는데, GET 요청시 a=2, b=3이라는 값을 요청했다고 하자

REST API: localhost/main?a=2&b=3
RESTful API: localhost/main/2/3

REST API는 GET 방식을 그대로 사용하는 것이고, RESTful API는 REST 형식처럼 CRUD를 사용하되 더 예쁘게 다듬어주는 형태이다. (=pretty url) 따라서 URL 설계 측면에서 더 직관적이고, 자원 중심적인 접근을 할 수 있다.

정리

REST 가 나온 배경: 방화벽의 도입으로 HTTP 통신을 해야하는 것이 늘어났음 -> HTTP 메소드의 확장이 일어난 형태가 REST
REST vs RESTful: 기본적으로는 같으나 RESTful 형태가 더 다듬어진 형태 (pretty url)

profile
배운 것을 기록하는 습관

0개의 댓글