웹 개발 기초 - 프론트/네트워크ㆍ통신

HTTP 상태 코드 가이드 [예시 & 해결책]

5mincut 2025. 1. 8.
반응형

취준생의 관점에서 정리한 HTTP 상태 코드! 면접 준비하면서 공부한 내용을 정리했습니다.

 

기술 면접에서도 자주 나오는 내용이니 꼭 숙지하시면 좋겠습니다 😊

 

들어가며: HTTP 상태 코드의 중요성

백엔드 개발자 취준생으로서 면접을 준비하다 보니, HTTP 상태 코드에 대한 질문이 정말 많이 나오더라구요.

"REST API에서 리소스 생성 시 어떤 상태 코드를 반환해야 할까요?"
"인증 실패와 인가 실패의 차이점은 무엇인가요?"

이 외 여러가지 질문을 받은 경험이 있고, 이런 면접 질문들에 대비하면서 공부한 내용을 정리해보았습니다. 특히 면접관분들이 자주 물어보시는 부분들을 중심으로 정리했으니, 함께 준비하시는 분들에게 도움이 되었으면 좋겠습니다!

1. 상태 코드를 제대로 알아야 하는 이유

  1. 명확한 의사소통
    • 프론트엔드 개발자와의 효율적인 협업
    • API 응답의 의도를 정확하게 전달
    • 디버깅 시간 단축
  2. 시스템 신뢰성 향상
    • 적절한 에러 처리로 사용자 경험 개선
    • 보안 취약점 예방
    • 시스템 모니터링 효율화

2. HTTP 상태 코드의 기본 구조와 분류

  • HTTP 상태 코드는 3자리 숫자로 구성되며, 첫 번째 숫자에 따라 5가지 클래스로 구분됩니다.
  • 각 클래스는 특정한 의미를 가지고 있으며, 이를 통해 서버의 응답 상태를 직관적으로 파악할 수 있습니다.

2.1 상태 코드의 분류와 기본 원리

  • 1xx (정보 응답) - 정보 제공 목적의 임시 응답입니다. 실제로는 자주 마주치지 않지만, WebSocket이나 대용량 파일 업로드와 같은 특수한 상황에서 중요한 역할을 합니다.
  • 2xx (성공 응답) - 요청이 성공적으로 처리되었음을 나타냅니다. 흔히 사용되는 상태 코드들이 여기에 속합니다.

2.2 브라우저가 상태 코드를 처리하는 방식

  • 브라우저가 HTTP 상태 코드를 처리하는 과정은 크게 세 단계로 나눌 수 있습니다.
    • 상태 코드 수신
    • 내부 처리 로직 실행
    • 사용자 인터페이스 업데이트

2.3 실제 통신 흐름 다이어그램

[HTTP 상태 코드] 브라우저 통신 흐름도

3. 주요 상태 코드의 실제 활용

3.1 성공 응답 (2xx)

  • 200 OK vs 201 Created
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody UserDto userDto) {
    User newUser = userService.createUser(userDto);
    // 새로운 리소스 생성이므로 201 사용
    return ResponseEntity
        .status(HttpStatus.CREATED)
        .body(newUser);
}

@GetMapping("/users/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
    User user = userService.findById(id);
    // 조회 성공이므로 200 사용
    return ResponseEntity.ok(user);
}

3.2 클라이언트 에러 (4xx)

  • 400 Bad Request
    • JSON 형식이 올바르지 않을 때 발생 - HttpMessageNotReadableException 사용 : JSON 파싱 실패
    • 요청에 필요한 필수 파라미터가 없는 경우 발생 - MethodArgumentNotValidException 사용 : 요청 값 검증 실패
    • 인증 토큰이 잘못되었거나 만료된 경우 발생
      • InvalidTokenException
        • ExpiredJwtException 사용 - 토큰만료
        • SecurityException | MalformedJwtException 사용 - 잘못된 토큰
        • UnsupportedJwtException 사용 - 지원하지 않는 토큰
  • 401 vs 403 차이점
    • 인증(Authentication)과 인가(Authorization)
      • 401 - 사용자가 인증(Authentication)되지 않았거나 잘못된 인증 정보를 제공했을 때 발생(로그인)
      • 403 - 사용자는 인증되었지만 요청한 리소스에 대한 권한(Authorization)이 없을 때 발생(권한 부족)
  • 404 Not Found
    • 잘못된 URL로 요청이 들어온 경우 발생
    • 요청한 리소스를 서버에서 찾을 수 없을 때 발생

3.3 리다이렉션 (3xx)

  • 301 vs 302 vs 307
    • 301 - 리소스가 영구적으로 다른 URL로 이동했음을 의미
      (플랫폼 이전 및 사이트 완전 개편시 사용)
    • 302 - 리소스가 일시적으로 다른 URL에 있음을 의미
      (점검 페이지로 리다이렉션하거나, 사용자의 위치에 따라 다른 페이지로 안내할 때 사용)
    • 307 - 302와 비슷하지만, 원래 요청의 HTTP 메소드(GET, POST 등)와 본문을 그대로 유지한 채 리다이렉션.
      (로그인 리다이렉션)
반응형

댓글

💲 추천 글