Skip to content

[User] 유저 프로필 이미지 AWS S3 활용한 업로드 처리#138

Merged
Creamcheesepie merged 14 commits into
mainfrom
feat/#124
Dec 19, 2025
Merged

[User] 유저 프로필 이미지 AWS S3 활용한 업로드 처리#138
Creamcheesepie merged 14 commits into
mainfrom
feat/#124

Conversation

@larama-C
Copy link
Copy Markdown
Collaborator

@larama-C larama-C commented Dec 18, 2025

🔗 관련 이슈

관련된 이슈 번호를 연결해주세요.
Close #이슈번호 를 쓰면 PR merge 시 자동으로 close 됩니다.

🚀 PR 개요

이 PR이 어떤 변경을 포함하고 있는지 간단히 설명해주세요.

  • AWS S3를 활용한 사용자 프로필 이미지 업로드 기능을 구현했습니다.
  • S3 업로드를 위한 공용 파일 스토리지 구조를 구성하고, 사용자 도메인에 프로필 이미지 수정 API를 추가했습니다.

📌 변경 사항

주요 변경 내용을 체크리스트 형태로 정리해주세요.

  • 기능 추가
  • 버그 수정
  • 리팩터링
  • 문서 업데이트
  • 테스트 추가/수정

🧪 테스트 방법

변경된 내용을 어떻게 테스트했는지 구체적으로 적어주세요.

📸 스크린샷 (선택)

UI 변경 또는 시각적으로 확인할 수 있는 변경이 있다면 첨부해주세요.

⚠️ 참고 사항

리뷰어가 알아야 할 사항이 있다면 자유롭게 작성해주세요.

  • 파일 업로드 서비스 사용 시 뒤에 경로 지정이 필수입니다. 다른 도메인에서 사용하실 때 참고 부탁 드립니다.

@larama-C larama-C self-assigned this Dec 18, 2025
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Dec 18, 2025

Test Results

0 tests   - 1   0 ✅  - 1   0s ⏱️ ±0s
0 suites  - 1   0 💤 ±0 
0 files    - 1   0 ❌ ±0 

Results for commit 94c83f3. ± Comparison against base commit 057ab63.

♻️ This comment has been updated with latest results.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Dec 18, 2025

⭐ JaCoCo Coverage

Line Coverage: 4.77%

📄 Coverage Details

Overall Line Coverage: 4.74% (126 covered / 2658 lines)

