티스토리 뷰
반응형
2026.05.08 - [AI] - OpenAI API 연동 - STEP3) 대화 문맥 유지
STEP 4에서는 텍스트 대화를 넘어, AI의 시각적 능력을 활용하는 'DALL-E 3 이미지 생성 API 연동'을 다뤄보겠습니다.
텍스트 기반의 Chat Completion과 구조는 비슷하지만, 결과값으로 텍스트가 아닌 이미지 URL을 받는다는 점이 핵심입니다.
STEP 4: DALL-E 3를 이용한 이미지 생성 연동
1. 이미지 생성 흐름 이해
- Prompt 전달: 사용자가 원하는 이미지 묘사를 보냅니다.
- API 호출: [https://api.openai.com/v1/images/generations](https://api.openai.com/v1/images/generations) 엔드포인트로 요청합니다.
- URL 수신: OpenAI 서버가 생성한 이미지를 임시 저장하고, 그 주소(URL)를 반환합니다.
2. STEP 4 실전 예제 코드
이미지 생성은 응답 데이터 구조가 단순하므로, Jackson 라이브러리를 통해 URL만 깔끔하게 추출해 보겠습니다.
Java
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Scanner;
public class OpenAI_Step4_Image {
private static final String API_KEY = System.getenv("OPENAI_KEY");
private static final String IMAGE_API_URL = "https://api.openai.com/v1/images/generations";
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("🎨 생성하고 싶은 이미지에 대해 설명해주세요:");
String description = scanner.nextLine();
try {
String imageUrl = generateImage(description);
System.out.println("\n✅ 이미지 생성 성공!");
System.out.println("🔗 이미지 링크: " + imageUrl);
System.out.println("(주소를 브라우저에 붙여넣어 확인하세요. 링크는 1시간 동안 유효합니다.)");
} catch (Exception e) {
System.err.println("오류 발생: " + e.getMessage());
}
}
public static String generateImage(String description) throws Exception {
ObjectMapper mapper = new ObjectMapper();
// 1. 요청 본문 구성
String jsonPayload = mapper.createObjectNode()
.put("model", "dall-e-3")
.put("prompt", description)
.put("n", 1) // 생성할 이미지 개수
.put("size", "1024x1024") // 해상도 설정
.toString();
// 2. HTTP 요청 전송
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(IMAGE_API_URL))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + API_KEY)
.POST(HttpRequest.BodyPublishers.ofString(jsonPayload))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() != 200) {
throw new RuntimeException("이미지 생성 실패: " + response.body());
}
// 3. 응답에서 URL 추출 (data[0].url)
JsonNode rootNode = mapper.readTree(response.body());
return rootNode.path("data").get(0).path("url").asText();
}
}
3. 주요 파라미터 설명
- model: dall-e-3를 사용합니다. 이전 버전보다 훨씬 정교한 묘사가 가능합니다.
- prompt: 이미지에 대한 상세 묘사입니다. 한국어보다 영어로 입력했을 때 퀄리티가 더 높게 나오는 경향이 있습니다.
- size: 1024x1024, 1024x1792 (세로형) 등 모델에 따라 지원하는 해상도가 다릅니다.
- n: 생성할 이미지 개수입니다. (DALL-E 3는 현재 기본적으로 1개만 지원하는 경우가 많습니다.)
4. 주의사항 및 비용
- 비용: 이미지 생성은 일반 텍스트 채팅보다 비용이 비쌉니다. (DALL-E 3 표준 기준 장당 약 0.04달러 수준)
- URL 유효 시간: 생성된 이미지 URL은 보안상 약 1시간 정도만 유효합니다. 따라서 서비스화할 때는 이미지를 자신의 서버나 S3 등에 따로 저장해야 합니다.
'AI' 카테고리의 다른 글
| AI 시대 주니어 개발자 생존 전략, 구글이 원하는 필수 역량 3가지 (1) | 2026.06.03 |
|---|---|
| AI 코드 분석하는 방법 (1) | 2026.05.16 |
| OpenAI API 연동 - STEP6) 비용최적화 (0) | 2026.05.12 |
| OpenAI API 연동 - STEP5) 음성인식 (0) | 2026.05.12 |
| OpenAI API 연동 - STEP3) 대화 문맥 유지 (0) | 2026.05.12 |
| OpenAI API 연동 - STEP2) 데이터 처리 (0) | 2026.05.12 |
| OpenAI API 연동 - STEP1) 연동하기 기초 (0) | 2026.05.12 |
| LLM(거대 언어 모델)이란 (0) | 2026.05.11 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자바
- C++
- OpenCV
- c#
- 파이썬
- C++ 클래스
- 배열
- 정보처리기사
- Class
- 클래스
- 파일처리
- 아두이노
- 문자열
- String
- 안드로이드
- 자료구조
- html
- MySQL
- 알고리즘
- C언어
- C
- 상속
- 블루투스
- 벡터
- 데이터베이스
- 문제풀이
- 리스트
- Android
- Java
- DB연동
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
글 보관함
반응형
