InvocationTargetException 하나만 보고 모두 500으로 만들면 사용자 입력과 업무 충돌을 구분할 수 없습니다.
route 없음 → 404
형식·누락 → 400
업무 충돌 → 409 등
내부 실패 → 500
write 실패 → close
핵심: 응답 commit 전까지 단계별 오류를 값으로 모아 마지막에 HTTP로 변환합니다.