HTTP 409 Conflict
409는 하이퍼텍스트 전송 프로토콜(HTTP)의 응답 상태 코드 중 하나로, 클라이언트 오류(4xx) 클래스에 속한다. 409 Conflict, 즉 "충돌"을 의미하며, 클라이언트가 보낸 요청이 서버가 보유한 대상 리소스의 현재 상태와 충돌하여 요청을 완료할 수 없음을 서버가 알려줄 때 사용된다.
정의 및 표준
409 상태 코드는 국제 인터넷 표준화 기구(IETF)의 RFC 문서에서 공식적으로 정의되었다. 초기에는 RFC 2616(1999년, HTTP/1.1)에 규정되었으며, 이후 RFC 7231(2014년, HTTP/1.1: Semantics and Content)로 개정되어 계승되었다. 또한 인터넷 할당 번호 기관(IANA)이 관리하는 공식 HTTP 상태 코드 레지스트리에 등록되어 있다.
발생 맥락
409 Conflict는 일반적으로 다음과 같은 상황에서 발생한다.
- 리소스의 버전 충돌: 서버에 이미 존재하는 파일보다 오래된 버전의 파일을 업로드하는 경우 등 동시성(concurrency) 문제가 있을 때
- 중복 데이터 생성: 이미 존재하는 사용자 아이디로 회원가입을 시도하는 경우와 같이 데이터 무결성을 위반하는 요청이 발생했을 때
- 비즈니스 로직 위반: 이미 예약된 좌석을 다시 예약하려는 등 서버 측 규칙과 충돌하는 요청이 제출되었을 때
- 상태 변경 충돌: 여러 사용자가 동시에 동일한 리소스를 수정하려는 경우
특히 PUT 요청과 같은 리소스 생성 또는 갱신 요청에서 자주 발생한다. 표준에 따르면 서버는 409 응답을 보낼 때 충돌에 대한 정보를 응답 본문에 포함해야 한다.
유사 상태 코드와의 구분
409와 유사한 클라이언트 오류 코드로는 400(잘못된 요청), 403(금지됨), 404(찾을 수 없음), 412(사전조건 실패) 등이 있다. 409가 리소스의 현재 상태와 요청 간의 충돌을 나타내는 데 초점을 맞추는 반면, 이들 코드는 각각 구문 오류, 권한 부족, 자원 부재, 사전조건 불충족과 같은 다른 오류 상황을 나타낸다.
표준 문서 명칭
- RFC 2616(구판): Hypertext Transfer Protocol – HTTP/1.1
- RFC 7231(현행): Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content
참고 문헌
- MDN Web Docs, "409 Conflict - HTTP"
- Wikipedia, "HTTP 상태 코드"
- RFC Editor, "RFC 7231"