📌 Description
문서 API QA(시나리오 3) 중 발견한 일관성 문제 2건과 UI 잔손질 2건을 묶습니다.
1. 미인증 요청이 401이 아니라 빈 본문 403 (백엔드)
토큰 없이 또는 만료·위조 토큰으로 호출하면 403 + Content-Length: 0이 반환됩니다.
$ curl -i http://localhost:8080/api/documents
HTTP/1.1 403
Content-Length: 0
SecurityConfig에 exceptionHandling이 없어 Spring Security 기본 동작이 나갑니다. 권한 부족(403 ROLE-002 + ErrorResponse 본문)과 구분이 불가능하고, 다른 모든 에러가 일관된 ErrorResponse를 주는 것과도 어긋납니다.
영향이 실재합니다. 프론트 lib/api.ts에는 이미 if (response.status === 401) → 세션 무효화 로직이 있는데, 백엔드가 401을 보내지 않아 현재 죽은 코드입니다. 즉 토큰이 만료돼도 로그아웃 처리가 안 되고 사용자는 빈 403만 받아 화면이 깨집니다. 백엔드만 고치면 프론트 수정 없이 동작합니다.
ErrorCode.UNAUTHORIZED(401, "COMMON-007")가 이미 정의돼 있어 그대로 재사용하면 됩니다.
2. 삭제된 문서에 새 버전 업로드만 409 (백엔드)
soft delete된 문서에 대해 다른 엔드포인트는 모두 404 DOCUMENT-001인데, 버전 업로드만 409 DOCUMENT-VERSION-003입니다.
| 요청 |
응답 |
GET /api/documents/11 |
404 DOCUMENT-001 |
GET /api/documents/11/content /file /status |
404 DOCUMENT-001 |
PATCH /api/documents/11 |
404 DOCUMENT-001 |
DELETE /api/documents/11 (중복) |
404 DOCUMENT-001 |
POST /api/documents/11/versions |
409 DOCUMENT-VERSION-003 |
원인은 DocumentVersionUploadService.validate()에 삭제 여부 검사가 없어, DELETED 상태가 마지막 else로 떨어져 DOCUMENT_VERSION_NOT_ALLOWED가 되는 구조입니다.
3. 업로드 모달 파일 크기 표기 오류 (프론트)
UploadModal이 (file.size/1024/1024).toFixed(2)MB로 고정 계산해 1.2KB 파일이 **0.00MB**로 표시됩니다. 문서 상세는 formatBytes()로 "1.2 KB"를 올바르게 표시하고 있어 화면 간 불일치도 있습니다.
4. 문서 정보 수정 모달 라벨 오타 (프론트)
설명 입력 라벨이 문제 설명 으로 되어 있습니다 → 문서 설명.
✅ To-do
✅ 완료 기준
📌 Description
문서 API QA(시나리오 3) 중 발견한 일관성 문제 2건과 UI 잔손질 2건을 묶습니다.
1. 미인증 요청이 401이 아니라 빈 본문 403 (백엔드)
토큰 없이 또는 만료·위조 토큰으로 호출하면
403+Content-Length: 0이 반환됩니다.SecurityConfig에exceptionHandling이 없어 Spring Security 기본 동작이 나갑니다. 권한 부족(403 ROLE-002+ ErrorResponse 본문)과 구분이 불가능하고, 다른 모든 에러가 일관된ErrorResponse를 주는 것과도 어긋납니다.영향이 실재합니다. 프론트
lib/api.ts에는 이미if (response.status === 401)→ 세션 무효화 로직이 있는데, 백엔드가 401을 보내지 않아 현재 죽은 코드입니다. 즉 토큰이 만료돼도 로그아웃 처리가 안 되고 사용자는 빈 403만 받아 화면이 깨집니다. 백엔드만 고치면 프론트 수정 없이 동작합니다.ErrorCode.UNAUTHORIZED(401, "COMMON-007")가 이미 정의돼 있어 그대로 재사용하면 됩니다.2. 삭제된 문서에 새 버전 업로드만 409 (백엔드)
soft delete된 문서에 대해 다른 엔드포인트는 모두
404 DOCUMENT-001인데, 버전 업로드만409 DOCUMENT-VERSION-003입니다.GET /api/documents/11GET /api/documents/11/content/file/statusPATCH /api/documents/11DELETE /api/documents/11(중복)POST /api/documents/11/versions원인은
DocumentVersionUploadService.validate()에 삭제 여부 검사가 없어, DELETED 상태가 마지막else로 떨어져DOCUMENT_VERSION_NOT_ALLOWED가 되는 구조입니다.3. 업로드 모달 파일 크기 표기 오류 (프론트)
UploadModal이(file.size/1024/1024).toFixed(2)MB로 고정 계산해 1.2KB 파일이 **0.00MB**로 표시됩니다. 문서 상세는formatBytes()로 "1.2 KB"를 올바르게 표시하고 있어 화면 간 불일치도 있습니다.4. 문서 정보 수정 모달 라벨 오타 (프론트)
설명 입력 라벨이
문제 설명으로 되어 있습니다 →문서 설명.✅ To-do
SecurityConfig에exceptionHandling.authenticationEntryPoint추가 →COMMON-007(401) +ErrorResponse본문accessDeniedHandler도 함께 추가 → 권한 부족 시 빈 403 대신ROLE-002본문 (동일 결함 유형)permitAll경로(/auth/login,/auth/signup, swagger 등)에 영향 없는지 확인DocumentVersionUploadService.validate()앞부분에 삭제 문서 검사 추가 →DOCUMENT_NOT_FOUND(404).prepare()/upload()양쪽 경로 모두 확인UploadModal파일 크기 표기를 공용formatBytes()재사용으로 교체문제 설명→문서 설명오타 수정✅ 완료 기준
/api/documents호출 시401+{"code":"COMMON-007", ...}본문이 반환된다.404 DOCUMENT-001이 반환된다.1.2 KB로 표시된다.