Gemini Code Assist 코드 맞춤설정 구성 및 사용

이 문서에서는 Gemini Code Assist를 비공개 코드 저장소에 연결하여 Gemini Code Assist 코드 맞춤설정을 설정하는 방법을 설명합니다. 이 기능을 사용하면 조직의 내부 라이브러리, 비공개 API, 코딩 스타일을 기반으로 하는 코드 추천을 받을 수 있습니다.

시작하기 전에

연결할 비공개 저장소 선택

권장사항에 따라 다음과 같은 저장소를 연결해야 합니다.

  • 개발자가 작성하려는 코드와 스타일이나 구조가 유사한 코드가 있는 저장소
  • 현재 코드베이스에서 호출하려는 비공개 라이브러리나 API가 있는 저장소

(선택사항) 색인이 생성되지 않는 파일 선택

기본적으로 코드 맞춤설정은 지정된 저장소에 모든 지원되는 코드 파일의 색인을 생성합니다.

대부분의 경우 색인을 생성하지 않을 특정 파일이나 하위 트리가 있을 수 있습니다. 예를 들면 다음과 같습니다.

  • 조직 내에서 액세스가 제한된 매우 민감한 정보
  • 오래되거나 지원 중단된 코드
  • 자동 생성 또는 임시 코드

색인을 생성하지 않을 코드가 노출되지 않게 하려면 브랜치 패턴을 사용하여 색인에 대한 액세스를 제어하고 main과 같은 안정적인 브랜치를 사용하면 됩니다.

또는 .aiexclude 파일을 만들어 색인에서 파일을 제외할 수도 있습니다.

색인 만들기

코드 맞춤설정은 색인을 사용하여 저장소를 분석하고 파싱하여 더 빠르게 코드 생성 추천과 조회를 수행합니다.

gcloud

색인을 만들려면 셸 환경에서 gemini code-repository-indexes create 명령어를 사용합니다.

gcloud gemini code-repository-indexes create INDEX_NAME \
    --project=PROJECT_ID \
    --location=REGION

Terraform

resource "google_gemini_code_repository_index" "example" {
  provider = google-beta
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
}

다음을 바꿉니다.

  • INDEX_NAME: 색인 이름입니다. 중요: 색인 이름을 기록합니다. 이 문서의 여러 단계에서 이 ID가 필요합니다.
  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • REGION: 이 페이지의 시작하기 전에 섹션에 설명된 지원되는 리전으로, Google Cloud 프로젝트의 Developer Connect에서 구성되었습니다.

색인 생성이 완료되는 데 일반적으로 30분 정도 걸리지만 최대 1시간까지 걸릴 수 있습니다.

Google은 코드 저장소 수를 프로젝트 및 조직별로 1개로 제한합니다.

저장소 그룹을 사용하여 색인에 대한 액세스 제어

저장소 그룹은 저장소 및 브랜치 패턴을 포함하는 색인 생성 구성의 컨테이너입니다. 저장소 그룹은 세분화된 IAM 제어를 위해 설계되어 개발자가 cloudaicompanion.repositoryGroups.use 권한이 있는 그룹의 색인 생성된 데이터에 액세스할 수 있습니다.

저장소 그룹에는 동일한 프로젝트 및 위치의 Developer Connect 저장소 또는 링크가 포함됩니다.

관리자는 다음 작업을 실행합니다.

  • 코드 저장소 색인 리소스를 만듭니다.
  • 동일한 프로젝트 및 위치에서 새 Developer Connect 연결을 구성합니다.
  • 연결에서 Git 저장소를 연결합니다.
  • 링크의 리소스 이름을 가져오고 각 링크의 색인을 생성할 브랜치 패턴을 선택하여 하나 이상의 저장소 그룹에 배치합니다.

gcloud

저장소 그룹을 만들려면 셸 환경에서 gemini code-repository-indexes repository-groups create 명령어를 사용합니다.

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories='[{"resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "BRANCH_NAMES"}]'

Terraform

resource "google_gemini_repository_group" "example" {
  provider = google-beta
  location = "REGION"
  code_repository_index = "INDEX_NAME"
  repository_group_id = "REPOSITORY_GROUP"
  repositories {
    resource = "REPOSITORY_RESOURCE_NAME"
    branch_pattern = "BRANCH_NAMES"
  }
}

다음을 바꿉니다.

  • REPOSITORY_GROUP: 저장소 그룹 이름입니다(예: default).
  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • REGION: 이 페이지의 시작하기 전에 섹션에 설명된 지원되는 리전으로, Google Cloud 프로젝트의 Developer Connect에서 구성되었습니다.
  • INDEX_NAME: 색인을 만들기 위해 이전 단계에서 만든 색인의 이름입니다.
  • REPOSITORY_RESOURCE_NAME: Developer Connect 연결 내부에 있는 저장소의 이름입니다. 저장소 이름을 찾으려면 Google Cloud 콘솔의 Developer Connect 페이지로 이동하여 저장소 탭에 있는 표의 연결 열 아래에서 연결 ID를 찾습니다. 리소스 이름을 복사하려면 more_vert 메뉴를 클릭하여 더 많은 옵션을 표시하고 리소스 경로 복사를 선택합니다.
  • BRANCH_NAMES: 색인을 생성하려는 브랜치의 이름입니다(예: main|dev).

JSON(또는 YAML) 파일에 정의된 저장소가 포함된 저장소 그룹을 다음 형식으로 만들 수도 있습니다.

JSON

[
  {
      "resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "main|dev"
  },
  {
      "resource": "REPOSITORY_RESOURCE_NAME", "branchPattern": "dev"
  }
]

YAML

- resource: REPOSITORY_RESOURCE_NAME
  branchPattern: main|dev

- resource: REPOSITORY_RESOURCE_NAME
  branchPattern: dev

JSON 또는 YAML 파일을 기반으로 저장소 그룹을 만들려면 셸 환경에서 gemini code-repository-indexes repository-groups create 명령어를 사용합니다.

JSON

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories=FILEPATH.json

YAML

gcloud gemini code-repository-indexes repository-groups create REPOSITORY_GROUP \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME \
    --repositories=FILEPATH.yaml

저장소 그룹에 프로젝트에 대한 IAM 역할 부여

색인의 저장소에서만 추천을 받습니다. 각 저장소는 저장소 그룹 하나 이상에 속합니다. 추천에 액세스하려면 다음 방법 중 하나를 사용하여 필요한 cloudaicompanion.repositoryGroups.user IAM 권한이 포함된 Cloud AI 컴패니언 저장소 그룹 사용자 IAM 역할(roles/cloudaicompanion.repositoryGroupsUser)을 저장소 그룹에 부여해야 합니다.

  • 주 구성원에게 전체 색인에 액세스할 수 있는 권한을 부여합니다.
  • 주 구성원에게 색인 하위 집합에 액세스할 수 있는 권한을 부여합니다.

주 구성원에게 전체 색인에 액세스할 수 있는 권한 부여

  1. 프로젝트의 IAM 정책을 바인딩하려면 셸 환경에서 projects add-iam-policy-binding 명령어를 사용합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member='PRINCIPAL' \
        --role='roles/cloudaicompanion.repositoryGroupsUser'
    

    다음을 바꿉니다.

    • PROJECT_ID: 저장소 그룹이 있는 프로젝트 ID입니다.
    • PRINCIPAL: 액세스 권한이 필요한 주 구성원의 이메일 주소입니다(예: 개인의 경우 user:test-user@gmail.com, 그룹의 경우 group:admins@example.com).

    자세한 내용은 gcloud projects set-iam-policy를 참조하세요.

  2. 조건을 지정하라는 메시지가 표시되면 None을 입력합니다.

주 구성원에게 색인 하위 집합에 액세스할 수 있는 권한 부여

저장소 그룹을 여러 개 만들고 서로 다른 IAM 주 구성원에게 IAM 역할을 할당할 수 있습니다.

gcloud

IAM 정책을 설정하려면 IAM 그룹 및 할당된 역할 목록이 포함된 IAM 정책 JSON 또는 YAML 파일을 준비해야 합니다. 예를 들면 다음과 같습니다.

bindings:
- members:
  - group:my-group@example.com
  - user:test-user@example.com
  role: roles/cloudaicompanion.repositoryGroupsUser

자세한 내용과 구문은 허용 정책 이해를 참조하세요.

IAM 정책을 설정하려면 셸 환경에서 gemini code-repository-indexes repository-groups set-iam-policy 명령어를 사용합니다.

gcloud gemini code-repository-indexes repository-groups set-iam-policy GROUP_NAMEPOLICY_FILE \
    --project=PROJECT_ID \
    --location=REGION \
    --code-repository-index=INDEX_NAME

다음을 바꿉니다.

Terraform

data "google_iam_policy" "foo" {
  provider = google-beta
  binding {
    role = "roles/cloudaicompanion.repositoryGroupsUser"
    members = ["test-user@example.com"]
  }
}

resource "google_gemini_repository_group_iam_policy" "foo" {
  provider = google-beta
  project = "PROJECT_ID"
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
  repository_group_id = "GROUP_NAME"
  policy_data = data.google_iam_policy.foo.policy_data
}

data "google_gemini_repository_group_iam_policy" "foo" {
  provider = google-beta
  project = "PROJECT_ID"
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
  repository_group_id = "GROUP_NAME"
  depends_on = [
    google_gemini_repository_group_iam_policy.foo
  ]
}

바인딩을 만들 수도 있습니다.

resource "google_gemini_repository_group_iam_binding" "foo" {
  provider = google-beta
  project = "PROJECT_ID"
  location = "REGION"
  code_repository_index_id = "INDEX_NAME"
  repository_group_id = "GROUP_NAME"
  role = "roles/cloudaicompanion.repositoryGroupsUser"
  members = ["test-user@example.com"]
}

다음을 바꿉니다.

색인 생성 상태 확인

색인을 생성할 저장소의 수와 크기에 따라 콘텐츠 색인을 생성하는 데 최대 24시간이 걸릴 수 있습니다. 대규모 저장소의 경우 색인을 생성하는 데 더 오래 걸릴 수 있습니다. 24시간마다 한 번 색인을 생성하여 저장소에서 수행된 변경사항을 가져옵니다.

  1. indexing 로그를 검색합니다. 자세한 내용은 Logging 쿼리 언어를 참고하세요.

    콘솔

    1. Google Cloud 콘솔에서 로그 탐색기로 이동합니다.

      로그 탐색기로 이동

    2. 로그 이름 필터를 사용하여 indexing 로그를 봅니다.

    gcloud

    색인 생성 로그를 검색하려면 셸 환경에서 logging read 명령어를 사용합니다.

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing""
    

    PROJECT_ID를 저장소 그룹이 있는 프로젝트 ID로 바꿉니다.

    예를 들어 indexing 로그에서 오류를 보려면 다음 명령어를 실행합니다.

    gcloud logging read "logName="projects/PROJECT_ID/logs/indexing" AND severity>=ERROR"
    
  2. 다음과 같은 관련 색인 생성 상태를 검토합니다.

    • 저장소 색인 생성 시작(예: Indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 6, failed: 0.)
    • 개별 저장소 색인 생성 종료. 예를 들면 다음과 같습니다.
      • 완료: Successfully finished indexing repository REPOSITORY_NAME. Total number of repositories: 10, succeeded: 7, failed: 0.
      • 실패: Failed to index repository REPOSITORY_NAME. Error: [<error message>]. Total number of repositories: 10, succeeded: 7, failed: 1.
    • 저장소 색인 생성 종료. 예를 들면 다음과 같습니다.
      • 완료: Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 0.
      • 실패: Finished indexing process. Repositories attempted: 10. Repositories successfully indexed: 9. Repositories unsuccessfully fetched: 1. Repositories that were not successfully fetched will be retried in the next run.

    색인 상태에서 REPOSITORY_NAME은 검토하려는 저장소입니다.

  3. 다음과 같은 관련 색인 생성 오류를 검토합니다.

    • 저장소를 가져올 수 없습니다.
    • 저장소 파일을 나열할 수 없습니다.
    • 색인에서 저장소 정보를 검색할 수 없습니다.
    • 색인에서 파일을 검색할 수 없습니다.
    • 내부 오류입니다.

코드 맞춤설정 사용

코드 맞춤설정을 설정하면 사용자에게 전체 코드베이스 인식 결과 외에도 색인이 생성된 비공개 코드를 기반할 수 있는 코드 완성 및 코드 생성 추천이 표시됩니다.

코드 맞춤설정 사용 중지

  1. 셸 환경에서 현재 색인의 모든 저장소 그룹을 나열하려면 gemini code-repository-indexes repository-groups list 명령어를 사용합니다.

    gcloud gemini code-repository-indexes repository-groups list --location=REGION \
        --project=PROJECT_ID \
        --code-repository-index=INDEX_NAME --uri
    

    다음을 바꿉니다.

    • REGION: 이 페이지의 시작하기 전에 섹션에 설명된 지원되는 리전으로, Google Cloud 프로젝트의 Developer Connect에서 구성되었습니다.
    • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
    • INDEX_NAME: 색인을 만들기 위해 이전 단계에서 만든 색인의 이름입니다.
  2. 현재 색인에서 저장소 그룹을 삭제하려면 gemini code-repository-indexes repository-groups delete 명령어를 사용합니다.

    gcloud gemini code-repository-indexes repository-groups delete REPOSITORY_GROUP \
        --location=REGION \
        --project=PROJECT_ID \
        --code-repository-index=INDEX_NAME
    
  3. 색인에서 모든 저장소 그룹을 삭제할 때까지 저장소 그룹마다 3단계를 반복합니다.

  4. 선택사항: 색인을 삭제하려면 셸 환경에서 gemini code-repository-indexes delete 명령어를 사용합니다.

    gcloud gemini code-repository-indexes delete INDEX_NAME \
        --location=REGION \
        --project=PROJECT_ID
    

다음 단계