본문 바로가기
Backend2026년 6월 25일2분 읽기

HTTP 상태코드 제대로 쓰기 — 4xx와 5xx 구분

YS
김영삼
조회 664
HTTP 상태코드 제대로 쓰기 — 4xx와 5xx 구분

핵심 요약

상태코드는 클라이언트와 모니터링이 자동으로 분기하는 신호다. 4xx는 클라이언트 잘못(요청을 고쳐야 함), 5xx는 서버 잘못(재시도·알림 대상)이다. 성공인데 200에 에러를 싣거나, 입력 오류를 500으로 내면 재시도 폭주·알림 오작동이 생긴다.

1. 자주 쓰는 코드

코드의미
200/201성공 / 생성됨
400잘못된 요청(검증 실패)
401 / 403인증 안 됨 / 권한 없음
404 / 409없음 / 충돌(중복 등)
422형식은 맞지만 의미상 처리 불가
429 / 5xx요청 과다 / 서버 오류

2. 401 vs 403

  • 401 — 누구인지 모름(로그인 필요/토큰 없음·만료)
  • 403 — 누구인지 알지만 권한이 없음

3. 함정

  • 입력 오류를 500으로 내면 알림·자동 재시도가 오작동 — 400/422로
  • 200에 { "error": ... }를 싣지 말 것 — 클라이언트가 성공으로 처리
  • 에러 본문에 일관된 형식(코드·메시지)을 두면 클라이언트가 다루기 쉽다

자주 묻는 질문

다 200으로 주고 본문에 성공 여부를 넣으면 안 되나요?

브라우저·캐시·모니터링·재시도 로직이 상태코드로 판단합니다. 200으로 에러를 주면 실패가 성공으로 집계되고 자동 처리가 어긋납니다. 의미에 맞는 코드를 쓰세요.

400과 422는 어떻게 구분하나요?

형식 자체가 틀렸으면(파싱 불가 등) 400, 형식은 맞지만 비즈니스 규칙상 처리할 수 없으면 422를 흔히 씁니다. 팀 내 규약으로 일관되게 정하면 됩니다.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록