HTTP 상태코드에 따른 요구사항 검증

2024. 11. 14. 18:52[Spring_gradle]

HTTP 상태 코드를 활용하여 클라이언트가 요청을 올바르게 하도록 유도하거나, 요청이 실패했을 때 클라이언트가 재요청하도록 안내하는 두 가지 주요 방식이 있습니다.

1. 클라이언트가 요청을 제대로 하게 유도하기

서버는 클라이언트의 요청이 잘못된 경우, 400번대 오류 코드를 반환하여 클라이언트가 요청을 수정하도록 유도할 수 있습니다. 클라이언트는 이러한 응답을 통해 어떤 부분이 잘못되었는지 파악하고 요청을 올바르게 수정하여 재시도할 수 있습니다.

예를 들어:

  • 400 Bad Request: 필수 입력 값이 누락되었거나 형식이 맞지 않을 때 반환하여, 클라이언트가 올바른 형식의 데이터를 다시 요청하도록 유도합니다.
  • 409 Conflict: 이미 존재하는 리소스(예: 중복 이메일)와의 충돌이 발생했을 때 반환하여, 클라이언트가 중복되지 않는 값으로 요청을 다시 보낼 수 있도록 안내합니다.

2. 클라이언트 요청이 처리되지 않은 경우, 다시 요청하게 안내

일부 경우 서버는 클라이언트 요청을 일시적으로 처리할 수 없거나, 서버 상태에 따라 재요청을 요구할 수 있습니다. 이때 500번대 오류 코드를 통해 클라이언트가 다시 요청하게끔 안내할 수 있습니다.

예를 들어:

  • 503 Service Unavailable: 서버가 과부하 상태이거나 일시적으로 서비스를 제공할 수 없을 때 반환하여, 클라이언트가 일정 시간 후 재요청할 수 있도록 안내합니다.

예제 코드 설명

아래는 400 Bad Request와 503 Service Unavailable 상태 코드를 사용해 클라이언트에게 재요청을 유도하는 예제입니다.

 

import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/users") public class UserController { @PostMapping("/register") public ResponseEntity registerUser(@RequestBody User user) { // 필수 입력 검증 if (user.getUsername() == null || user.getUsername().isEmpty()) { ApiResponse response = new ApiResponse(400, "사용자 이름은 필수 입력 항목입니다."); return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST); } // 서버 과부하 상황 예제 if (isServerBusy()) { ApiResponse response = new ApiResponse(503, "서버가 현재 과부하 상태입니다. 잠시 후 다시 시도해주세요."); return new ResponseEntity<>(response, HttpStatus.SERVICE_UNAVAILABLE); } ApiResponse response = new ApiResponse(201, "회원가입이 성공적으로 완료되었습니다."); return new ResponseEntity<>(response, HttpStatus.CREATED); } private boolean isServerBusy() { // 서버 과부하 상황을 판단하는 예시 로직 return false; } }

요약

  • 요청 유도: 잘못된 요청에 대해 400번대 상태 코드를 반환하여, 클라이언트가 요청을 수정하고 다시 요청하도록 합니다.
  • 재요청 유도: 서버 상태나 과부하로 인해 일시적으로 요청을 처리할 수 없을 때 503 등의 500번대 상태 코드를 반환하여, 일정 시간 후 재요청할 수 있도록 합니다.

이 두 가지 방식을 통해 서버는 클라이언트가 요청을 정확하고 효율적으로 하도록 유도할 수 있습니다.