HTTP란?
HTTP는 HyperText Transfer Protocol의 약자로 웹 상에서 정보를 전송하기 위한 통신 프로토콜로써 HTML과 같은 문서를 전송하는 것에 사용된다.
클라이언트가 HTTP requset를 서버에 보내면 서버는 HTTP response를 클라이언트에 보내는 구조이다. request message는 start line(method, path, HTTP version), headers, body로 구성되어 있고 response message는 status line(HTTP version, status code, status message), headers, body로 이루어져 있다.
HTTP는 서버에 연결 후 요청에 응답을 받으면 끊어버리는 Connectionless 특성을 갖는다. 이로 인해 많은 사람이 웹을 이용하더라도 실제 동시 접속을 최소화하여 더 많은 유저의 요청을 처리할 수 있다. 하지만 연결을 끊었기 때문에 클라이언트의 이전 상태(로그인 유무 등)를 알 수 없다는 Stateless 특성이 생기게 된다. 정보를 유지할 수 없는 Connectionless, Stateless 특성을 가진 HTTP의 단점을 상쇄하기 위해 Cookie, Session, JWT 등이 도입되었다.
추가적으로 HTTP는 정보를 text형식으로 주고 받기 때문에 중간에 인터셉트할 경우 데이터 유출이 발생할 문제가 있어, HTTP에 암호화를 추가한 프로토콜이 HTTPS이다.
HTTP 메서드?
HTTP 메서드에는 클라이언트가 하고 싶은 처리를 서버에게 전달하는 역할을 수행한다. HTTP 메서드 종류는 9개로 정의되어 있다.
GET
가장 빈도가 높은 메서드이다. GET 메서드는 클라이언트가 서버에게 리소스를 연결(조회)하는 메소드이다. GET 요청에 경우 필요한 정보를 특정하기 위해 URL위에 식별자 또는 Query String을 추가하여 정보를 조회한다.
GET의 주요 특징으로는 캐시가 가능하다는 것이다. 한 번 서버에 요청한적이 있다면 브라우저가 그 결과값을 캐시하여 저장해둔다. 이후 동일한 요청이 오면 브라우저에 저장된 캐시값을 활용한다.
POST
GET 다음으로 이용빈도가 높은 메서드이다. 서버의 리소스를 생성하거나 추가하는 역할을 수행한다. 클라이언트가 Body를 통해 전달한 데이터를 서버가 처리하는 method이다. 주로 생성에 역할을 수행하지만 리소스마다 다양하게 처리도 담당한다.
GET과의 차이점은 브라우저 히스토리에 남지 않고 캐시도 불가능하다는 차이가 있다.
PUT
PUT은 두 가지의 기능을 가지고 있다. 리소스의 갱신과 리소스의 작성하는 역할을 수행한다. 기존 데이터가 있다면 그 데이터 전체를 갱신하며 없으면 리소스를 새로 작성한다.
새로 작성한다는 개념에서 POST와 동일한 작업을 진행하는 것 같지만 차이점이 존재한다.
이 차이점을 멱등성이라는 표현으로 구분한다.
POST에서의 리소스를 작성하는 행위는 신규 리소스를 지속적으로 생성하는 것을 의미한다. (두 번 실행하면 2개의 리소스가 생성) 반면에 PUT은 두 번 실행된다는 개념은 신규 리소스를 생성하고 그 뒤로 생성된 리소스를 갱신하는 작업을 수행한다.
결론적으로 PUT은 멱등성하다고 말할 수 있고 POST는 멱등하지 않다고 말할 수 있다.
PATCH
리소스를 갱신하면 메서드이며, PUT과 다르게 전체 갱신이 아니라 부분적으로 갱신을 수행한다.
DELETE
이름 그대로 리소스를 삭제하는 메서드이다.
HEAD
GET과 유사한 메서드이다. GET은 리소스를 취득하는 메서드이지만, HEAD는 리소스의 헤더(메타데이터)만을 취득하는 메서드이다.
OPTIONS
리소스가 지원하고 있는 메서드의 목록을 반환하는 메서드이다.
CONNECT
동적으로 터널 모드를 교환하며, 프록시 기능을 요청이 사용된다.
TRACE
원격지 서버에 루프 백 메세지를 호출하기 위해 테스트(시험)용으로 사용한다.
HTTP의 종류를 알아봤고 이들 중 GET, POST, PUT, DELETE (+PATCH)는 CRUD라는 성질을 충족시키고 있으므로 대표적인 메서드라고 할 수 있다. (= 협업에서 API 통신 시 주로 사용하는 메서드)
Reference
[웹 개발자를 위한 웹을 지탱하는 기술] 책
'Knowledge > 네트워크' 카테고리의 다른 글
[네크워크] HTTP Status Code(HTTP 상태 코드) (1) | 2023.12.14 |
---|---|
[네크워크] CORS란? (+ Spring Boot에서 설정하기) (0) | 2023.12.12 |
[네트워크] 세션(Session) vs 쿠키(Cookie) vs 토큰(Token) (0) | 2023.12.07 |
[네트워크] 인터넷과 웹의 관계 (1) | 2023.10.23 |
[네트워크] URI와 URL 그리고 URN (0) | 2023.10.10 |