🚣활동/NHN Academy

HTTP method, HTTP status

말동말동현 2025. 2. 17. 14:41

1. HTTP 메서드

 

1.1 HTTP 메서드란?

  • HTTP 메서드는 클라이언트가 서버에 요청을 보낼 때 어떤 동작을 수행할지 지정하는 방법이다.
  • HTTP 메서드는 크게 5가지 주요 메서드와 기타 보조 메서드로 나뉜다.
    • 주요 메서드: GET, POST, PUT, PATCH, DELETE
    • 보조 메서드: HEAD, OPTIONS, CONNECT, TRACE

 

1.2 HTTP 주요 메서드 설명

1.2.1 GET 메서드

  • 서버에서 데이터를 조회하는 요청이다.
  • 요청 본문(Body)을 포함하지 않는다.

사용 예시

  • 웹사이트에서 페이지를 로드할 때
  • REST API에서 데이터를 가져올 떄 (예: GET /users)
  • 검색 엔진에서 URL을 크롤링할 때

GET 요청 예제

GET /products HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: application/json

 

GET 응답 예제

HTTP/1.1 200 OK
Content-Type: application/json

[
    {"id": 1, "name": "Laptop", "price": 1200},
    {"id": 2, "name": "Mouse", "price": 50}
]

 

특징

  • 읽기 전용 (데이터 변경 없음)
  • 캐싱 가능
  • 멱등성 보장 (여러 번 요청해도 동일한 응답)

1.2.2 POST 메서드

  • 서버에 데이터를 생성하는 요청
  • 요청 본문(Body)을 포함할 수 있음.

사용 예시

  • 회원가입, 로그인
  • 파일 업로드
  • REST API에서 새로운 데이터 생성 (예: POST /users)

POST 요청 예제

POST /users HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "username": "johndoe",
    "email": "john@example.com",
    "password": "secure123"
}

 

POST 응답 예제

HTTP/1.1 201 Created
Location: /users/1
Content-Type: application/json

{
    "id": 1,
    "username": "johndoe",
    "email": "john@example.com"
}

 

특징

  • 새로운 리소스 생성
  • 캐싱 불가능
  • 멱등성이 없음 (같은 요청을 여러 번 보내면 중복 데이터 생성 가능)

 

1.2.3 PUT 메서드

  • 기존 리소스를 "전체" 업데이트하는 요청
  • 요청 본문(Body)을 포함.

사용 예시

  • REST API에서 리소스를 수정할 때 (예: PUT /user/1)
  • 설정을 변경할 때

PUT 요청 예제

PUT /users/1 HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "username": "johndoe",
    "email": "john@example.com",
    "password": "newpassword"
}

 

PUT 응답 예제

HTTP/1.1 200 OK
Content-Type: application/json

{
    "id": 1,
    "username": "johndoe",
    "email": "john@example.com",
    "password": "newpassword"
}

 

특징

  • 기존 데이터를 전체 수정 (없는 경우 생성할 수도 있음)
  • 멱등성이 있음 (같은 요청을 여러 번 보내도 동일한 결과)

 

1.2.4 PATCH 메서드

  • 기존 리소스를 "부분" 업데이트 하는 요청
  • 요청 본문(Body)을 포함.

사용예시

  • REST API에서 특정 필드만 수정할 때 (예: PATCH/users/1)

PATCH 요청 예제

PATCH /users/1 HTTP/1.1
Host: example.com
Content-Type: application/json

{
    "email": "newemail@example.com"
}

 

PATCH 응답 예제

HTTP/1.1 200 OK
Content-Type: application/json

{
    "id": 1,
    "username": "johndoe",
    "email": "newemail@example.com"
}

 

특징

  • 기존 데이터의 일부만 수정 가능
  • 멱등성이 보장되지 않음.
  • PUT과 다르게 전체 객체를 전달할 필요 없음.

1.2.5 DELETE 메서드

  • 서버에서 리소스를 삭제하는 요청
  • 요청 본문(Body)을 포함하지 않는다.

사용 예시

  • REST API에서 데이터 삭제 (예: DELETE /users/1)

DELETE 요청 예제

DELETE /users/1 HTTP/1.1
Host: example.com

 

DELETE 응답 예제

HTTP/1.1 204 No Content

 

특징

  • 리소스 삭제
  • 멱등성이 있음(같은 요청을 여러 번 보내도 동일한 결과)

1.3 기타 보조 메서드

 

1.4 HTTP 메서드 비교표

 


 

 

2. HTTP Status

  • HTTP Status Code(상태 코드)는 클라이언트가 서버에 요청을 보냈을 때, 서버가 응답하는 상태를 나타내는 3자리 숫자로 된 코드이다.
  • 이 상태 코드는 1xx, 2xx, 3xx, 4xx, 5xx의 5가지 범주로 나뉜다.

 

2.1 1xx (정보 응답)

  • 서버가 요청을 받았고, 처리 중 이라는 의미. 클라이언트가 계속 요청을 보내야 하는 경우에 사용된다.

100 Continue : 요청의 일부가 성공적으로 수신되었으며, 클라이언트가 나머지 요청을 계속 보내도 됨.

101 Switching Protocols: 서버가 클라이언트 요청에 따라 프로토콜을 변경 중 (예: HTTP -> WebSocket)

102 Processing: 서버가 요청을 수락했지만, 아직 응답을 완료하지 못했음 (WebDAV)

