상세 컨텐츠

본문 제목

초보 백엔드 개발자를 위한 HTTP 상태코드

Developer/Backend

by 웰크 2025. 6. 1. 14:17

본문

백엔드 개발자가 꼭 알아야 할 HTTP 상태코드 정리 & Spring Boot 적용 예제



🌐 HTTP 상태코드란?



HTTP 상태코드는 클라이언트의 요청에 대한 서버의 응답 결과를 숫자로 나타내는 방식입니다.
총 5가지 범주로 나뉘며, 각 숫자대는 의미가 다릅니다.

  • 1xx (Informational): 요청을 받았으며 처리 중
  • 2xx (Success): 요청을 성공적으로 처리함
  • 3xx (Redirection): 리다이렉션 필요
  • 4xx (Client Error): 클라이언트의 잘못된 요청
  • 5xx (Server Error): 서버 내부 오류


✅ 자주 쓰는 상태코드 5가지 (설명 + 사용 예시)



상태코드의미사용 예시
200 OK정상 처리조회, 성공 응답
201 Created새 리소스 생성 성공POST 요청 성공
400 Bad Request잘못된 요청필수 값 누락
401 Unauthorized인증 실패JWT 누락, 만료
404 Not Found리소스 없음잘못된 ID 접근
500 Internal Server Error서버 내부 에러예외 처리 실패


⚙️ Spring Boot에서 상태코드 설정하는 방법



① ResponseEntity 사용

명시적으로 상태코드를 설정할 수 있어 다양한 응답 제어에 유리합니다.


@GetMapping("/items/{id}")
public ResponseEntity getItem(@PathVariable Long id) {
    Item item = itemService.findById(id);
    return ResponseEntity.status(HttpStatus.OK).body(item);
}

② @ResponseStatus 활용

예외에 직접 상태코드를 붙여 처리 흐름을 단순화할 수 있습니다.


@ResponseStatus(HttpStatus.NOT_FOUND)
public class ItemNotFoundException extends RuntimeException {}


💡 실전 상황별 상태코드 선택 예시



  • 조회 성공: 200 OK
  • 조회 결과 없음: 204 No Content
  • 등록 성공: 201 Created
  • 수정 요청 처리 중: 202 Accepted
  • 삭제 성공: 200 OK or 204 No Content
  • 인증 실패: 401 Unauthorized
  • 권한 없음: 403 Forbidden
  • 입력 값 오류: 400 Bad Request + 상세 코드


🚫 데이터가 없거나 요청이 잘못됐을 때, 일부러 에러를 발생시키는 이유



단순히 200 OK로 처리하면 클라이언트가 문제를 인식하지 못할 수 있습니다.
따라서 비즈니스 로직 상 오류는 400 번대 상태코드로 명확히 전달하는 것이 좋습니다.

예: DB에서 결과가 없을 때 명시적으로 400 반환


public Item findItemOrThrow(Long id) {
    return itemRepository.findById(id)
        .orElseThrow(() -> new BusinessException("ITEM_NOT_FOUND", ErrorCode.INVALID_REQUEST));
}

에러 클래스:

@ResponseStatus(HttpStatus.BAD_REQUEST)
public class BusinessException extends RuntimeException {
    private final String errorCode;

    public BusinessException(String message, String errorCode) {
        super(message);
        this.errorCode = errorCode;
    }
}


클라이언트는 다음과 같이 응답을 받을 수 있습니다:

{
  "message": "ITEM_NOT_FOUND",
  "code": "INVALID_REQUEST"
}


🧩 마무리: 응답을 설계하는 백엔드 개발자의 자세



HTTP 상태코드는 단순한 숫자가 아니라 API의 커뮤니케이션 약속입니다.
상태코드를 통해 클라이언트는 결과를 해석하고 적절한 처리를 할 수 있습니다.

✔️ 상태코드 설계 시 체크리스트:
  • 모든 요청에 무조건 200 OK를 주고 있지 않은가?
  • 비즈니스 실패 상황을 구분하고 있는가?
  • 에러 응답의 구조가 일관되어 있는가?

정확한 상태코드와 구조화된 응답은 백엔드 개발자의 품격입니다.

반응형

관련글 더보기