Skip to content

fix: 이미지 경로 분석 문제 - #407

Merged
soseongmin03 merged 1 commit into
developfrom
fix/405-이미지경로분석문제
Aug 13, 2026

Hidden character warning

The head ref may contain hidden characters: "fix/405-\uc774\ubbf8\uc9c0\uacbd\ub85c\ubd84\uc11d\ubb38\uc81c"
Merged

fix: 이미지 경로 분석 문제#407
soseongmin03 merged 1 commit into
developfrom
fix/405-이미지경로분석문제

Conversation

@soseongmin03

@soseongmin03 soseongmin03 commented Aug 13, 2026

Copy link
Copy Markdown
Collaborator

🔗 관련 이슈

📌 작업 내용

  • AI 태그 분석 호출 시 imageObjectKey를 함께 전달하도록 변경
  • Gemini 분석 전 이미지 로딩에서 object key를 우선 사용하도록 수정
  • storage에서 seed 이미지를 읽지 못하는 경우 classpath:/static/files fallback으로 정적 seed 이미지 읽기 지원
  • seed 이미지 fallback 회귀 테스트 추가

📌 변경된 API

📌 테스트 결과

.\gradlew.bat test --tests com.tenure.domain.ootd.ai.GeminiAiTagServiceTest --tests com.tenure.domain.tag.service.OotdTagServiceTest

📌 확인 필요 사항


✅ 체크리스트

  • 기능 요구사항을 충족했는가?
  • API 응답 형식이 통일되어 있는가?
  • 예외 상황이 적절히 처리되었는가?
  • 인증/인가 검증이 누락되지 않았는가?
  • Entity를 직접 응답하지 않았는가?
  • 중복 코드가 과도하지 않은가?
  • 메서드와 클래스의 역할이 명확한가?
  • 테스트가 필요한 핵심 로직에 테스트가 작성되었는가?

@soseongmin03 soseongmin03 self-assigned this Aug 13, 2026
@github-actions

Copy link
Copy Markdown

Gemini 파일 단위 요약 리뷰

src/main/java/com/tenure/domain/ootd/service/OotdService.java

변경 요약

  • createAutoTagOotd 메서드 내에서 발행하는 OotdCreatedEvent 생성자에 S3 오브젝트 키(ootd.getImageObjectKey())를 인자로 추가하여 전달하도록 변경되었습니다.

영향 범위

  • 이벤트 모델 및 흐름: OotdCreatedEvent 클래스의 생성자 스펙이 변경되며, 이 이벤트를 구독하여 처리하는 이벤트 리스너(예: AI 자동 태깅 서비스, 이미지 처리 모듈 등)에서 이미지 URL 외에 S3 오브젝트 키 정보까지 활용할 수 있게 됩니다.

확인 필요

  • OotdCreatedEvent 정의 파일에서 생성자 파라미터 및 필드가 이 변경사항(4번째 인자 추가)에 맞춰 함께 수정되었는지 확인이 필요합니다.
  • createAutoTagOotd 외에 OotdCreatedEvent를 발행하는 다른 메서드(예: 일반 OOTD 생성 메서드 등)가 존재한다면, 해당 위치에서도 동일하게 생성자 호출 형식이 수정되었는지 확인이 필요합니다.

제안

  • 없음

src/main/java/com/tenure/domain/tag/service/OotdTagService.java

변경 요약

  • aiTagService.analyzeRegion 메서드를 호출할 때, OOTD 엔티티의 S3 오브젝트 키(ootd.getImageObjectKey())를 파라미터로 추가 전달하도록 변경되었습니다.

영향 범위

  • 기능 및 흐름: OOTD 이미지 영역 분석 요청 API (OotdTagService.analyzeTagArea) 실행 시 AI 태깅 서비스(AiTagService)로 데이터가 전달되는 흐름에 영향을 줍니다.
  • 인프라/스토리지: 외부 이미지 URL 기반 분석에서 S3 오브젝트 키를 직접 활용하는 방식으로 AI 서비스 연동 로직이 보완되거나 변경됩니다.

