부스트코스-웹백엔드

웹의 작동 방식과 REST

AndoneKwon 2021. 7. 20. 23:09

HTTP의 이해

HTTP란?

Hypertext Transfer Protocol의 약어로 서버와 클라이언트가 인터넷 상에서 데이터를 주고받기 위한 프로토콜이다.

HTTP 프로토콜은 기본적으로 서버/클라이언트 모델을 따르며 클라이언트와 서버가 계속적으로 연결되지 않은 Stateless 한 특징을 가지고 있다.

(계속적으로 연결되어 있지 않다고 했지만 HTTP 또한 TCP 프로토콜 위에서(모든 HTTP 버전이 그런것은 아님) 작동하기 때문에 소켓을 사용하게 된다.)

연결을 끊어버리기 때문에 클라이언트의 이전 상황을 알 수 없기 때문에 정보를 유지하기 위해서 Cookie와 같은 기술이 등장하였다.

HTTP의 작동방식은 아래 그림과 같다.

http

출처 : 네이버 웹백엔드 부스트코스 강의

HTTP는 여러가지의 METHOD를 지원하는데

  • Get : 정보를 요청하기 위해 사용하는 메서드이다.(select의 역할을 한다)
  • Post : 정보를 밀어넣기 위해 사용된다.(Insert)
  • Put : 정보를 수정하기 위해 사용된다.(Update)
  • Delete : 정보를 삭제하기 위해 사용된다.(Delete)
  • Head : HTTP에서 헤더 정보만 요청하며 자원의 존재 여부 혹은 서버의 이상 여부를 확인한다.
  • OPTION : 웹서버가 지원하는 메서드의 종류를 반환한다.
  • Trace : echo와 같은 동작을 한다.

여기서 Put메서드의 경우 자원이 존재하면 정보를 수정하고 자원이 존재하지 않는 경우에는 자원을 생성해주는데 Put도 insert로 사용할 수 있지만 Post와는 다르게 "멱등성"을 가진다.(Delete도 마찬가지)

"멱등성"이란 연산을 여러번 적용하더라도 한번만 반영되는 성질을 의미하는데 Post의 경우 동시에 들어왔을때 모든 요청을 처리하지만 Put 메서드의 경우 멱등성을 가지기 때문에 같은 연산이 여러번 왔을때 정보가 한번만 반영된다.

URL

3가지 요소로 구성된다.

url img

인터넷 상의 자원의 위치를 나타내기 위한 표준이며 특정 웹서버에 특정 파일에 접근하기 위한 경로 혹은 주소이다.

REST

REST란 Representational State Transfer의 약자로 자원을 이름으로 구분지어 해당 자원의 상태를 받아오거나 관리하는 모든 것을 의미한다.

여기서 자원이란 소프트웨어가 관리하는 모든 것을 말한다.

HTTP Url을 통해서 자원을 표현(represent)하고 HTTP에 있는 메서드를 이용하여 해당 자원에 대한 CRUD를 적용하게 된다.

REST는 결론적으로 자원이 중심이 되며 이 자원을 어떻게 관리 또는 다루고자 하는데에 그 중심을 둔다.

장점

  • REST를 이용하게 된다면 기존에 있는 HTTP 프로토콜의 인프라를 이용하여 사용하면 되기 때문에 호환성이 뛰어나며 HTTP의 장점을 동시에 가져갈 수 있다.
  • HTTP를 사용하는 모든 서비스에서 사용이 가능하다.
  • 서버와 클라이언트의 역할을 명확히 분리해준다.
  • URL의 정보를 통해 하고자 하는 바를 명확히 이해할 수 있다.

단점

  • 명확한 표준이 존재하지 않는다.
  • 사용할 수 있는 메서드가 4가지 밖에 존재하지 않는다.
  • 구형 브라우저의 경우 PUT과 DELETE 같은 메서드를 지원하지 않을 수 있다.

REST를 구성하는 요소

URI : 자원을 표현하고 구성한다.

Http Method : 자원에 대한 행동을 정의한다.

표현 : 클라이언트가 한 자원에 대한 행동에 대해 "표현" 해주며 표현 방식에는 json, xml 등과 같은 여러가지 방식이 존대한다.

특징

REST는 기본적으로 HTTP를 이용하여 정의하기 때문에 CS(Server Client) 구조를 가지며 Stateless(무상태) 특징을 모두 공통으로 가져간다.

Rest API

우선 API란 Application Programming Interface의 약자로 컴퓨터 프로그램과의 상호작용을 위해 제공하는 인터페이스라고 생각하면 된다.

기존에는 Client가 유저에게 자원을 요청 할 시에 서버에서 뷰를 처리해서 주는 SSR 방식을 사용했으나 최근 트랜드로는 서버에서 뷰를 처리해서 주지 않고 API를 통해 서버로부터 자원을 받아 Client에서 자원을 올바르게 배치하는 CSR 방식을 사용한다.

이러한 API를 REST하게 작성하는 것을 REST API라고 한다.

REST Api의 설계 규칙은 아래와 같다.

  1. URI는 자원을 나타내야한다.
    1. 자원은 동사보다는 명사를 이용해 표현한다.
    2. 도큐멘트 이름(자원 하나)은 단수로 표현해야한다.
    3. 컬랙션 이름(여러개의 자원)은 복수로 표현해야한다.
  2. 자원에 대한 행위는 HTTP 메서드를 이용해 표현한다. 따라서 URI에 행동을 표현하는 동사표현이 들어가면 안된다.
  3. 슬래시를 이용해 계층 관계를 나타내는데에 사용하며 하이픈을 이용한다.(언더바(_)는 가독성이 떨어지기 떄문에 쓰지 않는다.)
  4. 경로에는 소문자를 사용하낟. 최근에는 대소문자를 구분하도록 규정되어있기는 하지만 구분 못하는 경우도 있다.
  5. 파일 확장자는 경로에 포함하지 않는다.
  6. 슬래시(/) 뒤에 변경되는 자원은 고유의 값을 가지며 해당 값만 변경되어야 한다.

다른 규약과 프로토콜은 SOAP라는 방식이 존재한다.

Reference

https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

https://velog.io/@stampid/REST-API%EC%99%80-RESTful-API

틀린 내용이 있다면 댓글 달아주세요!