Skip to content

test: BannerService/S3Service 단위 테스트 추가 + 이미지 업로드 크래시 버그 수정 (prod) - #225

Merged
unam98 merged 1 commit into
mainfrom
tests/banner-s3-service-prod
Aug 5, 2026
Merged

test: BannerService/S3Service 단위 테스트 추가 + 이미지 업로드 크래시 버그 수정 (prod)#225
unam98 merged 1 commit into
mainfrom
tests/banner-s3-service-prod

Conversation

@unam98

@unam98 unam98 commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

작업 배경

  • dev PR #224을 prod에 반영. 심각도는 낮지만(엣지 케이스, 보안 이슈 아님) 일관성 있게 함께 포트.

변경 사항

영역 내용
S3Service.getFileExtension 파일명 null 체크 추가, 확장자(".") 없는 파일명 처리 추가
BannerServiceTest, S3ServiceTest 단위 테스트 9개 신규

영향 범위

  • 이미지 업로드 API에서 파일명이 없거나(null/빈값) 확장자가 없는 잘못된 요청을 보내는 극단적 케이스가 500 대신 400/404로 정상 처리됨. 정상적인 파일 업로드 흐름에는 영향 없음.
  • deleteFile()의 하드코딩된 오프셋 문제는 dev PR #224와 동일하게 이번에도 손대지 않음 (실사용 없는 dead code, 검증 없이 고치는 게 더 위험).

검증 매트릭스

dev PR #224와 동일한 테스트 파일 — S3ServiceTest, BannerServiceTest 참고.

Test Plan

  • 로컬에서 9개 전부 통과
  • docker run으로 임시 DB/Redis 띄워서 ./gradlew build 전체(ServerApplicationTests 포함) 통과 확인

🤖 Generated with Claude Code

BannerService 2개, S3Service.uploadImage 7개, 총 9개 신규 테스트.

테스트 작성 중 발견해서 수정한 버그 (S3Service.getFileExtension):
1. 파일명이 null이면 length() 호출에서 NPE → 500. null/빈 문자열
   체크 추가.
2. 파일명에 "."가 없으면 lastIndexOf가 -1을 반환하고 그 값 그대로
   substring(-1)을 호출해 StringIndexOutOfBoundsException → 500.
   "."가 없는 경우를 먼저 걸러내도록 수정.
둘 다 원래는 "잘못된 이미지 파일입니다"(400/404)로 처리됐어야 할
케이스가 서버 에러로 새어나가고 있었음.

## 별도로 확인만 하고 고치지 않은 것
S3Service.deleteFile()의 `imageUrl.substring(49)`는 폴더명/버킷명
길이에 따라 늘 달라지는 값이라 하드코딩된 49는 구조적으로 항상
맞을 수 없음. 다만 이 메서드를 실제로 호출하는 곳이 코드베이스
전체에 없어(dead code) 지금 당장 영향은 없음. 실제 URL 포맷을
확인 없이 숫자만 바꾸는 건 오히려 위험해서, 이번엔 고치지 않고
플래그만 해둠 — deleteFile을 실제로 쓰기 전에 반드시 점검 필요.
@unam98 unam98 self-assigned this Aug 5, 2026
@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 8f3565f0-f3ca-4006-be14-512dc84f9b3e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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.

@unam98
unam98 merged commit 83bbdb2 into main Aug 5, 2026
2 checks passed
@unam98
unam98 deleted the tests/banner-s3-service-prod branch August 5, 2026 11:46
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.

2 participants