📢 공지합니다
이 게시글은 메인 페이지에 항상 고정되어 표시됩니다.
이번시간에는 스프링과 Open AI 연동하는 법을 알려드리겠습니다!!
[Springboot] 스프링부트로 DALL-E API 호출하기
프로젝트를 진행하는 과정에서, 사용자가 원하는 이미지를 생성하여 출력하는 기능을 구현하기 위해 OpenAI사의 DALL-E API를 유료 결제를 통해 사용하게 되었습니다.(DALL-E: OpenAI에서 개발한 생성형
velog.io
일단 필자도 잘 몰라서 위 블로그님꺼를 활용해서 만들어 보았습니다....
연동이 되긴 되었는데 Dall-e-2 모델입니다 ㅡㅡ
Dall-e-3 모델을 활용할려는 이유는 2가 한글지원이 안되고 3가 한글지원이 되기 때문입니다!!
그래서 필자가 연구해서 성공을 시켰습니다~
일단 먼저 open AI 사이트로 들어가서 API 키를 발급 받아야 됩니다!!
추가로 API Key를 사용하기 위해서는 11달러 충전을 해야됩니다 ㅜㅜㅜㅜ (학생인데 무료로 해주지)
알아본 봐로 3개월까지 무료 크레딧 증정을 해준다는데 올해부터 바껴서 지원을 안해준답니다 ㅡㅡㅡ
https://openai.com/api/pricing/
위 사이트에 들어가셔서 API Key 비용을 확인하실 수 있습니다.
Dall-e-3 모델은 한건단 0.04 달러라는 군요... 11달러에서 수수료 1달러 빠져나갔으니깐
10달러로 총 250건을 만들 수 있습니다.
// open ai
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'
implementation 'com.theokanning.openai-gpt3-java:client:0.10.0'
implementation 'com.theokanning.openai-gpt3-java:service:0.10.0'
implementation 'com.stripe:stripe-java:23.2.0'
implementation 'javax.xml.bind:jaxb-api:2.3.1'
implementation 'sh.platform:config:2.2.2'
Build.gradle에서 위와 같이 설정을 해둡니다!
@Service
@Slf4j
public class AIService {
@Autowired
private OpenAiService openAiService;
@Value("${openai.key}")
private String openaiApiKey;
public String generatePictureV2(String prompt) throws IOException, InterruptedException {
String url = "https://api.openai.com/v1/images/generations";
// JSON 문자열 생성
String requestBody = String.format(
"{\"model\":\"dall-e-3\",\"prompt\":\"%s\",\"n\":1,\"size\":\"1024x1024\"}",
prompt);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + openaiApiKey)
.POST(HttpRequest.BodyPublishers.ofString(requestBody))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
// 응답 본문에서 URL 추출
String responseBody = response.body();
int startIndex = responseBody.indexOf("https://"); // URL이 "https://"로 시작함
int endIndex = responseBody.indexOf("\"", startIndex); // URL이 큰 따옴표로 끝남
String imageUrl = responseBody.substring(startIndex, endIndex);
log.info(response.body());
log.info("===============");
log.info(imageUrl);
return imageUrl;
}
일단 위와 같이 코드를 복붙해 넣어줍시다!
위 코드에서 API Key는 application.properties에서 불러와 준뒤 위와 같이 설정을 해둡니다.
위 사진과 같이 dall-e-3의 1024 화질을 사용할거라서 위와 같이 작성을 해둔겁니다.
@Controller
@Slf4j
@RequiredArgsConstructor
public class AIController {
private final AIService aiService;
@GetMapping("/ai-image")
public String getImage(Model model)
throws IOException, InterruptedException {
String prompt = aiService.
generatePictureV2("요즘 대한민국 경제상황에 관한 이미지 생성해줘");
model.addAttribute("url", prompt);
return "test";
}
서비스 코드가 마무리 됐으면 컨트롤러 코드에서 위와 같이 작성을 해줍시다!!
필자가 html 폼을 안만들어서 수동으로 "IT 취업에 관한 이미지 생성 해줘" 라는 문구를 작성했습니다.
그러면 저 코드는 이전에 만든 서비스 클래스인 AIService 클래스로 넘어가고 그 클래스에서 log.info를 활용해서
해당 사진의 URL을 터미널에 출력하도록 했습니다.
그럼 해당 컨트롤러인 /ai-image 로들어가면
위 사진과 같이 url이 나오게 됩니다.
해당 url로 들어가면 위 사진과 같이 DALL 모델이 사진을 잘 만들어주는 것을 확인할 수 있습니다!!
참고로 URL은 1시간 만료되니 얼른 저장하시길... 돈아까우니깐!!
안되거나 헷갈리는거 있으시면 물어봐주세요!! 적극적으로 도와드릴게요!
스프링 소셜 로그인 구현하기(네이버, 카카오, OAuth2.0) (0) | 2024.07.09 |
---|---|
스프링과 파이썬 스크립트 연결(TTS 만들기) (0) | 2024.06.11 |
KoBart 모델을 활용한 요약 모델 만들기 (1) | 2024.05.30 |
스프링 & AJAX를 활용한 실시간 메일 인증 (1) | 2024.05.15 |
스프링 메일 보내기 (네이버, 구글) (0) | 2024.05.07 |