1. 소개
책을 자세히 살펴보는 것을 좋아하지만 너무 많은 선택지에 압도 당하시나요? 완벽한 읽을거리를 추천할 뿐만 아니라 선택한 장르에 따라 간결한 요약을 제공하여 책의 본질을 엿볼 수 있는 AI 기반 앱이 있다고 상상해 보세요. 이 Codelab에서는 Gemini가 지원하는 BigQuery, Vertex AI, Cloud Run을 사용하여 이러한 애플리케이션을 빌드하는 방법을 알아봅니다.
프로젝트 개요
Google의 사용 사례는 다음 4가지 주요 구성요소를 중심으로 이루어집니다.
- 도서 데이터베이스: 방대한 인터넷 자료실 도서의 BigQuery 공개 데이터 세트는 Google의 포괄적인 도서 카탈로그 역할을 합니다.
- AI 요약 엔진: Gemini-Pro 언어 모델을 갖춘 Google Cloud Functions는 사용자 요청에 맞는 유용한 요약 정보를 생성합니다.
- BigQuery 통합: Cloud 함수를 호출하여 주문형 도서 요약 및 테마를 전달하는 BigQuery 내의 원격 함수입니다.
- 사용자 인터페이스: 사용자가 결과를 볼 수 있는 웹 애플리케이션을 제공하는 Cloud Run에서 호스팅되는 웹 앱입니다.
전체 프로젝트 구현을 Codelab 3개로 나누었으며 이 Codelab에서는 아래 목록의 Codelab 3을 다룹니다.
Codelab 1: Gemini를 사용하여 Gemini 애플리케이션용 Java Cloud 함수를 빌드합니다.
Codelab 2: Gemini를 사용하여 BigQuery로 SQL 전용 생성형 AI 애플리케이션을 빌드합니다.
Codelab 3: Gemini를 사용하여 BigQuery와 상호작용하는 Java Spring Boot 웹 애플리케이션을 만듭니다.
2. Gemini를 사용하여 BigQuery로 Spring Boot 웹 애플리케이션 빌드
빌드할 항목
- 필요한 BigQuery 데이터 세트 및 테이블을 만듭니다.
- BigQuery와 상호작용하여 도서 데이터를 가져오고 웹에 표시하는 Java Spring Boot 웹 애플리케이션입니다.
- 이 앱은 Cloud Run에 배포됩니다.
- 이 단계는 Gemini를 사용하여 구현합니다.
3. 요구사항
- 브라우저(Chrome 또는 Firefox 등)
- 결제가 사용 설정된 Google Cloud 프로젝트
- Cloud 함수를 1부 Codelab Gemini를 사용하여 생성형 AI 애플리케이션용 Java Cloud 함수 빌드 Codelab의 일부로 배포한 경우에 유용합니다.
- 조건부: 현재 무료 Google Cloud 크레딧 링크(워크숍 주최자가 해당 링크를 제공했을 수 있음)에 액세스할 수 있는 경우 아래 페이지의 안내에 따라 크레딧 활성화 및 프로젝트 생성 단계를 미리 완료하세요. 이 링크가 없으면 아래의 프로젝트 및 결제 기본 요건 단계를 진행하세요.
프로젝트 만들기
이미 결제 계정을 활성화하고 위의 조건부 단계에서 언급된 링크를 사용하여 프로젝트를 만든 경우 아래 단계를 건너뛰어도 됩니다.
- Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
- Cloud 프로젝트에 결제가 사용 설정되어 있어야 하므로 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.
Cloud Shell 활성화
- bq가 미리 로드되어 제공되는 Google Cloud에서 실행되는 명령줄 환경인 Cloud Shell을 사용합니다.
Cloud 콘솔에서 오른쪽 상단에 있는 Cloud Shell 활성화를 클릭합니다.
- Cloud Shell에 연결되면 인증이 완료되었고 프로젝트가 해당 프로젝트 ID로 이미 설정된 것을 볼 수 있습니다. Cloud Shell에서 다음 명령어를 실행하여 인증되었는지 확인합니다.
gcloud auth list
- Cloud Shell에서 다음 명령어를 실행하여 gcloud 명령어가 프로젝트를 알고 있는지 확인합니다.
gcloud config list project
- 프로젝트가 설정되지 않은 경우 다음 명령어를 사용하여 설정합니다.
gcloud config set project <YOUR_PROJECT_ID>
gcloud 명령어 및 사용법은 문서를 참조하세요.
4. Gemini 및 필요한 API 사용 설정
Gemini 사용 설정
- Gemini Marketplace로 이동하여 API를 사용 설정합니다. 다음 명령어를 사용할 수도 있습니다.
gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID
- Gemini 페이지를 방문하여 '채팅 시작'을 클릭합니다.
기타 필요한 API 사용 설정
어떻게 하면 좋을까요? Gemini에 물어볼까요? 하지만 그 전에 다음 사항을 기억하세요.
참고: LLM은 비결정적입니다. 따라서 이러한 프롬프트를 입력하는 동안 수신하는 대답이 스크린샷과 다르게 보일 수 있습니다.
Google Cloud 콘솔의 검색창 옆에 있는 오른쪽 상단의 'Gemini 열기' 아이콘을 클릭하여 Gemini 채팅 콘솔로 이동합니다.
'여기에 프롬프트 입력' 섹션에 다음 질문을 입력합니다.
How do I enable the BigQuery and Cloud Run apis using gcloud command?
다음 이미지와 같이 대답을 받게 됩니다.
이를 복사하고(명령어 스니펫 상단의 복사 아이콘 사용) Cloud Shell 터미널에서 실행하여 각 서비스를 사용 설정합니다.
- bigquery.googleapis.com
- run.googleapis.com
5. 도서 데이터의 BigQuery 공개 데이터 세트 살펴보기
먼저 수많은 인터넷 자료실 도서에 관한 정보가 담긴 BigQuery 공개 데이터 세트에 익숙해지세요. 이 링크에서 internetarchivebooks 데이터 세트로 이동할 수 없는 경우 아래 단계에 따라 데이터 세트를 살펴보거나 이 문서를 따르세요.
BigQuery 탐색기 창에서 이 공개 데이터 세트를 찾을 수 있습니다. BigQuery 콘솔로 이동하면 왼쪽에 있습니다.
검색창에 'gdelt-bq' 또는 'internetarchivebooks'를 입력하고 'SEARCH ALL PROJECTS'(모든 프로젝트 검색)을 클릭합니다. 결과를 펼치고 아래 이미지와 같이 인터넷 자료실 도서에 별표 표시합니다.
데이터 세트를 확장하고 gdelt-bq.internetarchivebooks를 클릭한 후 1920년 표의 데이터를 미리 봅니다. 이 표에는 보관처리된 1920년도의 도서가 포함됩니다.
후속 섹션에서 사용할 스키마를 살펴보려면 다음 쿼리를 실행합니다.
select * from `gdelt-bq.internetarchivebooks.1920` limit 5;
Codelab에서는 다음 세 가지 필드를 사용합니다.
- BookMeta_Title(제목)
- Themes(';'로 구분된 테마)
- BookMeta_FullText(도서의 전체 텍스트)
6. Gemini로 기본 Java Cloud Run 템플릿 만들기
Cloud Shell 터미널 오른쪽 상단에 있는 편집기 열기 아이콘을 클릭하여 Cloud Shell 편집기를 엽니다. 보통 터미널과 편집기를 별도의 탭에서 동시에 열어 한 탭에서 코드를 작성하고 다른 탭에서 빌드하는 것을 선호합니다.
편집기를 연 후 편집기 콘솔의 오른쪽 하단에 있는 Gemini 로고가 활성화되어 있고 취소되지 않았는지 확인합니다. 또한 왼쪽 하단의 Google Cloud 프로젝트가 작업하려는 현재 활성 프로젝트를 가리키는지 확인합니다. 비활성 상태라면 클릭하여 승인하고 연결할 Google Cloud 프로젝트를 선택하여 활성화합니다.
둘 다 활성화되면 왼쪽 하단의 프로젝트 이름을 클릭하고 'Cloud Code'라는 팝업 목록이 열리면 아래로 스크롤하여 'New Application(새 애플리케이션)'으로 이동합니다.
목록에서 Cloud Run 애플리케이션을 선택합니다. 팝업 목록에서 Java를 선택합니다.
결과 목록에 helloworld 대신 프로젝트 이름 'bookshelf-web'을 입력하고 확인을 클릭합니다.
축하합니다. 여러분은 Gemini를 사용해 간단한 Java Cloud Run 애플리케이션을 부트스트랩했고, 구성을 사용 설정하고 활성화하는 것 외에는 별로 많은 작업을 하지 않았습니다.
여러분이 보게 될 프로젝트 구조는 다음과 같습니다.
이제 애플리케이션을 배포할 수 있습니다. 하지만 이것이 우리가 이 작업을 시작한 이유는 아닙니다. 웹 애플리케이션의 주요 기능, 즉 BigQuery 데이터베이스에서 분석 데이터를 가져와 웹에 표시하는 기능을 포함해야 합니다.
이를 위해 자유롭게 프롬프트를 추가하고 Gemini를 사용하여 코드를 점진적으로 개발하거나 로직을 직접 작성할 수 있습니다. 이 두 가지를 혼합해 보겠습니다.
7. 종속 항목을 추가하여 웹 앱에서 BigQuery 사용
이제 애플리케이션이 부트스트랩되었으므로 애플리케이션 소스 및 속성을 변경할 수 있습니다. 먼저 종속 항목을 추가해 보겠습니다. Gemini에 추천해 달라고 요청해 보세요.
Cloud Code 편집기의 오른쪽 하단에 상태 표시줄에 Gemini 활성이 표시되고 왼쪽 하단에 활성 Google Cloud 프로젝트가 선택되어 있는지 확인합니다.
Cloud Code 편집기에서 pom.xml 파일로 이동하여 </dependencies> 태그 바로 위에 다음과 같은 프롬프트 주석을 입력합니다.
<!-- What maven dependency should I include to access BigQuery in the app-->
아래 이미지와 같이 결과를 얻었습니다.
편의를 위해 여기에 종속 항목을 붙여넣습니다. 추천에 버전 태그가 표시되는 경우에는 이를 무시해도 됩니다.
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-bigquery</artifactId>
</dependency>
8. 소스를 업데이트하여 서가 데이터를 웹에 가져오기
HelloWorldController.java 코드를 다음 코드로 바꿉니다.
package cloudcode.helloworld.web;
import java.util.UUID;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.JobId;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;
import com.google.cloud.bigquery.FieldValueList;
@RestController
public final class HelloWorldController {
/**
* Create an endpoint for the landing page
* @return the BigQuery analytics results string to the web
*/
@GetMapping("/")
public String helloWorld() throws Exception {
/* Connect to bigquery and write a select SQL to fetch Title, Theme and Summary fields from the table `bookshelf.bookshelf_theme` if you have executed the codelab 1 of this series, if not just directly use records from gdelt-bq.internetarchivebooks.1920 table */
String query = "SELECT BookMeta_Title || ' (' || Themes || ') ' as summary from gdelt-bq.internetarchivebooks.1920 limit 10 ";
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
QueryJobConfiguration queryConfig =
QueryJobConfiguration.newBuilder(query)
.setUseLegacySql(false)
.build();
// Create a job ID so that we can safely retry.
JobId jobId = JobId.of(UUID.randomUUID().toString());
Job queryJob = bigquery.create(JobInfo.newBuilder(queryConfig).setJobId(jobId).build());
// Wait for the query to complete.
queryJob = queryJob.waitFor();
// Check for errors
if (queryJob == null) {
throw new RuntimeException("Job no longer exists");
} else if (queryJob.getStatus().getError() != null) {
throw new RuntimeException(queryJob.getStatus().getError().toString());
}
// Get the results.
TableResult result = queryJob.getQueryResults();
String responseString = "";
// Print all pages of the results.
for (FieldValueList row : result.iterateAll()) {
responseString += row.get("summary").getStringValue() + ". \n";
System.out.printf("%s\n", row.get("summary").getStringValue());
}
return responseString;
}
}
소스 파일이 다음과 같이 변경되었습니다.
- HelloWorldController.java에서 @Controller를 @RestController로 업데이트했습니다.
- BigQuery 호출과 책의 제목 및 주제를 나열하기 위해 데이터를 가져오는 쿼리 실행을 포함하도록 helloWorld() 메서드의 콘텐츠를 대체했습니다.
- 로드 시 색인 보기 템플릿을 반환하는 대신 대답을 웹에 문자열로 반환하도록 업데이트되었습니다.
중요 사항: 아래 내용을 업데이트해야 합니다.
- HelloWorldControllerTests.Java 파일을 업데이트하여 현재 mvc.perform(…) 호출을 주석 처리합니다.
코드 설명을 위한 Gemini
코드를 제공하고 소스 파일에 적용된 변경사항을 설명했습니다. 필요에 따라 Gemini를 사용하여 코드 설명 또는 코드 주석을 얻을 수도 있습니다. 다음과 같은 몇 가지 방법을 시도해 볼 수 있습니다.
- IDE에서 HelloWorldController.java 파일을 열고 IDE의 Chat 패널로 이동하여 다음 프롬프트를 입력합니다. Explain this. Gemini에서 제공하는 자세한 설명을 확인하세요. 이 방법으로 언제든지 코드에 관한 설명을 얻을 수 있습니다.
- 코드의 특정 스니펫 또는 줄을 강조 표시하고(예: @GetMapping("/")) 다음 프롬프트를 사용합니다. Explain this. 선택한 코드 줄 또는 스니펫에 대해서만 자세한 설명이 제공됩니다.
- 다른 방식으로 코드에 대해 문의하는 일부 쿼리를 시도해 볼 수도 있습니다. 예를 들어 다음 코드 줄을 선택합니다.
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
그런 다음 "What will happen if the bigquery variable is null?"("bigquery 변수가 null이면 어떻게 되나요?")라는 질문을 합니다. 4. Gemini의 도움을 받아 코드 개선 또는 리팩터링을 요청할 수도 있습니다. 예를 들어 helloWorld() 메서드의 전체 코드를 선택하고 다음 프롬프트를 입력하면 됩니다. "How do I improve or refactor this code?"("이 코드를 개선하거나 리팩터링하려면 어떻게 하나요?") 그런 다음 Gemini에서 제공하는 제안을 확인합니다.
9. 빌드 및 배포
Cloud Shell 터미널로 이동합니다. 터미널에서 프로젝트 ID를 가리키는지 확인합니다.
cd 명령어를 사용하여 프로젝트 디렉터리로 이동합니다.
cd bookshelf-web
아래 명령어를 하나씩 실행하여 앱이 로컬에서 실행되는지 확인합니다.
mvn package
mvn spring-boot:run
이제 'Web Preview'(웹 미리보기) 버튼을 클릭하고 아래와 같이 'Preview on port 8080'(포트 8080에서 미리보기) 옵션을 클릭합니다.
Cloud Shell 머신에서 로컬로 실행되는 앱이 표시되는지 확인합니다.
이제 Gemini에 Cloud Run에서 이 웹 애플리케이션을 배포하는 방법을 물어보겠습니다. Google Cloud 콘솔에서 'Open Gemini'(Gemini 열기) 버튼을 클릭하여 Gemini Chat으로 이동합니다.
프롬프트는 다음과 같습니다.
What is the gcloud command to deploy my app to cloud run without having to containerize, only by giving the source file?
대답은 다음과 같습니다.
아래 스니펫에 표시된 대로 gcloud 명령어의 서비스 이름 및 리전 자리표시자를 바꿔 보겠습니다.
gcloud run deploy bookshelf-web --source . --allow-unauthenticated --region $REGION
Cloud Shell 터미널에서 이 명령어를 실행합니다. 몇 가지 후속 질문이 표시되고 적절한 대답을 선택하면 배포가 진행 중인 것을 확인할 수 있습니다.
몇 분 정도 걸리며 앱이 서버리스 방식으로 Google Cloud에 배포됩니다. Cloud Run에서 배포된 앱을 클릭하여 웹에서 결과를 확인할 수 있습니다.
10. 축하합니다
축하합니다. Gemini를 사용하여 서가 분석을 수행하기 위해 Java Cloud Run 웹 애플리케이션을 빌드, 배포, 테스트했습니다. 후속 작업으로 Gemini에 Google Cloud 콘솔에서 배포된 Cloud Run 서비스를 삭제하는 방법을 물어보고 대답 단계에 따라 리소스를 삭제합니다.