Spring AI + Gemini 사용해보기

이신영·2025년 6월 26일
0

Spring

목록 보기
18/19
post-thumbnail

최근에 Spring Ai를 알았는데 이게 참 신세계다..

예전엔 ai연동하려면 RestTemplate써서 모델올려둔 서버에 api쏘고 그랬던거같은데 😅

근데 은근 이게 막히는게 많아서 글로 남겨보려고한다.

Google Cloud의 Vertex AI Gemini 모델을 연동하여 환경 구성부터 API 호출까지의 전체 과정을 알아보도록하자!
사용 환경은 IntelliJ 기준이다.


1. Google Cloud 무료 체험 등록하기

먼저 Google Cloud Console 에서 결제 정보를 등록하면 90일 동안 무료로 사용할 수 있다.

  • 주의: 무료 체험은 최초 생성한 프로젝트에만 적용된다. 이후 생성한 프로젝트는 별도 요금이 부과되거나, 무료 혜택이 적용되지 않을 수 있다.

결제 정보 입력 예시

정상적으로 했으면 이렇게 나온다


2. IAM 및 서비스 계정 만들기

Vertex AI 사용을 위해 서비스 계정을 생성하고 적절한 권한을 부여해야 한다.

  1. IAM 및 관리자 > 서비스 계정 > 계정 만들기
  2. 이름과 설명은 자유롭게 입력
  3. 역할은 Vertex AI 사용자로 설정
  4. 나머지 항목은 생략하고 생성 완료

서비스 계정 생성

🔑 서비스 계정 키 발급하기

  • 서비스 계정 > 키 관리 > 키 추가 > 새 키 만들기(JSON) 을 선택
  • 생성된 키 파일은 프로젝트의 resources 폴더에 저장하고 .gitignore에 반드시 등록해두기

3. Vertex AI API 사용 설정하기

API 및 서비스 > 라이브러리 메뉴에서 Vertex AI API를 검색한 후, 사용 버튼을 클릭하여 활성화한다.


4. Gradle 설정하기

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.5.3'
	id 'io.spring.dependency-management' version '1.1.7'
}

java {
	toolchain {
		languageVersion = JavaLanguageVersion.of(17)
	}
}

dependencyManagement {
	imports {
		mavenBom "org.springframework.ai:spring-ai-bom:1.0.0"
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.springframework.ai:spring-ai-starter-model-vertex-ai-gemini'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

5. application.yml 설정하기

spring:
  ai:
    vertex:
      ai:
        credentials-uri: classpath:genai-key.json
        gemini:
          project-id: YOUR_PROJECT_ID
          location: us-central1
      gemini:
        chat:
          options:
            model: gemini-2.0-flash

properties라면

spring.ai.vertex.ai.credentials-uri=classpath:genai-key.json
spring.ai.vertex.ai.gemini.project-id=YOUR_PROJECT_ID
spring.ai.vertex.ai.gemini.location=us-central1
spring.ai.vertex.gemini.chat.options.model=gemini-2.0-flash

모델은 저런식으로 명칭을 쓰면되는데 지금은 2.5-pro 까지 나온상태인듯하다. 적당한거 쓰자.


6. 컨트롤러 구현하기

Spring AI의 ChatClient를 활용하여, 일기를 자연스럽게 다듬어주는 API를 만들어보았다.


import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/ai")
public class TestAiController {

    private final ChatClient chatClient;

    public TestAiController(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }

    @PostMapping("/refine-diary")
    public String refineDiary(@RequestBody DiaryRefineRequest req) {
        String prompt = """
            아래는 사용자가 작성한 일기야.
            문맥을 바꾸지 않으면서 어색한 표현을 자연스럽게 다듬어 주고
            존댓말을 유지하고, 문장은 최대한 매끄럽게 수정해줘.

            [사용자 일기 원문]
            %s
            """.formatted(req.diary());

        return chatClient
                .prompt()
                .user(prompt)
                .call()
                .content();
    }

    public record DiaryRefineRequest(String diary) {}
}

7. 환경변수 등록하기

IntelliJ 기준으로 Run ▸ Edit Configurations > Environment Variables에서 아래 값을 추가한다.

GOOGLE_APPLICATION_CREDENTIALS=\절대\경로\genai-key.json

해당 값을 정상적으로 등록하지 못했으면 Your default credentials were not found 오류가 발생한다.


8. Postman으로 API 테스트하기

API가 정상적으로 작동하는지 Postman을 통해 테스트해볼 수 있다.

  • 엔드포인트: POST /api/ai/refine-diary
  • JSON Body 예시:
{
  "diary": "오늘은 기분이 나빳다. 친구랑 싸워서 속상하다 근데 내가 참아야 되는건가? 매번 친구는 사과를 받는편이고 나는 사과를 하는편이다. 오늘은 왠지 평소처럼 무던하게 넘겨보낼 수 없는 하루였다. 무더운 더위때문이였을까ㅡ오늘은 장마 후 날씨라 불쾌지수가 조금 상승한 탓일까 기후에 기대서 평소와 다른 내 태도를 분석해본다."
}

뭐 이런식으로?


✅ 마무리 정리

  • 발급받은 서비스 계정 키는 .gitignore에 반드시 등록해야 한다. 안그러면... 책임못진다
  • 사용 가능한 모델명(gemini-2.0-flash)은 향후 변경될 수 있으므로 공식 문서를 참고해보자

이젠 스프링도 AI시대인가~?

profile
후회하지 않는 사람이 되자 🔥

0개의 댓글