Search

Spring AI 로 ChatGPT API 만들기

1. 스프링 부트 프로젝트 초기화

스프링 부트는 웹 애플리케이션을 빠르게 만들 수 있도록 도와주는 프레임워크입니다. 프로젝트를 초기화하고, AI 기능을 구현하기 위해 기본적인 설정을 먼저 진행해야 합니다.

1.1 Spring Initializr 사용하기

스프링 프로젝트를 쉽게 시작하기 위해 Spring Initializr를 사용합니다.
1.
웹 브라우저로 이동: Spring Initializr를 방문합니다.
2.
설정:
Project: Gradle Project (또는 Maven 사용 가능)
Language: Java
Spring Boot: 최신 안정 버전 (예: 3.1.0)
Project Metadata:
Group: com.example
Artifact: spring-ai
Name: spring-ai
Package Name: com.example.springai
Packaging: Jar
Java Version: 17 (최신 버전을 사용하면 좋습니다)
3.
Dependencies 추가:
Spring Web: 웹 애플리케이션을 만들기 위한 필수 구성 요소
Spring Boot DevTools: 개발 중에 편리한 기능들
Lombok: 코드 간소화를 위한 라이브러리
Spring Data JPA: 데이터베이스 연동 (향후 데이터 저장을 위해 필요할 수 있음)
4.
Generate 버튼 클릭 후 압축 파일을 다운로드하고 프로젝트 폴더를 압축 해제합니다.

1.2 IDE 설정

압축을 해제한 프로젝트 폴더를 IntelliJ IDEA, Eclipse 또는 VS Code와 같은 IDE에서 엽니다.
1.
IntelliJ IDEA 사용 시:
File -> Open을 클릭하고 프로젝트 폴더를 엽니다.
Gradle 또는 Maven 동기화를 자동으로 진행할 것입니다.

1.3 기본 프로젝트 구조

Spring Initializr로 생성한 프로젝트는 기본적으로 아래와 같은 구조를 가집니다:
spring-ai/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/example/springai/ │ │ │ └── SpringAiApplication.java │ ├── test/ │ │ └── java/ │ │ └── com/example/springai/ ├── build.gradle └── settings.gradle
Shell
복사
SpringAiApplication.java는 프로젝트의 메인 클래스로, 스프링 부트 애플리케이션이 실행될 때 가장 먼저 호출됩니다.

2. AI 서비스 구현 준비

2.1 AI 관련 라이브러리 추가

AI 기능을 구현하려면, 외부 API 또는 AI 라이브러리를 사용할 수 있습니다. 여기서는 OpenAI API를 사용하는 방법을 예로 들어 설명하겠습니다. Java에서 OpenAI API를 사용하여 텍스트 생성이나 자연어 처리를 할 수 있습니다.
1.
Gradle 설정 파일에 라이브러리 추가: build.gradle 파일을 열어 OpenAI와 관련된 HTTP 통신 라이브러리를 추가합니다.
dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-devtools' implementation 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' // HTTP 요청을 위해 추가 implementation 'org.springframework.boot:spring-boot-starter-webflux' // JSON 처리 라이브러리 implementation 'com.fasterxml.jackson.core:jackson-databind' // OpenAI 클라이언트 라이브러리 implementation 'com.theokanning.openai-gpt3-java:client:0.10.0' // 최신 버전 확인 필요 }
Groovy
복사
1.
Gradle 빌드: IDE에서 Gradle을 다시 빌드하여 새로 추가한 라이브러리들을 다운로드합니다.

2.2 OpenAI API 키 설정

OpenAI API를 사용하려면 API 키가 필요합니다. OpenAI 웹사이트에서 API 키를 발급받을 수 있습니다.
1.
API 키를 안전하게 관리: 스프링 부트에서 API 키와 같은 중요한 정보는 application.properties 파일에 저장하거나 환경 변수를 통해 관리합니다.
src/main/resources/application.properties 파일을 열고, 아래와 같이 OpenAI API 키를 저장합니다:
openai.api.key=your-openai-api-key-here
Plain Text
복사

2.3 AI 서비스 클래스 작성

이제 AI와 상호작용할 서비스를 작성해 보겠습니다. src/main/java/com/example/springai/service 디렉토리에 OpenAIService.java 파일을 생성합니다.
package com.example.springai.service; import com.theokanning.openai.OpenAiService; import com.theokanning.openai.completion.CompletionRequest; import com.theokanning.openai.completion.CompletionResult; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service public class OpenAIService { private final OpenAiService openAiService; public OpenAIService(@Value("${openai.api.key}") String apiKey) { this.openAiService = new OpenAiService(apiKey); } public String generateText(String prompt) { CompletionRequest completionRequest = CompletionRequest.builder() .prompt(prompt) .maxTokens(100) .build(); CompletionResult result = openAiService.createCompletion(completionRequest); return result.getChoices().get(0).getText(); } }
Java
복사
OpenAiService: OpenAI의 클라이언트 라이브러리를 사용하여 텍스트 생성을 요청합니다.
generateText: OpenAI API로 텍스트를 생성하는 메서드로, 주어진 prompt에 대한 응답을 반환합니다.

2.4 컨트롤러 작성

이제 웹 API를 통해 AI 서비스를 호출할 수 있도록 컨트롤러를 작성합니다. src/main/java/com/example/springai/controller 디렉토리에 AIController.java 파일을 생성합니다.
package com.example.springai.controller; import com.example.springai.service.OpenAIService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class AIController { private final OpenAIService openAIService; public AIController(OpenAIService openAIService) { this.openAIService = openAIService; } @GetMapping("/generate") public String generateText(@RequestParam String prompt) { return openAIService.generateText(prompt); } }
Java
복사
/generate 엔드포인트를 호출하면 prompt 값을 기반으로 AI가 생성한 텍스트를 반환합니다.

3. 프로젝트 실행 및 테스트

3.1 실행

1.
SpringAiApplication.java 파일을 열고 main 메서드를 실행합니다. 이 메서드는 스프링 부트 애플리케이션을 시작합니다.
2.
애플리케이션이 실행되면 브라우저에서 http://localhost:8080/generate?prompt=Hello%20AI를 호출하여 OpenAI API로 텍스트 생성을 테스트할 수 있습니다.

3.2 테스트 결과

정상적으로 작동하면 AI가 제공한 텍스트 응답이 웹 페이지에 출력됩니다.

4. 추가 사항

에러 핸들링: API 호출 시 발생할 수 있는 오류를 처리하는 로직을 추가하여 안정성을 높일 수 있습니다.
비동기 처리: AI API 호출이 오래 걸릴 경우, 비동기 처리를 통해 성능을 개선할 수 있습니다.