103 Early Hints: 최종 응답전에 일부 헤더를 클라이언트에게 먼저 전성

 

2.2 2xx(성공 응답)

  • 클라이언트의 요청이 정상적으로 처리되었음을 나타낸다.

200 OK: 요청이 성공적으로 수행되었음. (일반적인 응답)

201 Created: 요청이 성공적으로 수행되었으며, 새로운 리소스가 생성됨. (예: 파일 업로드, 회원가입)

202 Accepted

203 Non-Authoritative Information: 요청이 접수되었지만, 처리가 완료되지 않았음. (비동기 처리)

204 No Content: 서버가 원본이 아닌 다른 소스로부터 가져온 정보

205 Reset Content: 요청은 성공했으나, 응답할 데이터가 없음. (예: DELETE 요청 후)

206 Partial Content: 클라이언트가 입력을 초기화 해야함 (예: 폼 리셋)

 

2.3 3xx (리디렉션 응답)

  • 요청을 완료하려면 추가적인 조치가 필요함을 나타냄.

300 Multiple Choices: 여러 개의 리소스 중 선택해야 함.

301 Moved Permanently: 요청한 리소스가 영구적으로 이동됨. (SEO 및 캐싱에 영향)

302 Found: 요청한 리소스가 임시로 이동됨. (클라이언트가 새로운 URL로 요청해야함)

303 See Other: 클라이언트가 GET 요청을 통해 새로운 URL로 리디렉션해야함.

304 Not Modified: 캐시된 데이터가 최신 상태이므로 클라이언트가 재사용 가능

307 Temporary Redirect: 요청한 리소스가 임시로 이동되었으며, 요청 방식(GET, POST 등)을 유지 해야함.

308 Permanent Redirect: 301과 유사하지만, 요청 방식을 유지해야 함.

 

 

2.4 4xx (클라이언트 오류)

  • 클라이언트의 요청에 문제가 있을 때 사용 됨. (잘못된 요청, 권한 부족 등)
상태 코드 의미
400 Bad Request
잘못된 요청 (구문 오류, 잘못된 데이터 등)
401 Unauthorized
인증이 필요함 (예: 로그인 필요)
403 Forbidden
요청이 서버에 의해 거부됨 (권한 부족)
404 Not Found
요청한 리소스를 찾을 수 없음
405 Method Not Allowed
해당 리소스에서 지원하지 않는 HTTP 메서드 사용
406 Not Acceptable
클라이언트가 요청한 응답 형식을 서버가 제공할 수 없음
407 Proxy Authentication Required
프록시 서버를 통한 인증이 필요함
408 Request Timeout
요청이 너무 오래 걸려 서버가 종료함
409 Conflict
리소스의 현재 상태와 충돌이 발생함 (예: 중복 파일 업로드)
410 Gone
요청한 리소스가 영구적으로 삭제됨
411 Length Required
요청에 Content-Length 헤더가 필요함
412 Precondition Failed
요청의 사전 조건이 충족되지 않음
413 Payload Too Large
요청 본문이 서버가 처리할 수 있는 크기를 초과함
414 URI Too Long
요청한 URL이 너무 길어 서버가 처리할 수 없음
415 Unsupported Media Type
서버가 요청의 콘텐츠 타입을 지원하지 않음
417 Expectation Failed
Expect 헤더의 조건을 충족하지 못함
418 I’m a teapot
커피머신이 아닌 찻주전자이므로 요청을 처리할 수 없음 (농담 코드, RFC 2324)
422 Unprocessable Entity
요청은 이해되었지만, 데이터가 처리 불가능함 (예: JSON 파싱 실패)
429 Too Many Requests
클라이언트가 너무 많은 요청을 보냄 (Rate Limiting)

 

 

2.5 5xx (서버 오류)

  • 서버가 요청을 처리하는 중에 문제가 발생했을 때 사용됨
상태 코드 의미
500 Internal Server Error
서버 내부 오류 (예: 코드 오류, 예외 발생)
501 Not Implemented
요청한 기능이 서버에서 지원되지 않음
502 Bad Gateway
서버가 다른 서버(게이트웨이)로부터 잘못된 응답을 받음
503 Service Unavailable
서버가 과부하 또는 유지보수로 인해 사용 불가능함
504 Gateway Timeout
게이트웨이가 응답을 받지 못함 (서버 과부하 또는 연결 문제)
505 HTTP Version Not Supported
서버가 지원하지 않는 HTTP 버전 사용
507 Insufficient Storage
서버의 저장 공간 부족
508 Loop Detected
무한 루프 발생 (WebDAV)

 

 

2.6 예제 코드

2.6.1 200 OK 응답 예제

import java.io.*;
import java.net.*;

public class HttpServerExample {
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(8080);
        System.out.println("서버 시작: http://localhost:8080");

        while (true) {
            Socket client = server.accept();
            BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
            OutputStream writer = client.getOutputStream();

            // HTTP 응답 전송
            String response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n" +
                    "<html><body><h1>Success!</h1></body></html>";

            writer.write(response.getBytes());
            writer.flush();
            client.close();
        }
    }
}

 

 

2.6.2 404 Not Found 응답 예제

String response = "HTTP/1.1 404 Not Found\r\nContent-Type: text/html\r\n\r\n" +
        "<html><body><h1>404 - 페이지를 찾을 수 없습니다.</h1></body></html>";
writer.write(response.getBytes());