핵심 요약
상태코드는 클라이언트와 모니터링이 자동으로 분기하는 신호다. 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