Package Summary (lowest first)
Package Line % Covered Missed
com/back/web7_9_codecrete_be/domain/chats/controller 0.00% 0 2
com/back/web7_9_codecrete_be/domain/location/service 0.00% 0 90
com/back/web7_9_codecrete_be/domain/chats/service 0.00% 0 38
com/back/web7_9_codecrete_be/domain/plans/controller 0.00% 0 43
com/back/web7_9_codecrete_be/domain/location/controller 0.00% 0 20
com/back/web7_9_codecrete_be/global/rsData 0.00% 0 11
com/back/web7_9_codecrete_be/domain/chats/entity 0.00% 0 4
com/back/web7_9_codecrete_be/domain/location/entity 0.00% 0 15
com/back/web7_9_codecrete_be/global/scheduler 0.00% 0 3
com/back/web7_9_codecrete_be/domain/auth/entity 0.00% 0 0
com/back/web7_9_codecrete_be/domain/auth/service 0.00% 0 161
com/back/web7_9_codecrete_be/domain/plans/service 0.00% 0 311
com/back/web7_9_codecrete_be/global/initData 0.00% 0 51
com/back/web7_9_codecrete_be/domain/users/controller 0.00% 0 20
com/back/web7_9_codecrete_be/domain/email/entity 0.00% 0 6
com/back/web7_9_codecrete_be/domain/auth/controller 0.00% 0 24
com/back/web7_9_codecrete_be/global/storage 0.00% 0 23
com/back/web7_9_codecrete_be/domain/artists/controller 0.00% 0 27
com/back/web7_9_codecrete_be/global/aspect 0.00% 0 4
com/back/web7_9_codecrete_be/global/wikidata 0.36% 1 279
com/back/web7_9_codecrete_be/domain/artists/service 0.77% 3 388
com/back/web7_9_codecrete_be/global/musicbrainz 0.99% 1 100
com/back/web7_9_codecrete_be/domain/users/service 1.45% 1 68
com/back/web7_9_codecrete_be/domain/email/service 1.61% 1 61
com/back/web7_9_codecrete_be/domain/concerts/controller 3.70% 1 26
com/back/web7_9_codecrete_be/domain/concerts/entity 4.29% 3 67
com/back/web7_9_codecrete_be/domain/concerts/service 5.10% 23 428
com/back/web7_9_codecrete_be/domain/artists/entity 8.33% 4 44
com/back/web7_9_codecrete_be/global/rq 12.90% 4 27
com/back/web7_9_codecrete_be/domain/users/util 14.29% 1 6
com/back/web7_9_codecrete_be/domain/plans/entity 24.14% 21 66
com/back/web7_9_codecrete_be/global/security 25.69% 28 81
com/back/web7_9_codecrete_be/domain/users/entity 29.27% 12 29
com/back/web7_9_codecrete_be/global/spotify 35.71% 5 9
com/back/web7_9_codecrete_be/global/doc 100.00% 17 0
Lowest Covered Classes (Top 20)
Class Line % Covered Missed
com.back.web7_9_codecrete_be.domain.plans.service.PlanService 0.00% 0 311
com.back.web7_9_codecrete_be.domain.auth.service.AuthService 0.00% 0 98
com.back.web7_9_codecrete_be.domain.artists.service.ArtistService 0.00% 0 78
com.back.web7_9_codecrete_be.domain.concerts.service.ConcertService 0.00% 0 61
com.back.web7_9_codecrete_be.global.initData.BaseInitData 0.00% 0 51
com.back.web7_9_codecrete_be.domain.location.service.KakaoLocalService 0.00% 0 47
com.back.web7_9_codecrete_be.domain.plans.controller.PlanController 0.00% 0 43
com.back.web7_9_codecrete_be.domain.concerts.entity.Concert 0.00% 0 40
com.back.web7_9_codecrete_be.domain.plans.entity.Schedule 0.00% 0 37
com.back.web7_9_codecrete_be.global.security.JwtTokenProvider 0.00% 0 37
com.back.web7_9_codecrete_be.domain.artists.entity.Artist 0.00% 0 31
com.back.web7_9_codecrete_be.domain.location.service.LocationService 0.00% 0 30
com.back.web7_9_codecrete_be.domain.users.entity.User 0.00% 0 29
com.back.web7_9_codecrete_be.domain.chats.service.ChatPolicyService 0.00% 0 27
com.back.web7_9_codecrete_be.domain.auth.service.TokenService 0.00% 0 27
com.back.web7_9_codecrete_be.domain.artists.controller.ArtistsController 0.00% 0 27
com.back.web7_9_codecrete_be.domain.auth.controller.AuthController 0.00% 0 24
com.back.web7_9_codecrete_be.global.storage.S3FileStorageService 0.00% 0 23
com.back.web7_9_codecrete_be.domain.users.controller.UserController 0.00% 0 20
com.back.web7_9_codecrete_be.domain.plans.entity.Plan 0.00% 0 18
Changed Classes (from this PR)
Source (PR) Class Prefix Line % Covered Missed
src/main/java/com/back/web7_9_codecrete_be/domain/plans/service/PlanService.java com.back.web7_9_codecrete_be.domain.plans.service.PlanService 0.00% 0 311
src/main/java/com/back/web7_9_codecrete_be/global/storage/S3FileStorageService.java com.back.web7_9_codecrete_be.global.storage.S3FileStorageService 0.00% 0 23
src/main/java/com/back/web7_9_codecrete_be/domain/users/controller/UserController.java com.back.web7_9_codecrete_be.domain.users.controller.UserController 0.00% 0 20
src/main/java/com/back/web7_9_codecrete_be/domain/plans/dto/response/PlanDetailResponse.java com.back.web7_9_codecrete_be.domain.plans.dto.response.PlanDetailResponse 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/plans/dto/response/ScheduleResponse.java com.back.web7_9_codecrete_be.domain.plans.dto.response.ScheduleResponse 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/plans/repository/ScheduleRepository.java com.back.web7_9_codecrete_be.domain.plans.repository.ScheduleRepository 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/users/dto/response/UserResponse.java com.back.web7_9_codecrete_be.domain.users.dto.response.UserResponse 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/global/config/S3Config.java com.back.web7_9_codecrete_be.global.config.S3Config 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/global/error/code/PlanErrorCode.java com.back.web7_9_codecrete_be.global.error.code.PlanErrorCode 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/global/error/code/UserErrorCode.java com.back.web7_9_codecrete_be.global.error.code.UserErrorCode 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/global/storage/FileStorageService.java com.back.web7_9_codecrete_be.global.storage.FileStorageService 0.00% 0 0
src/main/java/com/back/web7_9_codecrete_be/domain/users/service/UserService.java com.back.web7_9_codecrete_be.domain.users.service.UserService 1.54% 1 64
src/main/java/com/back/web7_9_codecrete_be/domain/plans/entity/Schedule.java com.back.web7_9_codecrete_be.domain.plans.entity.Schedule 21.28% 10 37
src/main/java/com/back/web7_9_codecrete_be/global/security/SecurityConfig.java com.back.web7_9_codecrete_be.global.security.SecurityConfig 100.00% 24 0

🔗 Full HTML report: See artifact jacoco-full-html on this run → https://github.com/prgrms-web-devcourse-final-project/WEB7_9_codecrete_BE/actions/runs/20356008193

Copy link
Copy Markdown
Collaborator

@Creamcheesepie Creamcheesepie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

서버에서 파일을 처리하는 순간 신경쓸 게 한 둘이 아니게 되죠...
그래도 로컬에서 저장하고 가져오고 하는거에 비하면 괜찮다는 생각은 들지만 그래도 이래저래 신경 쓸 게 많네요. 수고하셨습니다!

@PatchMapping(value = "/profile-image", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public RsData<?> updateProfileImage(
@RequestPart MultipartFile file
@RequestPart("file") MultipartFile file
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

파일에 대한 유효성 검증을 추가하면 좋을 것 같습니다 ex) 확장자, 파일명

private final EmailService emailService;

private static final long MAX_PROFILE_IMAGE_SIZE = 10 * 1024 * 1024; // 10MB

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s3가 데이터를 못 받는 상황에 대한 테스트가 필요할 것 같습니다

Copy link
Copy Markdown
Collaborator

@ys0221 ys0221 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다!!

@Creamcheesepie Creamcheesepie merged commit 5423506 into main Dec 19, 2025
1 check passed
@Creamcheesepie Creamcheesepie deleted the feat/#124 branch December 19, 2025 00:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[User] 프로필 이미지 AWS S3 사용하여 업로드

4 participants