HTTP Method 에 대해 설명해 주세요.

HTTP Method는 클라이언트가 서버에 요청을 보낼 때 해당 리소스에 대해 수행하고자 하는 동작을 나타내는 방법입니다.

주요 HTTP Method

Method역할요청 본문멱등성안전성
GET리소스 조회없음OO
POST리소스 생성 / 처리 요청있음XX
PUT리소스 전체 교체있음OX
PATCH리소스 부분 수정있음XX
DELETE리소스 삭제없음 또는 있음OX
HEADGET과 동일하지만 응답 본문 없이 헤더만 반환없음OO
OPTIONS(http)서버가 지원하는 메서드 확인없음OO

각 Method 상세

GET — 리소스 조회

GET /members/1 HTTP/1.1

HTTP/1.1 200 OK
{"id": 1, "name": "홍길동", "email": "hong@test.com"}
@GetMapping("/members/{id}")
public ResponseEntity<MemberResponse> getMember(@PathVariable Long id) {
    return ResponseEntity.ok(memberService.findById(id));  // 200
}

POST — 리소스 생성

POST /members HTTP/1.1
Content-Type: application/json

{"name": "홍길동", "email": "hong@test.com"}

HTTP/1.1 201 Created
Location: /members/1
{"id": 1, "name": "홍길동", "email": "hong@test.com"}
@PostMapping("/members")
public ResponseEntity<MemberResponse> createMember(@RequestBody MemberRequest request) {
    MemberResponse member = memberService.create(request);
    URI location = URI.create("/members/" + member.getId());
    return ResponseEntity.created(location).body(member);  // 201
}

PUT — 리소스 전체 교체

PUT /members/1 HTTP/1.1
Content-Type: application/json

{"name": "김철수", "email": "kim@test.com"}

HTTP/1.1 200 OK
{"id": 1, "name": "김철수", "email": "kim@test.com"}
@PutMapping("/members/{id}")
public ResponseEntity<MemberResponse> updateMember(@PathVariable Long id,
                                                     @RequestBody MemberRequest request) {
    return ResponseEntity.ok(memberService.update(id, request));  // 200
}

PATCH — 리소스 부분 수정

PATCH /members/1 HTTP/1.1
Content-Type: application/json

{"email": "new@test.com"}

HTTP/1.1 200 OK
{"id": 1, "name": "홍길동", "email": "new@test.com"}
@PatchMapping("/members/{id}")
public ResponseEntity<MemberResponse> patchMember(@PathVariable Long id,
                                                    @RequestBody MemberPatchRequest request) {
    return ResponseEntity.ok(memberService.patch(id, request));  // 200
}

DELETE — 리소스 삭제

DELETE /members/1 HTTP/1.1

HTTP/1.1 204 No Content
@DeleteMapping("/members/{id}")
public ResponseEntity<Void> deleteMember(@PathVariable Long id) {
    memberService.delete(id);
    return ResponseEntity.noContent().build();  // 204
}

멱등성과 안전성

멱등성 (Idempotent)

같은 요청을 여러 번 보내도 결과가 동일한 성질입니다.

[GET — 멱등 O]
GET /members/1 → 홍길동
GET /members/1 → 홍길동   ← 몇 번을 해도 같은 결과

[DELETE — 멱등 O]
DELETE /members/1 → 삭제됨
DELETE /members/1 → 이미 없음 (결과적으로 상태 동일)

[POST — 멱등 X]
POST /members → 회원 생성 (id: 1)
POST /members → 회원 생성 (id: 2)  ← 호출할 때마다 새 리소스 생성

안전성 (Safe)

요청이 서버의 리소스 상태를 변경하지 않는 성질입니다.

GET    → 조회만 함 → 서버 상태 변경 없음 → 안전 O
POST   → 새 리소스 생성 → 서버 상태 변경 → 안전 X
DELETE → 리소스 삭제 → 서버 상태 변경 → 안전 X

HEAD와 OPTIONS

// HEAD — 본문 없이 헤더만 확인
// 파일 크기나 존재 여부 확인 시 유용
HEAD /files/report.pdf HTTP/1.1

HTTP/1.1 200 OK
Content-Length: 2048000
Content-Type: application/pdf
// 본문 없음
// OPTIONS — 허용된 메서드 확인
// CORS 프리플라이트 요청에서 주로 사용
OPTIONS /members HTTP/1.1

HTTP/1.1 200 OK
Allow: GET, POST, PUT, DELETE, OPTIONS

CRUD와 HTTP Method 매핑

CRUDHTTP MethodURI 예시응답 코드
CreatePOSTPOST /members201
ReadGETGET /members/1200
Update (전체)PUTPUT /members/1200
Update (부분)PATCHPATCH /members/1200
DeleteDELETEDELETE /members/1204

면접 포인트

CSLOG에서 보기