본문 바로가기
IT/Java

Java Spring Framework를 활용한 OpenAI Chat Completions 예제

by bamcong 2025. 3. 26.
728x90
반응형

안녕하세요! 이번 포스팅에서는 Java Spring Framework를 이용하여 Chat Completions API를 구현하는 방법에 대해 상세히 설명드리겠습니다. 쉽게 이해할 수 있도록 각 단계를 자세히 설명하며, 코드 예제도 포함할 예정입니다. Chat Completions API는 최신 인공지능 모델과 상호작용할 수 있게 해주는 훌륭한 도구입니다. 이를 다양한 애플리케이션에 활용할 수 있도록 함께 살펴보겠습니다.

OpenAI GPT

1. Spring 프로젝트 설정

먼저, Spring Boot 프로젝트를 생성해야 합니다. IDE로는 IntelliJ IDEA를 추천드리며, Gradle로 프로젝트를 관리해 보겠습니다.

plugins {
    id 'org.springframework.boot' version '2.5.4'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'com.fasterxml.jackson.core:jackson-databind'
    implementation 'org.springframework.boot:spring-boot-starter'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

위의 `build.gradle` 파일을 설정하여 Spring Boot 웹 애플리케이션을 시작할 수 있습니다.

2. API 클라이언트 구현

Chat Completions API와 연동하기 위해 HttpClient를 사용하여 요청을 보낼 클래스를 생성합니다. 아래는 API 요청을 처리하는 `ChatGPTService` 클래스의 코드입니다.

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.http.*;
import org.springframework.web.util.UriComponentsBuilder;

@Service
public class ChatGPTService {

    @Value("${openai.api.key}")
    private String apiKey;

    private final RestTemplate restTemplate;

    public ChatGPTService(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    public String getChatCompletion(String prompt) {
        String url = "https://api.openai.com/v1/chat/completions";

        HttpHeaders headers = new HttpHeaders();
        headers.setBearerAuth(apiKey);
        headers.setContentType(MediaType.APPLICATION_JSON);

        String requestBody = String.format("{\"model\":\"gpt-3.5-turbo\", \"messages\":[{\"role\":\"user\", \"content\":\"%s\"}]}",
                prompt);

        HttpEntity entity = new HttpEntity<>(requestBody, headers);

        ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);

        return response.getBody(); // 응답 본문 반환
    }
}

위의 코드에서 `getChatCompletion` 메서드는 사용자로부터 받은 프롬프트를 API에게 전송하여 응답을 반환합니다. `@Value` 어노테이션을 사용하여 API 키를 환경 변수에서 주입받습니다.

3. REST Controller 구현

이제 API 요청을 받는 REST Controller를 구현해보겠습니다. 다음은 `ChatController` 클래스의 코드입니다.

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/chat")
public class ChatController {

    private final ChatGPTService chatGPTService;

    public ChatController(ChatGPTService chatGPTService) {
        this.chatGPTService = chatGPTService;
    }

    @PostMapping("/completions")
    public String getChatCompletions(@RequestBody String prompt) {
        return chatGPTService.getChatCompletion(prompt); // ChatGPTService 호출
    }
}

위의 코드에서는 클라이언트가 POST 요청으로 `/api/chat/completions` 엔드포인트에 프롬프트를 전송하면, ChatGPTService가 호출되어 AI의 응답을 얻고, 이를 반환합니다.

4. RestTemplate Bean 설정

Spring Boot에서는 `RestTemplate` 옵션을 설정하기 위한 Bean을 생성해야 합니다. 아래와 같이 `@Configuration` 클래스를 추가해주세요.

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

5. application.properties 설정

마지막으로 API 키를 설정하기 위해 `src/main/resources/application.properties` 파일에 아래의 코드를 추가해야 합니다.

openai.api.key=YOUR_OPENAI_API_KEY

여기서 `YOUR_OPENAI_API_KEY`를 OpenAI 계정에서 발급받은 API 키로 변경해야 합니다. 이 키는 API 요청 시 인증을 위한 용도로 사용됩니다.

6. 프로젝트 실행

이제 모든 설정이 완료되었습니다. 프로젝트를 실행한 후, Postman이나 cURL 등의 도구를 사용하여 API를 호출해볼 수 있습니다.

POST http://localhost:8080/api/chat/completions
Content-Type: application/json

{
    "prompt": "안녕하세요! 오늘 날씨는 어떤가요?"
}

위와 같이 요청하면 Chat Completions API의 응답을 받아볼 수 있습니다.

응답 예시

{"id": "chatcmpl-12345", "object": "chat.completion", "created": 1626123456, "model": "gpt-3.5-turbo", "choices": [{"message": {"role": "assistant", "content": "오늘은 맑고 화창한 날씨입니다."}, "finish_reason": "stop", "index": 0}], "usage": {"prompt_tokens": 15, "completion_tokens": 8, "total_tokens": 23}}

 

최종 정리

이번 포스팅에서는 Java Spring Framework를 사용하여 Chat Completions API와 상호작용하는 방법을 알아보았습니다. backend 로직을 통해 간단한 챗봇 애플리케이션을 구축할 수 있었고, API의 응답 처리 방법에 대해 설명드렸습니다. 이러한 방법으로 여러분의 애플리케이션에서도 ChatGPT 기능을 구현해보시기 바랍니다!

이러한 저의 포스팅이 여러분께 도움이 되기를 바랍니다. 궁금한 점이나 추가적인 질문은 댓글로 남겨 주시면 감사하겠습니다!

728x90
반응형