ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HTTP가 뭐예요? (HTTP Request methods와 Response status code)
    HTTP 2022. 10. 10. 12:00
    반응형

    지난 포스트를 통해 우리는 REST에 대해 알아보고 RESTful 한 API를 만들기 위해 지켜야 할 조건들에 대해 알아보았습니다.

     

    2022.10.08 - [HTTP] - HTTP가 뭐예요? (REST)

     

    HTTP가 뭐예요? (REST)

    지난 포스트를 통해 우리는 HTTP의 특징과 요청, 응답 시에 HTTP Message 구조를 알아보았습니다. 2022.10.07 - [분류 전체보기] - HTTP가 뭐예요? (HTTP의 특징과 구조) HTTP가 뭐예요? (HTTP의 특징과 구조) 지.

    b-story.tistory.com

    오늘은 HTTP Reqeuest method와 HTTP Response status code에 알아보고 어떠한 특징을 가지고 있는지 알아보도록 하겠습니다.

     

     

    • HTTP Request method

    Client는 요청의 목적이나 종류를 알리는 수단으로 HTTP Request message에 HTTP Request method를 포함하여 요청을 보냅니다.

     

    우리는 여기에 Idempotent (멱등성)이라는 개념을 더해 각각의 Method들이 어떠한 목적을 나타내고 있고, 어떻게 사용하는 것을 지향하는지 알아보도록 하겠습니다.

     

    Idempotent (멱등성)

     

    멱등성이란 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질입니다.

    public int absolute(int number) {
        return Math.abs(number);
    }

    위의 함수는 임의의 수를 입력받으면 그 수의 절댓값을 반환합니다.

     

    이 함수는 -5라는 숫자를 여러 번 연산하여도 항상 5라는 값을 반환하기 때문에 멱등성을 갖는다고 할 수 있습니다.

     

     

    HTTP에서의 멱등성

     

    HTTP에서는 동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 가지고, 서버의 상태도 동일하게 남을 때, 해당 Method가 멱등성을 가졌다고 말합니다.

     

    멱등성을 고려할 때에는 Server의 상태만 고려하면 되며 Response status code는 신경 쓰지 않아도 됩니다.

    DELETE /members/id HTTP/1.1

    만약 id에 해당하는 자원이 Server에 존재한다고 하면, 위 요청의 첫 번째 응답은 “삭제 성공”입니다.

     

    그리고 두 번째 응답은 “삭제 실패” 또는 “해당 자원 없음”일 것입니다.

     

    하지만 요청에 대한 Server의 상태는 “id 삭제”이며, 이와 같은 경우 Response status code에 관계없이 DELETE Method는 멱등성을 가졌다고 합니다.

     

     

    Safe methods (안전한 메서드)

     

    Safe methods란 멱등성과 별개로 서버의 상태를 절대 변경시키지 않는 Method를 말합니다.

     

    위의 두 개념들을 포함하여 HTTP Request method 중 자주 사용되는 Method들에 대해 알아보도록 하겠습니다

     

     

    POST (Non-Idempotent, Unsafe)

    POST /members HTTP/1.1
    
    Body {
        name: "master",
        age: 30
    }

    POST 요청은 내용 전송을 의미하며 요청 데이터를 HTTP Request body에 포함하여 보냅니다.

     

    주로 새로운 자원 생성을 위해 사용하며, 매번 새로운 자원이 생성됨으로 멱등성을 가지지 않습니다.

     

    또한 서버의 상태를 변경 (자원 생성)시키는 행위를 함으로 Unsafe 합니다.

     

     

    GET (Idempotent, Safe)

    GET /members HTTP/1.1

    GET 요청은 자원 취득을 의미합니다.

     

    주로 저장되어있는 자원 목록을 읽어오기 위해 사용하며, 멱등성을 가집니다.

     

    또한 서버의 상태를 변경하지 않음으로 Safe 합니다.

     

     

    PUT (Idempotent, Unsafe)

    PUT /members/{id} HTTP/1.1
    
    Body {
    	name: "slave",
    	age: 31
    }
    

    PUT 요청은 자원의 내용 갱신을 의미합니다.

     

    주로 저장되어있는 자원의 정보 전체를 내가 보낸 정보로 대체하기 위해 사용하며, 멱등성을 가집니다.

     

    또한 서버의 상태를 변경 (자원 변경)시키는 행위를 함으로 Unsafe 합니다.

     

     

    DELETE (Idempotent, Safe)

    DELETE /members/{id} HTTP/1.1
    

    DELETE 요청은 자원의 삭제를 의미합니다.

     

    멱등성을 가지며, 서버의 상태를 변경 (자원 삭제)시키는 행위를 함으로 Unsafe 합니다.

     

     

    • HTTP Response status code

    Client로부터 요청이 전달되었을 때 Server는 목적에 맞는 행동을 수행하고, 수행의 결과를 위해 HTTP Response status code를 전달합니다.

     

    Status code는 총 5개의 클래스로 분류되며 상태 코드의 첫 번째 숫자는 응답의 클래스를 정의합니다.

     

    우리는 이 중 많이 사용되는 4개의 클래스와 상태 코드에 대해서만 다루어보도록 하겠습니다.

     

     

    2XX (Success)

     

    Client가 요청한 동작을 수신하여 이해했고, 승낙했으며, 성공적으로 처리되었음을 의미합니다.

     

    200 [OK] : 요청이 정상적으로 수행된 상태

    201 [Created] : 자원 생성이 정상적으로 수행된 상태

    202 [Accepted] : 요청은 정상적으로 받았으나 완전하게 처리되지 않은 상태

    204 [No Content] : 요청이 정상적으로 수행되었고, 관련 자원이 더 이상 Server에 없는 상태

     

     

    3XX (Redirect)

     

    Client의 요청을 마치기 위해 추가적인 동작이 필요함을 나타냅니다.

     

    예를 들어, 특정 자원을 삭제한 후 해당 자원에 대한 정보를 보여줄 수 없을 때 메인 페이지로 이동할 수 있도록 URL을 포함하여 이동할 수 있도록 합니다.

     

    301 [Moved Permanently] : 요청한 자원이 응답 헤더의 Location에 주어진 URL로 옮겨진 상태

    304 [Not Modified] : 요청한 리소스가 이전 요청 때와 비교했을 때 전혀 달라진 점이 없는 상태

     

     

    4XX (Client error)

     

    Client가 보낸 요청이 잘못된 경우를 의미합니다.

     

    400 [Bad Request] : 정의되지 않은 방식의 요청을 하는 등, Client가 잘못된 요청을 한 상태

    401 [Unauthorized] : 인증이 필요한 요청에 인증되지 않은 상태

    403 [Forbidden] : Client가 접근이 금지된 자원을 요청한 상태

    404 [Not Found] : 요청한 자원이 존재하지 않는 상태

    405 [Method Not Allowed] : 알맞지 않은 HTTP Request method를 통하여 요청을 한 상태

    408 [Request Timeout] : Client와 Server 간 연결은 되었으나 Body가 도착하지 않은 상태

     

     

    5XX (Server error)

     

    Server가 받은 요청을 정상적으로 수행하지 못한 경우를 의미합니다.

     

    500 [Internal Server Error] : Server에서 오류가 발생한 상태, 보안적인 문제로 원인을 Client에 전달하지 않음

    502 [Bad Gateway] : 어느 쪽 프로토콜에 문제가 있어 통신이 제대로 되지 않는 상태

    503 [Service Unavailable] : 일시적으로 Server에 접근이 불가능한 상태

     

     

    여기까지 HTTP Request method와 HTTP Response status code에 대해서 알아보았습니다.

     

     

     

     

     

    구독과 좋아요 그리고 생산적인 댓글은 언제나 환영입니다.

    반응형

    'HTTP' 카테고리의 다른 글

    HTTP가 뭐예요? (REST)  (2) 2022.10.08
    HTTP가 뭐예요? (HTTP의 특징과 구조)  (2) 2022.10.07
    HTTP가 뭐예요? (HTTP의 진화 과정)  (13) 2022.10.04

    댓글

Designed by Tistory.