봄수의 연구실

Body에 상태 코드를 넣는 이유 본문

DEV/Java

Body에 상태 코드를 넣는 이유

berom 2023. 7. 18. 14:14

HTTP 상태 코드는 HTTP 응답의 일부로, 서버가 클라이언트의 요청을 어떻게 처리했는지를 나타냅니다.
상태 코드는 클라이언트에게 요청의 성공, 실패 및 원인에 대한 정보를 제공합니다.

상태 코드를 Body에 담는 이유

상태 코드를 HTTP 응답의 본문(Body)에 포함시키는 이유는 두 가지 주요한 이유가 있습니다:

1. 상세한 정보 제공

상태 코드만으로는 에러의 세부 사항을 충분히 설명할 수 없습니다. 본문에 상태 코드와 함께 에러 메시지를 제공하면, 클라이언트는 에러의 원인을 더 정확하게 파악할 수 있습니다.

2. 응용 프로그램의 일관성 유지

본문에 상태 코드를 포함시키면, 응용 프로그램 내에서 에러 응답의 형식을 일관되게 유지할 수 있습니다.

보통 헤더에 상태 코드를 포함해서 반환을 하는데, 이 경우에 프론트에서 헤더 정보를 파싱해야하는 번거로움이 존재합니다

예시 코드

if (errors.hasErrors()) {
    List<FieldError> fieldErrors = errors.getFieldErrors();
    Exception400 ex = new Exception400(fieldErrors.get(0).getDefaultMessage() + ":" + fieldErrors.get(0).getField());
    return new ResponseEntity<>(
            ex.body(),
            ex.status()
    );
}

위의 코드는 요청 처리 중 발생한 에러를 다루는 방법을 보여줍니다.
에러가 있는 경우(errors.hasErrors()), 해당 에러 정보를 받아옵니다(errors.getFieldErrors()).

그리고 첫 번째 에러의 메시지와 필드 정보를 이용해 Exception400 객체를 생성합니다.
이 객체의 메서드를 통해 에러 메시지와 상태 코드를 추출하고, 이를 ResponseEntity에 담아 클라이언트에게 반환합니다.

public class Exception400 extends RuntimeException {

    public Exception400(String message) {
        super(message);
    }

    public ApiUtils.ApiResult<?> body(){
        return ApiUtils.error(getMessage(), HttpStatus.BAD_REQUEST);
    }

    public HttpStatus status(){
        return HttpStatus.BAD_REQUEST;
    }
}

부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>

728x90

'DEV > Java' 카테고리의 다른 글

Controller의 책임  (0) 2023.07.18
Custom Exception  (0) 2023.07.18
요청 DTO에 정규 표현식 적용하는 방법  (0) 2023.07.18
H2 DB  (0) 2023.07.11
JPA의 영속 상태  (0) 2023.07.11