확인 필요

  • 메서드 시그니처 일치 여부: aiTagService.analyzeRegion 메서드의 파라미터 정의(타입 및 순서)가 이번 변경에 맞춰 함께 수정되었는지 확인이 필요합니다.
  • Null 방어 조치: 기존에 등록된 OOTD 데이터 중 imageObjectKeynull인 항목이 존재할 경우, aiTagService 내부에서 NullPointerException이 발생하지 않고 적절히 예외 처리되거나 URL 방식으로 대체(Fallback) 작동하는지 확인이 필요합니다.

제안

  • 없음

src/test/java/com/tenure/domain/ootd/ai/GeminiAiTagServiceTest.java

변경 요약

  • GeminiAiTagService에 대한 단위 테스트 클래스인 GeminiAiTagServiceTest가 새롭게 추가되었습니다.
  • ImageStorageService에서 이미지를 읽지 못하는 IOException 상황 발생 시, 클래스패스 내의 로컬 정적 이미지 파일로 대체(Fallback)하여 정상적으로 바이트 데이터를 읽어오는지 검증하는 테스트 케이스를 구현하였습니다.

영향 범위

  • GeminiAiTagService 내부의 readImageBytes 메서드 동작 검증 및 로컬 시드 이미지 읽기 기능에 영향을 줍니다.
  • CI/CD 파이프라인의 테스트 빌드 단계에서 정적 리소스 로딩 및 모킹 동작 확인 과정에 영향을 줍니다.

확인 필요

  • 실제 파일 존재 여부: 테스트 코드에서 사용하는 클래스패스 내 리소스 경로인 /files/seed/ian/ootds/ootd_001.jpg 파일이 src/test/resources 또는 src/main/resources 하위에 실제로 존재하여 CI 환경에서도 빌드가 정상 동작하는지 확인이 필요합니다.

제안

  • 프라이빗 메서드 테스트 방식 개선: 현재 ReflectionTestUtils.invokeMethod를 사용하여 프라이빗 메서드인 readImageBytes를 직접 호출하고 있습니다. 이는 내부 구현 방식 변경 시 테스트가 깨지기 쉽습니다. 가급적 이 메서드를 간접적으로 호출하는 상위 public 메서드를 통해 테스트 시나리오를 구성할 것을 권장합니다.
  • 매직 넘버 가독성: JPEG 파일의 헤더 바이트(0xFF, 0xD8, 0xFF)를 직접 비교하는 부분은 의도가 명확히 드러나도록 상수화하거나 주석을 추가하면 코드 가독성에 도움이 됩니다.

src/test/java/com/tenure/domain/tag/service/OotdTagServiceTest.java

변경 요약

  • aiTagService.analyzeRegion 메서드의 파라미터가 추가됨에 따라, 테스트 내 Mocking(stubbing) 코드에 eq(ootd.getImageObjectKey()) 매개변수 검증을 추가

영향 범위

  • OotdTagService.analyzeTagArea 비즈니스 로직을 검증하는 단위 테스트 실행 흐름
  • AI 기반 태그 영역 분석 시 이미지 URL 뿐만 아니라 S3 Object Key를 함께 전달하는 인터페이스 변경 사항 반영

확인 필요

  • 해당 테스트 파일 내 ootd 테스트 픽스처(Fixture) 생성 시 imageObjectKey가 적절한 값으로 초기화되어 있는지 확인이 필요합니다. 만약 ootd.getImageObjectKey()null을 반환하는 구조라면 Mockito stubbing 시 의도치 않은 매칭 실패가 발생할 수 있습니다.

제안

  • 테스트의 주 관심사가 imageObjectKey 값의 정확한 전달 여부가 아니라면, 향후 메서드 시그니처 변경 시 테스트가 쉽게 깨지는 것을 방지하기 위해 eq(ootd.getImageObjectKey()) 대신 any(String.class) 또는 any()를 사용하는 것을 제안합니다.

@soseongmin03
soseongmin03 merged commit 0f4cede into develop Aug 13, 2026
2 checks passed
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.

3 participants