Skip to content

[Fix] 인증 실패 응답 401 통일 및 삭제 문서 404 일관성, 업로드 모달 표기 수정 #232

Description

@Gimini-3

📌 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

SecurityConfigexceptionHandling이 없어 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

  • SecurityConfigexceptionHandling.authenticationEntryPoint 추가 → COMMON-007(401) + ErrorResponse 본문
  • accessDeniedHandler도 함께 추가 → 권한 부족 시 빈 403 대신 ROLE-002 본문 (동일 결함 유형)
  • permitAll 경로(/auth/login, /auth/signup, swagger 등)에 영향 없는지 확인
  • DocumentVersionUploadService.validate() 앞부분에 삭제 문서 검사 추가 → DOCUMENT_NOT_FOUND(404). prepare()/upload() 양쪽 경로 모두 확인
  • 백엔드 테스트 2건 작성
  • UploadModal 파일 크기 표기를 공용 formatBytes() 재사용으로 교체
  • 문제 설명문서 설명 오타 수정

✅ 완료 기준

  • 토큰 없이 /api/documents 호출 시 401 + {"code":"COMMON-007", ...} 본문이 반환된다.
  • 만료 토큰으로 접근하면 프론트가 자동으로 세션을 정리하고 로그인 화면으로 보낸다.
  • 삭제된 문서에 새 버전 업로드 시 404 DOCUMENT-001이 반환된다.
  • 업로드 모달에서 1.2KB 파일이 1.2 KB로 표시된다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions