용어집 · API 테스트
HTTP 상태 코드
영어: HTTP status code
다른 이름: 상태 코드, 응답 코드, HTTP 응답 코드, status code
정의
모든 HTTP 응답에 포함된 세 자리 숫자로, 요청이 성공했는지, 리디렉션되었는지, 클라이언트나 서버 문제로 실패했는지를 알려 줍니다.
HTTP 상태 코드(HTTP status code)는 요청에 대한 서버의 짧은 대답입니다. 첫 번째 자리가 분류를 나타냅니다. 1xx 정보, 2xx 성공, 3xx 리디렉션, 4xx 클라이언트 오류(요청이 잘못됨), 5xx 서버 오류(요청은 정상이었을 수 있지만 서버가 실패함)입니다. 정확한 상태 코드를 어설션하는 것이 보통 모든 API 테스트의 첫 번째 검사입니다.
테스터가 가장 많이 쓰는 코드
| 코드 | 의미 | 일반적인 용도 |
|---|---|---|
200 OK |
성공, 본문 있음 | GET, 또는 리소스를 반환하는 수정 |
201 Created |
리소스가 생성됨 | POST, Location 헤더와 함께 |
204 No Content |
성공, 본문 없음 | DELETE, 일부 PUT |
301 / 302 / 304 |
영구 이동, 다른 위치에서 찾음, 변경 없음 | 리디렉션과 캐싱 |
400 Bad Request |
형식이 잘못되었거나 유효하지 않은 요청 | 깨진 JSON, 잘못된 타입 |
401 Unauthorized |
인증되지 않음 | 토큰 누락, 만료, 유효하지 않음 |
403 Forbidden |
인증되었지만 권한 없음 | 유효한 사용자, 잘못된 역할 |
404 Not Found |
해당 리소스 없음 | 알 수 없는 ID, 또는 접근 금지 리소스 숨김 |
409 Conflict |
현재 상태와 충돌 | 중복 이메일, 버전 충돌 |
422 Unprocessable Content |
형식은 올바르지만 검증 실패 | 비즈니스 규칙 위반 |
429 Too Many Requests |
요청 한도 초과 | 주로 Retry-After와 함께 |
500 / 502 / 503 / 504 |
서버 오류, 잘못된 게이트웨이, 서비스 불가, 게이트웨이 타임아웃 | 버그와 인프라 문제 |
401과 403의 차이
이름과 달리 401 Unauthorized는 **인증(authentication)**에 관한 것입니다. 서버가 당신이 누구인지 모릅니다. 해결책은 로그인하거나 유효한 토큰을 보내는 것이며, 응답에는 WWW-Authenticate 헤더가 포함되어야 합니다. 403 Forbidden은 **인가(authorization)**에 관한 것입니다. 서버는 당신이 누구인지 알지만 이 작업은 허용되지 않습니다. 다시 로그인해도 소용없습니다. 테스트 스위트는 토큰 없음, 만료된 토큰, 권한이 없는 사용자의 유효한 토큰을 모두 커버해야 합니다.
흔한 실수
- 200만 확인하기. 결함 대부분은 오류 경로에 있습니다. 잘못된 입력에는
4xx가 와야 하며,500은 처리되지 않은 입력이라는 뜻이므로 버그로 보고할 가치가 있습니다. - 오류인데 200 상태.
200본문에 오류 메시지를 담으면 클라이언트와 모니터링이 깨집니다. - 일관성 없는 규칙. 어떤 API는 모든 잘못된 입력에
400을 쓰고, 어떤 API는 검증 실패에422를 따로 씁니다. 어느 쪽이든 괜찮지만, 한 API 안에서 섞어 쓰는 것이 버그입니다.