Github MCP 서버를 통한 풀 리퀘스트(pull request) 워크플로우
RECOMMEND POSTS BEFORE THIS
1. Github MCP server
MCP(model context protocol)에 대한 개념이 부족하다면 이 글을 참고하길 바란다. Github MCP 서버는 AI 도구(예: AI 에이전트, 어시스턴트, 챗봇)를 GitHub 플랫폼에 직접 연결해준다. 가장 큰 특징은 사용자가 자연어를 통해 GitHub의 다양한 기능과 상호작용할 수 있게 해준다는 점이다. 공식 문서를 보면 다음과 같은 유즈 케이스를 소개하고 있다.
- 저장소 관리
- 코드 저장소를 탐색하고 코드를 검색한다.
- 파일을 찾고, 커밋 내역을 분석하며, 프로젝트 구조를 파악한다.
- 이슈 및 PR 자동화
- 이슈(Issue)와 풀 리퀘스트(Pull Request)를 생성, 업데이트, 관리한다.
- AI가 버그를 분류하거나 코드 변경 사항을 검토하는 데 도움을 줍니다.
- CI/CD 및 워크플로우 인텔리전스
- GitHub Actions 워크플로우 실행 상태를 모니터링한다.
- 빌드 실패 원인을 분석하고, 릴리스 관리를 돕습니다.
- 코드 분석
- 보안 취약점(security findings)이나 디펜다봇(Dependabot) 알림을 검토한다.
- 코드베이스의 전반적인 패턴과 상태에 대한 통찰력을 제공한다.
- 팀 협업
- 팀 토론(Discussions)에 접근하고 알림을 관리한다.
- 팀 활동을 분석하여 프로세스를 간소화한다.
다음과 같은 도구 세트들을 제공한다.
| Toolset | Description |
|---|---|
| context | Strongly recommended: Tools that provide context about the current user and GitHub context you are operating in |
| actions | GitHub Actions workflows and CI/CD operations |
| code_security | Code security related tools, such as GitHub Code Scanning |
| dependabot | Dependabot tools |
| discussions | GitHub Discussions related tools |
| experiments | Experimental features that are not considered stable yet |
| gists | GitHub Gist related tools |
| git | GitHub Git API related tools for low-level Git operations |
| issues | GitHub Issues related tools |
| labels | GitHub Labels related tools |
| notifications | GitHub Notifications related tools |
| orgs | GitHub Organization related tools |
| projects | GitHub Projects related tools |
| pull_requests | GitHub Pull Request related tools |
| repos | GitHub Repository related tools |
| secret_protection | Secret protection related tools, such as GitHub Secret Scanning |
| security_advisories | Security advisories related tools |
| stargazers | GitHub Stargazers related tools |
| users | GitHub User related tools |
도구 세트이기 때문에 각 세트마다 다양한 도구들을 제공한다. 예를 들어 pull_requests 도구 세트와 repos 도구 세트는 다음과 같은 도구들을 제공한다.
| Toolset | Tool | Description |
|---|---|---|
| pull_requests | add_comment_to_pending_review | Add review comment to the requester’s latest pending pull request review |
| pull_requests | create_pull_request | Open new pull request |
| pull_requests | list_pull_requests | List pull requests |
| pull_requests | merge_pull_request | Merge pull request |
| pull_requests | pull_request_read | Get details for a single pull request |
| pull_requests | pull_request_review_write | Write operations (create, submit, delete) on pull request reviews |
| pull_requests | request_copilot_review | Request Copilot review |
| pull_requests | search_pull_requests | Search pull requests |
| pull_requests | update_pull_request | Edit pull request |
| pull_requests | update_pull_request_branch | Update pull request branch |
| repos | create_branch | Create branch |
| repos | create_or_update_file | Create or update file |
| repos | create_repository | Create repository |
| repos | delete_file | Delete file |
| repos | fork_repository | Fork repository |
| repos | get_commit | Get commit details |
| repos | get_file_contents | Get file or directory contents |
| repos | get_latest_release | Get latest release |
| repos | get_release_by_tag | Get a release by tag name |
| repos | get_tag | Get tag details |
| repos | list_branches | List branches |
| repos | list_commits | List commits |
| repos | list_releases | List releases |
| repos | list_tags | List tags |
| repos | push_files | Push files to repository |
| repos | search_code | Search code |
| repos | search_repositories | Search repositories |
2. Test user journey workflow for non-developer with Github MCP server
이전 글에서 설명한 것처럼 AI 에이전트는 사용자 플로우에 대한 E2E 테스트 코드를 작성할 수 있다. AI 에이전트가 E2E 테스트 코드를 작성하는 일은 개발자에게도 도움이 되지만, PM이나 디자이너 같은 비개발자 직군인 사람들도 자동화 된 테스트를 구축하는 것에 기여할 수 있도록 도움을 준다.
AI 에이전트를 통해 E2E 테스트를 일회성으로만 실행하고 버리기엔 아쉽기 때문에 테스트 코드로 작성하는 것이 좋다. 테스트 코드를 작성했을 때 장점은 자동화 된 CI/CD 파이프라인을 통해 매번 실행될 수 있다는 것이다. 이전 글에서 살펴본 것처럼 테스트 코드는 AI 에이전트를 통해 작성할 수 있다. 다만 개발자는 코드를 리뷰하고 Github 같은 원격 코드 저장소의 메인 브랜치에 직접 변경 사항을 적용할 수 있지만, 비개발자 직군들에게 너무 어려운 일이다. 비개발자 직군도 Github MCP 서버와 AI 에이전트를 사용한다면 작성한 E2E 테스트 코드를 Github에 업로드 할 수 있다.
- AI 에이전트는 트래커 부트에 작성된 사용자 스토리를 기반으로 테스트 시나리오를 작성한다.
- AI 에이전트는 자신이 작성한 시나리오를 기반으로 E2E 테스트를 수행한다.
- AI 에이전트는 테스트가 성공하면 시나리오를 기반으로 E2E 테스트 코드를 만들어 원격 코드 저장소에 풀 리퀘스트를 생성한다.
3. Run github pull request workflow
지금부터 AI 에이전트를 통해 E2E 테스트를 수행하자. AI 에이전트는 코파일럿을 사용한다. 인텔리제이에 MCP 서버를 설정하는 방법은 이 글을 참조하길 바란다. mcp.json 파일에 다음과 같이 MCP 서버들을 등록하면 된다. 이번 예제에선 다음과 같은 MCP 서버들을 사용한다.
- 트래커 부트(tracker boot)
- Playwright
- Github
{
"servers": {
"tracker-boot-mcp-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"TRACKER_BOOT_API_KEY",
"public.ecr.aws/tracker-boot/mcp-server:latest"
],
"env": {
"TRACKER_BOOT_API_KEY": "{YOUR_TRACKER_BOOT_API_TOKEN}"
}
},
"github": {
"url": "https://api.githubcopilot.com/mcp/",
"requestInit": {
"headers": {
"Authorization": "Bearer {YOUR_GITHUB_TOKEN}"
}
}
},
"playwright-mcp-server": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
트래커 부트 MCP 서버를 위해 필요한 API 키는 트래커 부트(tracker boot) MCP 서버로 프롬프트 컨텍스트 공유하기 글을 참조하길 바란다. Github 토큰은 사용자 셋팅(setting) 페이지에서 생성할 수 있다. 프로파일 이미지를 클릭하면 셋팅 페이지로 이동하는 버튼을 볼 수 있다.
왼쪽 사이드 메뉴 하단의 Developer Settings 페이지로 이동한다.
클래식 토큰을 선택 후 해당 화면에서 필요한 토큰을 생성한다. 나는 해당 토큰에 repo, user 권한을 부여했다.
이전 글에서 설명했듯이 코파일럿은 프롬프트를 파일로 작성해서 재사용할 수 있다. .github/propmtps 경로에 아래와 같은 user-journey-test.prompt.md 프롬프트 파일을 만들었다. 비개발자 직군은 코파일럿이 아니라 클로드 데스크탑 같은 도구를 사용한다. 당연히 프로젝트 코드가 로컬 디렉토리가 존재하지 않기 때문에 코드는 원격 서버에 직접 생성하는 편이 좋다고 생각한다. 이에 관련된 프롬프트를 작성한다.
- 프로젝트 내 코드를 직접 생성하거나 수정하지 않도록 금지사항을 지정한다.
- E2E 테스트가 성공하면 특정 브랜치에 테스트 코드를 푸쉬(push)하고 풀 리퀘스트(pull request)를 만들도록 후속 작업을 지정한다.
---
mode: agent
description: E2E 테스트를 수행하는 프롬프트
---
# 역할 설정
당신은 소프트웨어 개발 경험이 풍부한 테크 리드입니다. E2E 테스트 코드를 작성하여 테스트를 자동화하는 것에 익숙합니다.
# 입력 정보
- STORY_ID(required) - 사용자 스토리 ID
- REPOSITORY(required) - Pull Request GitHub 저장소 이름
# 지시사항
- 트래커 부트(tracker boot) MCP 서버에서 `STORY_ID`를 사용해 스토리 정보를 조회한다. `tb_get_story` 도구를 사용한다.
- 사용자 스토리를 읽고, 인수 기준(acceptance criteria)를 통과시킬 수 있는 사용자 테스트 시나리오를 도출한다. 작은 단계로 테스트를 분리하지 않고 전체 사용자 여정을 포괄하는 시나리오를 작성한다.
- 사용자 테스트 시나리오는 사용자의 액션을 기준으로 순차적으로 작성하되, 사용자가 이를 인식할 수 있도록 숫자를 앞에 표기한다.
- 테스트 시나리오가 작성되면 이를 사용자에게 확인 받는다. 프롬프트 실행을 임시 중단한다.
- 사용자 시나리오에 대한 승인을 받으면 Playwright MCP 서버의 도구(tools)를 사용해 브라우저를 제어하면서 E2E 테스트를 수행한다.
- E2E 테스트가 완료되면 결과를 사용자에게 보고한다. 테스트가 실패한 경우, 실패한 테스트 케이스와 그 원인을 상세히 설명한다.
# 금지사항
- 프로젝트에 구현/테스트 코드를 **절대** 직접 생성하지 않는다. PR을 통해 원격 코드 저장소에 직접 생성한다.
- 프로젝트의 구현/테스트 코드를 **절대** 수정하지 않는다.
# 후속 작업
테스트 시나리오에 대한 E2E 테스트 코드를 생성 후 Github `REPOSITORY`의 `e2e/{story-id}` 브랜치(branch)에 push 한다.
push 후 main 브랜치로 pull request를 요청한다.
테스트 파일 이름은 `{story-id}.spec.ts` 형식을 따른다.
테스트 코드는 `e2e/**` 경로 하위에 존재한다. 현재 프로젝트 경로에서 `e2e/**` 경로에 테스트 코드가 없다면, 원격 레포지토리의 `e2e/**` 경로를 참조한다.
위에서 작성한 프롬프트를 실행한다. E2E 테스트를 수행할 사용자 스토리와 테스트가 통과했을 때 풀 리퀘스트를 만들기 위한 저장소 이름을 파라미터로 추가한다.
/user-journey-test
STORY_ID=#200010919
REPOSITORY=Junhyunny/playwright-mcp-e2e-workflow
AI 에이전트는 트래커 부트에 작성된 사용자 스토리를 바탕으로 E2E 테스트를 수행한다. E2E 테스트가 성공하면 테스트 시나리오를 재현한 코드를 e2e/{story_id} 브랜치에 업로드한다. 해당 커밋을 메인 브랜치로 머지하기 위해 풀 리퀘스트를 생성한다.
프롬프트 실행이 완료된 후 AI 에이전트가 명시한 링크로 이동하면 풀 리퀘스트가 만들어진 것을 볼 수 있다.
CLOSING
PM, 디자이너, 개발자의 경계가 점점 무너지는 것 같다. 아니, 경계가 무너진다기 보단 내가 할 수 없는 다른 직군의 일을 AI 에이전트를 통해 수행할 수 있게 됐다는 말이 맞는 것 같다.
댓글남기기