Skip to content

fix: 비로그인 업로드 API 허용#649

Merged
dh2906 merged 1 commit into
developfrom
feat/public-upload-api
May 29, 2026
Merged

fix: 비로그인 업로드 API 허용#649
dh2906 merged 1 commit into
developfrom
feat/public-upload-api

Conversation

@dh2906
Copy link
Copy Markdown
Contributor

@dh2906 dh2906 commented May 29, 2026

🔍 개요

  • 웹사이트에서 로그인 전 사용자도 이미지 업로드 단계에서 401로 막히지 않고 /upload/image를 호출할 수 있습니다.

🚀 주요 변경 내용

  • 업로드 이미지 엔드포인트를 공개 API로 전환했습니다.
  • 공개 API 처리 중 @UserId 인자 리졸버가 다시 액세스 토큰을 요구하지 않도록 인증 의존 인자를 제거했습니다.
  • 사용자 ID 기반 업로드 rate limit은 비로그인 키 정책이 정해지기 전까지 제거했습니다.
  • 로그인 mock 없이 업로드 성공을 검증하도록 통합 테스트를 조정했습니다.

💬 참고 사항

  • 추후 시간당 제한을 다시 붙일 때는 사용자 ID 대신 IP, 세션, 클라이언트 식별자 등 비로그인 요청에 사용할 제한 키 정책을 먼저 정해야 합니다.

✅ Checklist (완료 조건)

  • 코드 스타일 가이드 준수
  • 테스트 코드 포함됨
  • Reviewers / Assignees / Labels 지정 완료
  • 보안 및 민감 정보 검증 (API 키, 환경 변수, 개인정보 등)

Compound Engineering
GPT-5

- 웹사이트에서 로그인 전에도 이미지를 업로드할 수 있도록 업로드 엔드포인트를 공개 API로 전환
- 공개 API 처리 중 사용자 ID 인자 리졸버가 다시 토큰 누락 오류를 만들지 않도록 인증 의존 인자를 제거
- 사용자 기준 rate limit은 비로그인 요청 키 정책이 정해지기 전까지 제거해 공개 호출 전환 범위를 명확히 유지
- 로그인 mock 없이 업로드 성공을 검증해 비로그인 업로드 계약의 회귀를 방지
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 29, 2026

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 368af17d-c89c-4e4f-b055-82725b411b63

📥 Commits

Reviewing files that changed from the base of the PR and between ce1bc4c and e18637c.

📒 Files selected for processing (3)
  • src/main/java/gg/agit/konect/domain/upload/controller/UploadApi.java
  • src/main/java/gg/agit/konect/domain/upload/controller/UploadController.java
  • src/test/java/gg/agit/konect/integration/domain/upload/UploadApiTest.java
💤 Files with no reviewable changes (1)
  • src/main/java/gg/agit/konect/domain/upload/controller/UploadController.java
📜 Recent review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: coverage
  • GitHub Check: Analyze (java-kotlin)
🧰 Additional context used
📓 Path-based instructions (4)
**/*.java

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

**/*.java: Java 코드에서 import로 해결할 수 있는 경우 FQCN(Full Qualified Class Name)을 사용하지 않도록 지적한다
JPA/QueryDSL 조회 변경 시 N+1, 잘못된 fetch join, count 쿼리 왜곡, pagination 깨짐, distinct 누락을 확인한다
권한 로직은 관리자 우회, 요청자와 대상자 관계, 클럽/채팅방/공지/일정의 소속 검증이 빠지지 않았는지 확인한다
soft delete, 탈퇴 사용자, 차단/제외 조건, 중복 제거가 필요한 조회에서는 응답에 노출되면 안 되는 데이터가 포함되는지 확인한다
DTO 응답 변경은 기존 클라이언트가 기대하는 필드명, nullability, enum/string 값, 정렬 순서를 깨지 않는지 확인한다
조건이 2개 이상 결합된 비즈니스 규칙, 권한 조건, soft delete 제외, 중복 제거, fallback 우선순위, 대표값 선택, DTO 변환, count 쿼리 분리, fetch join 선택 이유처럼 코드만으로 의도가 숨겨지는 지점에는 주석을 권장한다
단순 생성자 호출, 필드 매핑, 컬렉션 반환, 이름만으로 명확한 분기에는 주석을 요구하지 않는다

Files:

  • src/main/java/gg/agit/konect/domain/upload/controller/UploadApi.java
  • src/test/java/gg/agit/konect/integration/domain/upload/UploadApiTest.java
**/*.{sql,java}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

데이터베이스 변경에서는 마이그레이션 순서, 기존 데이터 호환성, nullable/default 처리, 롤백 난이도, 인덱스 필요성을 확인한다

Files:

  • src/main/java/gg/agit/konect/domain/upload/controller/UploadApi.java
  • src/test/java/gg/agit/konect/integration/domain/upload/UploadApiTest.java
src/main/java/**/*.java

⚙️ CodeRabbit configuration file

