Skip to content

feat: add presigned upload support for recruit files#327

Merged
CSE-Shaco merged 1 commit into
GDGoCINHA:developfrom
CSE-Shaco:develop
Apr 27, 2026
Merged

feat: add presigned upload support for recruit files#327
CSE-Shaco merged 1 commit into
GDGoCINHA:developfrom
CSE-Shaco:develop

Conversation

@CSE-Shaco

@CSE-Shaco CSE-Shaco commented Apr 27, 2026

Copy link
Copy Markdown
Contributor

📌 연관된 이슈

ex) #이슈번호, #이슈번호

✨ 작업 내용

이번 PR에서 작업한 내용을 간략히 설명해주세요

💬 리뷰 요구사항(선택)

Summary by CodeRabbit

릴리스 노트

  • 새 기능

    • 파일 사전 서명 업로드 기능 추가: 안전한 파일 업로드를 위한 사전 서명 URL 생성 지원
    • 모집 지원서 증명 파일 업로드 엔드포인트 추가
    • S3 파일 URL 자동 변환: 저장된 파일 경로가 실제 접근 가능한 URL로 자동 변환
  • 개선

    • 증명 파일 최대 크기 제한 적용 (10MB)

@CSE-Shaco CSE-Shaco merged commit 31a29da into GDGoCINHA:develop Apr 27, 2026
1 of 2 checks passed
@coderabbitai

coderabbitai Bot commented Apr 27, 2026

Copy link
Copy Markdown

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: c9ff5b20-fc77-44e0-8386-eb3d6751b129

📥 Commits

Reviewing files that changed from the base of the PR and between 82fe597 and ec9ca92.

📒 Files selected for processing (11)
  • src/main/java/inha/gdgoc/domain/recruit/core/dto/response/RecruitCoreApplicantDetailResponse.java
  • src/main/java/inha/gdgoc/domain/recruit/core/service/RecruitCoreApplicationService.java
  • src/main/java/inha/gdgoc/domain/recruit/member/controller/RecruitMemberController.java
  • src/main/java/inha/gdgoc/domain/recruit/member/service/RecruitMemberService.java
  • src/main/java/inha/gdgoc/domain/resource/controller/ResourceController.java
  • src/main/java/inha/gdgoc/domain/resource/dto/request/PresignedUploadRequest.java
  • src/main/java/inha/gdgoc/domain/resource/dto/response/PresignedUploadResponse.java
  • src/main/java/inha/gdgoc/domain/resource/enums/S3KeyType.java
  • src/main/java/inha/gdgoc/domain/resource/service/ResourceService.java
  • src/main/java/inha/gdgoc/domain/resource/service/S3Service.java
  • src/main/java/inha/gdgoc/global/config/s3/S3Config.java

요약

S3 사전 서명된 업로드 URL 생성 기능을 도입하고, 파일 URL 해석을 추가하는 변경사항입니다. 리소스 및 모집 관련 서비스에 프리사인드 업로드 엔드포인트를 추가하고, RecruitCore 및 RecruitMember 모듈에서 S3 파일 URL을 해석합니다.

변경사항

코호트 / 파일 요약
S3 사전 서명 업로드 핵심
src/main/java/inha/gdgoc/domain/resource/service/S3Service.java, src/main/java/inha/gdgoc/global/config/s3/S3Config.java
S3Presigner 빈 추가 및 createPresignedUpload 메서드 구현으로 프리사인드 업로드 URL 생성 지원. 기존 upload 메서드를 buildKey 헬퍼로 리팩토링하여 S3 키 생성 로직 통합.
리소스 컨트롤러 및 서비스
src/main/java/inha/gdgoc/domain/resource/controller/ResourceController.java, src/main/java/inha/gdgoc/domain/resource/service/ResourceService.java
POST /presigned-upload 엔드포인트 추가로 인증된 사용자가 프리사인드 업로드 URL 요청 가능. 파일 크기 검증(최대 크기 초과 시 예외 발생).
리소스 DTO 및 열거형
src/main/java/inha/gdgoc/domain/resource/dto/request/PresignedUploadRequest.java, src/main/java/inha/gdgoc/domain/resource/dto/response/PresignedUploadResponse.java, src/main/java/inha/gdgoc/domain/resource/enums/S3KeyType.java
PresignedUploadRequest/Response DTO 신규 생성 및 S3KeyType 열거형에 recruitCore, recruitMember 상수 추가.
모집 회원 증명 파일 업로드
src/main/java/inha/gdgoc/domain/recruit/member/controller/RecruitMemberController.java, src/main/java/inha/gdgoc/domain/recruit/member/service/RecruitMemberService.java
POST /apply/proof-file/presigned-upload 엔드포인트 신규 추가. 10MB 파일 크기 제한 검증 및 S3KeyType.recruitMember 사용으로 증명 파일 업로드 지원.
모집 핵심 파일 URL 해석
src/main/java/inha/gdgoc/domain/recruit/core/dto/response/RecruitCoreApplicantDetailResponse.java, src/main/java/inha/gdgoc/domain/recruit/core/service/RecruitCoreApplicationService.java
RecruitCoreApplicantDetailResponse.from 메서드 오버로딩으로 명시적 fileUrls 수락. S3 파일 URL 변환 로직 추가로 HTTP(S) 비 항목을 실제 S3 URL로 해석.

시퀀스 다이어그램

sequenceDiagram
    participant Client
    participant ResourceController
    participant ResourceService
    participant S3Service
    participant AWS as AWS S3

    Client->>ResourceController: POST /presigned-upload<br/>PresignedUploadRequest
    ResourceController->>ResourceService: createPresignedUpload(auth, request)
    ResourceService->>ResourceService: 파일 크기 검증
    ResourceService->>S3Service: createPresignedUpload(userId, s3key,<br/>fileName, contentType)
    S3Service->>S3Service: buildKey로 S3 키 생성
    S3Service->>AWS: PutObjectRequest 사전 서명
    AWS-->>S3Service: 프리사인드 업로드 URL
    S3Service-->>ResourceService: PresignedUpload(key, uploadUrl)
    ResourceService-->>ResourceController: PresignedUploadResponse
    ResourceController-->>Client: ApiResponse<PresignedUploadResponse>

    Client->>Client: 프리사인드 URL로 S3에 직접 업로드
    Client->>AWS: PUT 파일 (프리사인드 URL)
    AWS-->>Client: 업로드 완료
Loading

코드 검토 예상 소요 시간

🎯 3 (보통) | ⏱️ ~25분

연관된 가능성 있는 PR

제안 레이블

refactor

🐰 새로운 기능을 들고 나타났네,
S3 업로드 URL을 미리 서명하며,
파일들을 안전하게 저장하고,
리소스와 모집 모듈을 연결하여,
신나는 변화를 만들어낸다! 🚀

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

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