Skip to content

#517 [Feat] 배틀 썸네일 AI 후보 생성 API - #518

Merged
si-zero merged 1 commit into
devfrom
feat/#517
Oct 4, 2026
Merged

si-zero merged 1 commit into
devfrom
feat/#517

Conversation

@si-zero

@si-zero si-zero commented Oct 4, 2026 •

Copy link
Copy Markdown
Member

#️⃣ 연관된 이슈

📝 작업 내용

✨ Feat

내용 파일
배틀 썸네일 AI 후보 생성 API (POST /api/v1/admin/battles/thumbnail-candidates) AdminBattleController.java, AdminBattleThumbnailCandidateRequest.java, AdminBattleThumbnailCandidatesResponse.java
배틀 내용 + 공통 스타일로 후보 3장을 동시에 생성해 S3(images/battles/ai-*.png)에 업로드, 일부 실패 시 성공분만 반환 BattleThumbnailCandidateService.java
OpenAI Images API 클라이언트 (예시 이미지가 있으면 edits, 없으면 generations) OpenAiImageClient.java, ReferenceImage.java
프롬프트/예시 이미지 제공 인터페이스 + 리소스 파일 구현 BattleThumbnailStyleSource.java, ClasspathBattleThumbnailStyleSource.java
썸네일 프롬프트와 예시 이미지 3장 + 색상 팔레트 battle-thumbnail/prompt.txt, battle-thumbnail/references/*
이미지 모델 설정, 생성 실패 에러 코드 추가 application.yml, ErrorCode.java

📌 공유 사항

  1. 응답의 key를 배틀 저장 시 thumbnailUrl로 그대로 넘기면 됩니다. previewUrl은 미리보기용 presigned URL입니다.
  2. 프롬프트의 {title}, {summary}, {description}, {optionA}, {optionB}는 배틀 내용으로 치환됩니다. 예시 이미지는 파일명 순서로 전송되며 팔레트(palette.jpg)가 마지막입니다.
  3. 이미지 모델/품질은 환경변수 OPENAI_IMAGE_MODEL(기본 gpt-image-2), OPENAI_IMAGE_QUALITY(기본 medium)로 조정합니다. 기존 OPENAI_API_KEY를 사용합니다.
  4. 추후 어드민에서 프롬프트/예시를 수정하게 되면 BattleThumbnailStyleSource의 DB 구현만 추가하면 됩니다.
  5. 선택되지 않은 후보 이미지는 S3에 남습니다. 필요하면 images/battles/ai-* 정리 정책을 별도로 잡아야 합니다.
  6. 실제 OpenAI 호출은 아직 검증 전입니다. 단위 테스트(후보 생성/부분 실패/전체 실패, 리소스 로딩)만 통과한 상태입니다.

✅ 체크리스트

  • Reviewer에 팀원들을 선택했나요?
  • Assignees에 본인을 선택했나요?
  • 컨벤션에 맞는 Type을 선택했나요?
  • Development에 이슈를 연동했나요?
  • Merge 하려는 브랜치가 올바르게 설정되어 있나요?
  • 컨벤션을 지키고 있나요?
  • 로컬에서 실행했을 때 에러가 발생하지 않나요?
  • 팀원들에게 PR 링크 공유를 했나요?

📸 스크린샷

  • ./gradlew test 전체 통과 (썸네일 관련 테스트 6개 추가)

💬 리뷰 요구사항

  1. 후보 3장을 동기 요청 안에서 병렬 생성합니다(최대 1~2분). 비동기 작업 방식으로 바꿀 필요가 있는지 의견 부탁드립니다.

@si-zero si-zero self-assigned this Oct 4, 2026
@si-zero si-zero linked an issue Oct 4, 2026 that may be closed by this pull request
4 tasks
@si-zero si-zero added the ✨ Feat (기능 추가) 새로운 기능을 추가할 때 사용합니다. label Oct 4, 2026
@si-zero
si-zero merged commit ce2f45e into dev Oct 4, 2026
1 check passed
@si-zero
si-zero deleted the feat/#517 branch October 4, 2026 13:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Feat (기능 추가) 새로운 기능을 추가할 때 사용합니다.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

✨ Feat: 배틀 썸네일 AI 후보 생성 API

1 participant