src/main/java/**/*.java: 아래 원칙으로 리뷰 코멘트를 작성한다.

  • 코멘트는 반드시 한국어로 작성한다.
  • 반드시 수정이 필요한 항목만 코멘트로 남기고, 단순 취향 차이는 지적하지 않는다.
  • 각 코멘트 첫 줄에 심각도를 [LEVEL: high|medium|low] 형식으로 반드시 표기한다.
  • 심각도 기준: high=운영 장애 가능, medium=품질 저하, low=개선 권고.
  • 각 코멘트는 "문제 -> 영향 -> 제안" 순서로 3문장 이내로 간결하게 작성한다.
  • 가능하면 재현 조건 및 실패 시나리오도 포함한다.
  • 제안은 현재 코드베이스(Spring Boot + JPA + Flyway) 패턴과 일치해야 한다.
  • 보안, 트랜잭션 경계, 예외 처리, N+1, 성능 회귀 가능성을 우선 점검한다.
  • 가독성: 변수/메서드 이름이 의도를 바로 드러내는지, 중첩과 메서드 길이가 과도하지 않은지 점검한다.
  • 단순화: 불필요한 추상화, 중복 로직, 과한 방어 코드가 있으면 더 단순한 대안을 제시한다.
  • 확장성: 새 요구사항 추가 시 변경 범위가 최소화되는 구조인지(하드코딩 분기/값 여부 포함) 점검한다.

Files:

  • src/main/java/gg/agit/konect/domain/upload/controller/UploadApi.java
**/*

⚙️ CodeRabbit configuration file

**/*: 공통 리뷰 톤 가이드:

  • 모든 코멘트는 첫 줄에 [LEVEL: ...] 태그를 포함한다.
  • 과장된 표현 없이 사실 기반으로 작성한다.
  • 한 코멘트에는 하나의 이슈만 다룬다.
  • 코드 예시가 필요하면 최소 수정 예시를 제시한다.
  • 가독성/단순화/확장성 이슈를 발견하면 우선순위를 높여 코멘트한다.

Files:

  • src/main/java/gg/agit/konect/domain/upload/controller/UploadApi.java
  • src/test/java/gg/agit/konect/integration/domain/upload/UploadApiTest.java
🔇 Additional comments (1)
src/test/java/gg/agit/konect/integration/domain/upload/UploadApiTest.java (1)

47-73: LGTM!


📝 Walkthrough

개요

이미지 업로드 엔드포인트(/upload/image)의 인증 요구사항을 제거하고 공개 API로 변경합니다. API 정의에 @PublicApi 어노테이션을 추가하고, 컨트롤러에서 사용자 식별 파라미터를 제거하며, 테스트를 인증 없는 시나리오로 업데이트합니다.

변경 사항

공개 이미지 업로드 API 변경

레이어 / 파일 요약
API 계약 업데이트: 공개 API 표시
src/main/java/gg/agit/konect/domain/upload/controller/UploadApi.java
@PublicApi 어노테이션을 임포트하고 uploadImage 메서드에 적용합니다. OpenAPI 문서에서 401 MISSING_ACCESS_TOKEN 에러 항목을 제거하여 인증이 불필요함을 명시합니다.
컨트롤러 구현: 인증 요구사항 제거
src/main/java/gg/agit/konect/domain/upload/controller/UploadController.java
uploadImage 메서드 시그니처에서 @UserId Integer userId 파라미터를 제거하고 @RateLimit 어노테이션을 제거하여 인증 없이 업로드를 허용합니다.
테스트 검증: 인증 없는 업로드 시나리오
src/test/java/gg/agit/konect/integration/domain/upload/UploadApiTest.java
BeforeEach 기반 로그인 세팅을 제거하고, 인증 없이 지원하는 이미지를 업로드하여 원본 확장자로 key와 CDN URL(fileUrl)을 반환하는 테스트를 추가합니다.

추정 코드 리뷰 난이도

🎯 2 (Simple) | ⏱️ ~15 분

관련 PR

  • BCSDLab/KONECT_BACK_END#408: 동일하게 UploadController.uploadImageuserId 파라미터와 @RateLimit 제거, UploadApi의 공개성 변경을 다루며 테스트에서 로그인 세팅 제거 및 인증 없는 업로드 검증을 포함합니다.

추천 레이블

버그, 테스트

🐰 공개로 드러난 업로드의 문
인증 벗기고 모두를 맞이해
열린 API로 거듭나네

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 주요 변경 사항을 명확하게 반영하고 있으며, 비로그인 사용자도 업로드 API를 사용할 수 있게 변경된 핵심 내용을 잘 설명하고 있습니다.
Description check ✅ Passed PR 설명이 변경 사항과 관련성 있으며, 개요, 주요 변경 내용, 참고 사항 등을 자세히 설명하고 있습니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/public-upload-api

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Copy Markdown

🧪 JaCoCo Coverage Report (Changed Files)

Summary

  • Overall Coverage: 100.0% ✅
  • Covered Lines: 1 / 1
  • Changed Files: 2

Coverage by File

Class Coverage Lines Status
UploadController
gg.agit.konect.domain.upload.controller
100.0% 1/1

📊 View Workflow Run

@dh2906 dh2906 merged commit e06109c into develop May 29, 2026
5 checks passed
@dh2906 dh2906 deleted the feat/public-upload-api branch May 29, 2026 02:49
@dh2906 dh2906 self-assigned this May 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant