1. 시작하기 전에
이 Codelab에서는 Gemini Code Assist를 준비하여 비공개 저장소에 맞는 코드 맞춤설정 추천을 제공하는 방법을 보여줍니다. 따라서 Code Assist의 결과를 훨씬 더 유용하게 사용할 수 있습니다. 특히 유사한 작업에 대해 자주 반복되는 특정 규칙을 가지고 있는 팀의 경우 더욱 유용합니다. 이 기능을 위해 Gemini가 비공개 코드베이스의 색인을 생성하도록 허용해도 Gemini가 비공개 코드에서 광범위하게 학습하지는 않으니 안심하세요.
또한 .aiexclude
파일을 사용하여 민감하거나 관련 없는 파일을 코드 맞춤설정 대상에서 제외하는 방법도 설명합니다.
기본 요건
- Gemini Code Assist에 대한 기본적인 이해 및 Gemini Code Assist가 사용 설정된 프로젝트에 대한 액세스 권한
- 코드 맞춤설정을 위한 지원되는 코딩 언어에 대한 지식
- 코드 맞춤설정에는 해당 위치의 Developer Connect 연결이 필요하므로
us-central1
또는europe-west1
에서 리소스를 만들 수 있는 기능 - 최신 버전의 인증된 Google Cloud CLI
학습 내용
- Gemini Code Assist Enterprise에서 코드 맞춤설정을 사용하는 방법
- 코드 맞춤설정을 통해 팀의 시간을 절약할 수 있는 여러 사용 사례 중 하나
필요한 항목
- Gemini Code Assist가 사용 설정된 Google Cloud 프로젝트
- 맞춤설정 요청의 색인을 생성하는 비공개 저장소
- 맞춤설정 요청의 코드 색인을 생성할 시간입니다. 최대 24시간이 소요될 수 있습니다.
- Gemini Code Assist가 설치된 IDE
2. 컨텍스트
코드 맞춤설정을 사용해 보려면 다음 두 가지가 필요합니다.
- Gemini가 사용 설정된 Google Cloud 프로젝트 액세스
- Gemini의 대답을 알리는 비공개 저장소
Gemini가 색인을 생성할 수 있는 가장 적합한 저장소 후보에는 조직 전반에서 자주 재사용되는 코드가 포함되어 있습니다. 이 Codelab용으로 제공되는 샘플 저장소에는 이 기준을 충족하는 데이터 전송 객체 폴더가 있는 표준 Spring Boot 웹 서비스가 포함되어 있습니다. 비슷한 클래스가 프레젠테이션 레이어로 전송되는 데이터베이스의 각 항목을 설명하기 위해 생성되었기 때문입니다.
3. (선택사항) 저장소 설정
자체 비공개 저장소 대신 예시 저장소를 사용하려면 원하는 터미널 편집기 또는 Cloud Shell에서 다음 단계를 따르세요. 코드 맞춤설정이 실제로 작동하는 것을 확인할 수 있도록 먼저 비공개 저장소를 만듭니다.
mkdir customization-starter
cd customization-starter
curl https://start.spring.io/starter.zip -d dependencies=web,lombok \
-d javaVersion=21 \
-d type=maven-project \
-d bootVersion=3.3.4 -o cc-starter.zip
unzip cc-starter.zip
rm cc-starter.zip
pushd src/main/java/com/example/demo
mkdir dtos
touch dtos/LedgerDTO.java
LedgerDTO 파일에 다음을 추가합니다.
package com.example.demo.dtos;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
@Getter
@Setter
@Accessors(chain = true)
public class LedgerEntryDto {
private Long id;
private String accountName;
private double amount;
private String transactionType;
private String description;
private java.util.Date transactionDate;
}
이렇게 하면 이 코드베이스의 다른 참여자가 사용할 것으로 예상되는 접근자가 코드 맞춤설정이 사용 설정된 경우 정확하게 생성된다는 것을 충분히 입증할 수 있습니다.
새 저장소를 만듭니다. 이때 비공개 상태로 둡니다. 시작 조건을 새 저장소에 푸시하려면 다음 단계를 따르세요.
popd
gh auth login
git init
git add .
git commit -m "code customization starter"
git remote add origin git@github.com:<YOUR_GITHUB_ID>/customization-starter.git
git branch -M main
git push -u origin main
4. 파일 제외
비공개 저장소에 대한 액세스 권한을 Gemini에 부여하기 전에 팀에서 색인을 생성하고 싶지 않은 관련성 없는 파일 또는 민감한 파일을 제외하는 방법을 이해하는 것이 중요합니다. 이를 위해 .aiexclude
파일이 사용되며, .gitignore
와 유사하지만 몇 가지 중요한 차이점이 있습니다.
- 빈
.aiexclude
파일은 디렉터리와 모든 하위 디렉터리의 모든 파일을 차단합니다.- 이는
**/*
가 포함된 파일과 동일합니다.
- 이는
.aiexclude
파일은 부정 (패턴 앞에!
붙이기)을 지원하지 않습니다.
이 점을 염두에 두고 팀에서 고려 대상에서 제외할 파일 형식이나 디렉터리를 고려하고 별도의 행에 나열해 보세요.
#Block all files with .key extensions
*.key
#Block all files under sensitive/dir
my/sensitive/dir/
#Block all .key files under sensitive/dir
my/sensitive/dir/ /.key
5. Developer Connect 구성
Developer Connect는 GitHub 또는 GitLab의 비공개 코드 저장소에 대한 연결 및 링크를 지원하는 서비스입니다. 이는 Gemini Code Assist가 비공개 저장소에 안전하게 연결하여 대답을 개선하는 데 사용되는 색인을 만드는 메커니즘입니다.
다음 두 개념은 Developer Connect가 코드에 대한 액세스를 안전하게 제공하는 방법을 이해하는 데 도움이 됩니다.
연결
- Google과 서드 파티 소스 코드 관리 플랫폼 간의 브리지를 나타냅니다.
링크
- 연결된 소스 코드 관리 플랫폼 내에서 선택한 개별 소스 코드 저장소와의 연결을 나타냅니다.
이러한 개념을 염두에 두고 먼저 Developer Connect 페이지로 이동하여 프로젝트의 API를 사용 설정하세요.
그런 다음 적절한 단계에 따라 GitHub 또는 GitLab의 연결 및 링크를 만듭니다. 두 리소스 모두 마법사 프로세스 중에 생성됩니다.
이 단계를 반복하여 Gemini의 코드 맞춤설정 기능이 대답에서 고려되도록 할 각 저장소의 링크를 만듭니다. 여러 저장소가 동일한 플랫폼에서 가져온 경우 기존 연결을 재사용할 수 있습니다.
6. 색인 만들기 및 연결
저장소를 빠르게 파싱하고 분석하기 위해 코드 맞춤설정은 색인을 사용합니다. 다음 단계에서 필요하므로 사용하는 INDEX_NAME을 기록해 둡니다.
색인을 만들려면 다음 명령어를 실행합니다.
gcloud gemini code-repository-indexes create <INDEX_NAME> \
--project=<YOUR_PROJECT_ID> \
--location=<REGION>
Invalid choice: ...
오류가 발생하면 다음 명령어를 실행하여 Google Cloud CLI가 최신 상태인지 확인합니다.
gcloud components update
그런 다음 저장소 그룹을 만들어 색인에 대한 액세스를 허용합니다.
gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
--project=PROJECT_ID \
--location=REGION \
--code-repository-index=INDEX_NAME \
--repositories='[{"resource": "projects/PROJECT_ID/locations/REGION/connections/INDEX_CONNECTION/gitRepositoryLinks/REPOSITORY", "branch_pattern": "BRANCH_NAMES"}]'
다음 값을 바꿉니다.
- REPOSITORY_GROUP: 만들려는 저장소 그룹의 이름입니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다.
- INDEX_NAME: 색인을 만들기 위해 이전 단계에서 정의한 색인의 이름입니다.
- REGION: 문서의 목록에서 지원되는 리전으로, Google Cloud 프로젝트의 Developer Connect에서 구성했습니다.
- INDEX_CONNECTION: 색인을 만들기 위해 이전 단계에서 만든 색인의 연결입니다.
- REPOSITORY: 색인을 생성할 저장소입니다. 저장소를 하나 이상 지정해야 하며 필요에 따라 여러 저장소를 지정할 수 있습니다.
- BRANCH_NAMES: 색인을 생성할 브랜치의 이름입니다(예: main 또는 dev).
색인을 생성할 저장소의 수와 크기에 따라 콘텐츠 색인 생성에 최대 24시간이 걸릴 수 있습니다. 색인 생성은 24시간마다 수행되며 저장소에서 변경된 모든 변경사항을 가져옵니다. 이 단계에 따라 색인 생성 상태를 확인할 수 있습니다.
마지막으로 원하는 주 구성원에게 그룹에 대한 액세스 권한을 부여합니다.
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='PRINCIPAL' \
--role='roles/cloudaicompanion.repositoryGroupsUser'
7. 맞춤설정된 코드 생성
이제 Gemini가 비공개 저장소의 코드에 액세스할 수 있으므로 코드 완성 요청에 관련 스니펫이 표시될 수 있습니다. 예시 리포지토리에서 DTO 폴더로 이동하여 새 객체를 나타내는 새 클래스를 만들면 입력 시 예상되는 주석이 나타나는 것을 확인할 수 있습니다.
8. 결론
이 Codelab을 완료했습니다. Gemini Code Assist의 코드 맞춤설정 기능을 사용하는 방법을 알아봤습니다. 이제 팀의 비공개 코드베이스에 맞게 응답을 조정할 수 있으므로 각 프롬프트와 코드 완성이 팀의 개발자에게 더 큰 가치를 제공할 수 있습니다.
IAM 역할 설정과 같은 작업에 대한 자세한 내용을 알아보려면 다음 문서와 자료를 참고하세요.