# Gemini CLI 마스터하기(심화): v14 - 실전 예제: 인터랙티브 모드로 GitHub 이슈 분류하기 지금까지 인터랙티브 모드의 개념, UI, 그리고 고급 제어 기능까지 모두 배웠습니다. 이제 이 모든 지식을 하나로 모아, 제공되었던 코드 스니펫 중 하나인 'ADK Issue Triaging Assistant'를 실제로 구현해보는 실전 예제를 진행해 보겠습니다. 이 예제의 목표는 Gemini CLI의 인터랙티브 모드를 사용하여 GitHub 저장소에 새로 등록된 이슈를 분석하고, 적절한 라벨을 붙이고, 담당자를 할당하는 '이슈 분류(Triage)' 작업을 수행하는 것입니다. --- ## 1. 환경 준비 및 설정 작업을 시작하기 전에, Gemini 에이전트가 GitHub 저장소에 접근하는 데 필요한 몇 가지 환경 변수를 설정해야 합니다. ### 1.1. 필요한 환경 변수 * **`INTERACTIVE=1`:** 인터랙티브 모드를 활성화합니다. * **`GITHUB_TOKEN`:** GitHub API에 접근하기 위한 개인용 액세스 토큰(Personal Access Token)입니다. 저장소(`repo`) 권한이 필요합니다. [GitHub 문서](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)를 참조하여 토큰을 생성하세요. * **`OWNER`:** 대상 GitHub 저장소의 소유자 이름 (예: `google`) * **`REPO`:** 대상 저장소의 이름 (예: `gemini-cli-project`) * **`ISSUE_NUMBER`:** 분류할 이슈의 번호 (예: `42`) ### 1.2. 설정 예시 터미널에서 다음과 같이 환경 변수를 설정합니다. ```bash export INTERACTIVE=1 export GITHUB_TOKEN="ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxx" export OWNER="MyGitHubUsername" export REPO="my-test-repository" export ISSUE_NUMBER="42" ``` ## 2. 이슈 분류 세션 시작 환경 변수 설정이 완료되면, `gemini web` 명령어를 실행하여 인터랙티브 세션을 시작합니다. ```bash gemini web ``` 이제 웹 브라우저를 열고 `http://localhost:8080`으로 접속합니다. 에이전트는 시작과 동시에 설정된 환경 변수를 읽어, 자신이 작업해야 할 대상(`MyGitHubUsername/my-test-repository`의 42번 이슈)을 자동으로 인식하고 초기 화면을 구성합니다. ## 3. GitHub 이슈 분류 과정 (상세 시나리오) 웹 인터페이스에 접속하면 다음과 같은 시나리오가 펼쳐집니다. **초기 상태:** * **작업 환경 뷰:** 42번 GitHub 이슈의 제목, 본문, 현재 라벨(없음), 담당자(없음) 등이 깔끔하게 렌더링되어 보입니다. * **에이전트 로그:** "목표 확인: 이슈 #42 분류 작업 시작. 이슈 내용을 읽는 중..." --- **첫 번째 행동: 이슈 내용 분석 및 'bug' 라벨 제안** * **이슈 내용:** "애플리케이션의 '제출' 버튼을 클릭하면 아무런 반응 없이 충돌이 발생합니다." * **에이전트 로그:** "분석: 이슈 본문에 '충돌(crash)', '반응 없음(no reaction)' 등의 키워드가 포함됨. 이는 '버그'일 가능성이 높음. 행동 계획: 'bug' 라벨 추가 제안." * **행동 제안 카드:** "제안된 행동: 이슈 #42에 'bug' 라벨 추가" * **사용자 행동:** 제안이 합리적이라고 판단하여 **'승인(Approve)'** 버튼을 클릭합니다. 에이전트는 GitHub API를 호출하여 라벨을 추가하고, 작업 환경 뷰가 즉시 갱신되어 'bug' 라벨이 표시됩니다. --- **두 번째 행동: 담당자 할당 제안 및 사용자 수정 (`edit_action`)** * **에이전트 로그:** "분석: 'bug' 라벨이 추가됨. 저장소 기록에 따르면, 'bug' 라벨은 주로 'dev-leader'가 처리함. 행동 계획: 담당자로 'dev-leader' 할당 제안." * **행동 제안 카드:** "제안된 행동: 이슈 #42에 'dev-leader' 담당자 할당" * **사용자 행동:** 사용자는 'dev-leader'가 현재 휴가 중인 것을 알고 있습니다. 1. 행동 제안 카드에서 '수정(Edit)' 버튼을 클릭합니다. 2. 담당자 필드의 `dev-leader`를 `senior-developer-jane`으로 직접 수정합니다. 3. 수정된 행동("이슈 #42에 'senior-developer-jane' 담당자 할당")을 확인하고 **'승인(Approve)'** 버튼을 클릭합니다. --- **세 번째 행동: 담당자에게 알림 댓글 작성 제안** * **에이전트 로그:** "분석: 담당자가 'senior-developer-jane'으로 할당됨. 담당자에게 이슈를 알리고 추가 정보를 요청하는 댓글 작성이 필요함. 행동 계획: 알림 댓글 작성 제안." * **행동 제안 카드:** "제안된 행동: 이슈 #42에 댓글 추가. 내용: '@senior-developer-jane, 이 버그를 확인하고 관련 로그를 제공해 주시겠어요?'" * **사용자 행동:** 댓글 내용이 명확하고 적절하다고 판단하여 **'승인(Approve)'** 버튼을 클릭합니다. --- **최종 상태:** * **작업 환경 뷰:** 42번 이슈에 'bug' 라벨, 담당자 'senior-developer-jane', 그리고 방금 작성된 댓글이 모두 적용되어 표시됩니다. * **에이전트 로그:** "이슈 분류 작업 완료. 다음 지시를 기다리는 중." ## 4. 요약 이번 실전 예제를 통해, 우리는 Gemini CLI의 인터랙티브 모드가 어떻게 구체적인 작업에 적용될 수 있는지 명확하게 확인했습니다. 사용자는 에이전트의 제안을 승인할 뿐만 아니라, `edit_action`과 같은 고급 기능을 통해 현실 세계의 변수(담당자의 휴가 등)를 반영하여 작업의 흐름을 능동적으로 수정할 수 있었습니다. 이는 인터랙티브 모드가 제공하는 안전성과 제어권의 가치를 명확히 보여줍니다. 이처럼 강력한 기능을 직접 만들거나 수정하고 싶다면 어떻게 해야 할까요? 마지막 단계에서는 인터랙티브 에이전트를 커스터마이징하고 개발하는 방법에 대한 개념을 살펴보겠습니다.