Updated:

 먼저 https://aistudio.google.com/ 에서 API키를 발급하고 Intellij에서 환경변수 처리를 해준다.

# Google Ai
google:
  ai:
    api-key: ${GOOGLE_API_KEY}

 build.gradle에서 Google GenAI dependency를 추가한다.

// Gemini
implementation 'org.springframework.ai:spring-ai-starter-model-google-genai'

 다음과 같이 GeminiConfig를 Bean 등록을 해준다.

@Configuration
public class GeminiConfig {

    @Bean
    public Client geminiClient() {
        return new Client();
    }
}

 이제 Gemini는 배달앱의 음식 설명을 생성해야 하므로 다음과 같이 generateProductDescription과 prompt를 작성한다.

@Slf4j
@Service
@RequiredArgsConstructor
public class AiDescriptionServiceImpl implements AiDescriptionService {

    private final Client geminiClient;

    @Override
    public String generateProductDescription(String productName, String point) {

        String prompt = """
                당신은 배달앱 음식 메뉴 소개를 작성하는 마케터입니다.
                
                [메뉴 이름]
                %s
                
                [메뉴 특징]
                %s
                
                위 정보를 기반으로 배달앱에 등록할 음식 설명을 작성하세요.
                
                조건:
                - 답변을 최대한 간결하게 50자 이하로
                - 먹고 싶어지게 작성
                - 과장 광고 금지
                - 이모지 사용 금지
                """.formatted(productName, point);

        GenerateContentResponse response = geminiClient.models.generateContent(
                "gemini-3-flash-preview",
                prompt,
                null
        );

        String result = response.text();

        if(result == null || result.isBlank()) {
            throw new RuntimeException("AI 설명 생성 실패");
        }

        return result.trim();
    }
}

 구현한 generateDescription은 ProductService에서 사용한다.

public ProductResponseDto generateDescription(UUID productId, String point) {

    Product product = productRespository.findByProductIdAndDeletedAtIsNull(productId)
            .orElseThrow(() -> new IllegalArgumentException("상품이 존재하지 않습니다."));

    String aiDescription = aiDescriptionService.generateProductDescription(product.getName(), point);

    product.updateDescription(aiDescription);

    return ProductResponseDto.from(product);
    }
@PostMapping("/{productId}/ai-description")
public ResponseEntity<ProductResponseDto> generateAiDescription(@PathVariable UUID productId, @RequestBody AiDescriptionRequestDto request) {
    return ResponseEntity.ok(
            productService.generateDescription(productId, request.getPoint())
    );
}

 이제 Postman에서 테스트를 진행해본다.

 정상적으로 설명이 생성된 것을 확인할 수 있다.

댓글남기기