안녕하세요! 이번 포스팅에서는 Java Spring Framework를 이용하여 Chat Completions API를 구현하는 방법에 대해 상세히 설명드리겠습니다. 쉽게 이해할 수 있도록 각 단계를 자세히 설명하며, 코드 예제도 포함할 예정입니다. Chat Completions API는 최신 인공지능 모델과 상호작용할 수 있게 해주는 훌륭한 도구입니다. 이를 다양한 애플리케이션에 활용할 수 있도록 함께 살펴보겠습니다.
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 기능을 구현해보시기 바랍니다!
이러한 저의 포스팅이 여러분께 도움이 되기를 바랍니다. 궁금한 점이나 추가적인 질문은 댓글로 남겨 주시면 감사하겠습니다!
'IT > Java' 카테고리의 다른 글
Jsoup에서 인증서 error 우회하는 방법 (1) | 2025.03.24 |
---|---|
스프링 부트와 하이버네이트 JPA 기본 사용법 (1) | 2025.03.19 |
자바 Stream API를 활용한 데이터 처리 예제 (0) | 2025.03.09 |
JAVA Spring Boot에서 Quartz를 활용한 간편한 작업 스케줄링 (0) | 2025.03.03 |
JAVA GSON 소개 (1) | 2025.03.01 |