게시: 2021년 2월 11일
최근 백엔드 개발을 진행하다 보니 데이터 송수신 방식(RPC, gRPC 등)에 대해 공부할 기회가 생겼는 데, 그중 제일 기본적인 방식이 HTTP에 대해 생각보다 자세히 모르고 있다는 생각이 들었다. HTTP는 그저 우리가 웹브라우저를 사용하거나 개발할 때 클라이언트와 서버가 정보를 교환하는 가장 기본적인 프로토콜이라는 정도밖에 알지 못해서 좀 더 자세히 알아보고자 이 포스팅을 작성한다.
클라이언트
> 서버에게 요청을 보내는 리소스 사용자 ex) 웹 브라우저, 모바일 애플리케이션, IoT 등
서버
> 클라이언트에게 요청에 대한 응답을 제공하는 리소스 관리자
클라이언트(웹 브라우저, 모바일 등)가 브라우저를 통해서 어떠한 서비스를 URI를 통해 서버에 요청(Request)하면 서버에서는 해당 요청에 대한 결과를 응답(Response)하는 형태로 동작한다.
특정 리소스를 받기 위한 요청이다. 따라서, 리소스의 생성, 수정 및 삭제 등에 사용해서는 안된다.
리소스를 생성하거나 컨트롤러를 실행하는 데 사용한다.
변경 가능한 리소스를 업데이트하는 데 사용되며 항상 리소스 식별 정보를 포함해야 한다.
변경 가능한 리소스의 부분 업데이트에 사용되며 항상 리소스 식별 정보를 포함해야 한다.
PUT을 사용해 전체 객체를 업데이트하는 것이 관례여서 거의 사용되지 않는다.
특정 리소스를 제거하는 데 사용한다.
일반적으로 Request body가 아닌 URI 경로에 제거하려는 리소스의 ID를 전달한다.
클라이언트가 본문 없이 리소스에 대한 헹더만 검색하는 경우 사용한다.
일반적으로 클라이언트가 서버에 리소스가 있는 지 확인하거나 메타 데이터를 읽으려는 때만 GET 대신 사용한다.
클라이언트가 서버의 리소스에 대해 수행 가능한 동작을 알아보기 위해 사용한다.
일반적으로 서버는 이 리소스에 대해 사용할 수 있는 HTTP 요청 메서드를 포함하는 Allow 헤더를 반환한다. (CORS에 사용)
HTTP 상태 코드에 대한 설명은 여기에서 읽어보세요.