티스토리 뷰

반응형

2026.05.08 - [AI] - OpenAI API 연동 - STEP3) 대화 문맥 유지

STEP 4에서는 텍스트 대화를 넘어, AI의 시각적 능력을 활용하는 'DALL-E 3 이미지 생성 API 연동'을 다뤄보겠습니다.

텍스트 기반의 Chat Completion과 구조는 비슷하지만, 결과값으로 텍스트가 아닌 이미지 URL을 받는다는 점이 핵심입니다.


STEP 4: DALL-E 3를 이용한 이미지 생성 연동

1. 이미지 생성 흐름 이해

  1. Prompt 전달: 사용자가 원하는 이미지 묘사를 보냅니다.
  2. API 호출: [https://api.openai.com/v1/images/generations](https://api.openai.com/v1/images/generations) 엔드포인트로 요청합니다.
  3. 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 등에 따로 저장해야 합니다.

 

2026.05.08 - [AI] - OpenAI API 연동 - STEP5) 음성인식

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/06   »
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
글 보관함
반응형