GitHub Copilot Workspace 완벽 가이드: Issue에서 Pull Request까지 AI로 자동화하기
GitHub Copilot Workspace란?
GitHub Copilot Workspace는 GitHub Issue를 분석하여 AI 기반 구현 계획을 생성하고, 파일 수준의 코드 편집을 제안하며, 통합 터미널에서 검증까지 수행할 수 있는 클라우드 개발 환경입니다. 개발자는 이슈 하나에서 시작해 완성된 Pull Request까지 브라우저 안에서 모든 작업을 완료할 수 있습니다.
사전 준비 사항
- GitHub 계정 (Pro, Team, 또는 Enterprise 플랜 권장)- GitHub Copilot 구독 활성화- Copilot Workspace 액세스 권한 (Settings → Copilot → Workspace에서 활성화)- 대상 리포지토리의 쓰기 권한
Step 1: GitHub Issue에서 Workspace 시작하기
Copilot Workspace는 GitHub Issue 페이지에서 직접 실행됩니다.
- GitHub 리포지토리에서 해결할 Issue를 엽니다.- Issue 페이지 상단의 “Open in Workspace” 버튼을 클릭합니다.- Copilot Workspace가 새 탭에서 열리며 이슈 내용을 자동으로 분석합니다.
# Issue 예시: #142 - API 응답에 pagination 추가
Issue 본문:
GET /api/users 엔드포인트에 커서 기반 페이지네이션을 구현해주세요.
- page, limit 쿼리 파라미터 지원
- 응답에 totalCount, hasNextPage 포함
- 기본 limit은 20, 최대 100
이슈의 제목, 본문, 라벨, 관련 댓글을 AI가 모두 읽고 컨텍스트를 파악합니다.
Step 2: AI 구현 계획(Specification) 검토 및 수정
Workspace가 이슈를 분석한 후 **Specification(명세)**과 Plan(계획) 두 단계를 자동 생성합니다.
- Specification 탭에서 AI가 이해한 요구사항을 확인합니다.- 누락된 요구사항이 있으면 직접 텍스트를 편집하거나 자연어로 지시를 추가합니다.- “Regenerate” 버튼으로 명세를 재생성할 수 있습니다.
# AI가 생성한 Specification 예시:
현재 동작
- GET /api/users는 모든 사용자를 한 번에 반환
- 페이지네이션 미지원
목표 동작
- page, limit 쿼리 파라미터로 페이지네이션 지원
- 응답 형식: { data: [], totalCount, page, limit, hasNextPage }
- limit 기본값 20, 최대값 100 제한
잘못된 파라미터에 대한 400 에러 처리
Step 3: 파일 수준 편집 계획(Plan) 확인
Plan 탭에서는 AI가 어떤 파일을 어떻게 수정할지 구체적으로 보여줍니다.
- **Plan 탭**으로 이동하여 변경 대상 파일 목록을 확인합니다.- 각 파일별로 추가, 수정, 삭제될 내용의 요약이 표시됩니다.- 불필요한 파일 변경은 체크 해제하여 제외할 수 있습니다.# AI Plan 예시:
📁 src/controllers/userController.js
→ getUserAll 함수에 pagination 로직 추가
📁 src/middleware/validateQuery.js (신규 생성)
→ page, limit 파라미터 검증 미들웨어
📁 src/models/userModel.js
→ findAll 메서드에 offset, limit 파라미터 추가
📁 tests/user.test.js
→ pagination 관련 테스트 케이스 추가
Step 4: AI 코드 편집 구현(Implementation)
**"Implement"** 버튼을 클릭하면 AI가 계획에 따라 실제 코드를 생성합니다.
// src/controllers/userController.js - AI 생성 코드
const getUsers = async (req, res) => {
const page = Math.max(1, parseInt(req.query.page) || 1);
const limit = Math.min(100, Math.max(1, parseInt(req.query.limit) || 20));
const offset = (page - 1) * limit;
try {
const { rows, totalCount } = await UserModel.findAll({ offset, limit });
res.json({
data: rows,
totalCount,
page,
limit,
hasNextPage: offset + limit < totalCount
});
} catch (error) {
res.status(500).json({ error: ‘Internal server error’ });
}
};
- 각 파일의 diff 뷰에서 변경 사항을 줄 단위로 검토합니다.- 특정 코드 블록을 선택하여 **“Revise”**로 재생성을 요청할 수 있습니다.- 직접 에디터에서 코드를 수정하는 것도 가능합니다.// src/middleware/validateQuery.js - AI 신규 생성 const validatePagination = (req, res, next) => { const { page, limit } = req.query;if (page !== undefined && (isNaN(page) || parseInt(page) < 1)) { return res.status(400).json({ error: ‘page must be a positive integer’ }); } if (limit !== undefined && (isNaN(limit) || parseInt(limit) < 1)) { return res.status(400).json({ error: ‘limit must be a positive integer’ }); }
next(); };
module.exports = { validatePagination };
Step 5: 통합 터미널에서 검증하기
Workspace 하단의 통합 터미널에서 빌드, 테스트, 린팅을 직접 실행할 수 있습니다.
# 통합 터미널에서 검증 명령 실행
$ npm install
$ npm run build
$ npm test -- --grep "pagination"
테스트 결과 확인
PASS tests/user.test.js
✓ GET /api/users returns paginated results (45ms)
✓ GET /api/users?page=2&limit=10 returns correct offset (38ms)
✓ GET /api/users?limit=200 caps at 100 (22ms)
✓ GET /api/users?page=-1 returns 400 error (15ms)
$ npm run lint
✔ No lint errors found
Step 6: Pull Request 생성
- 모든 검증이 완료되면 “Create Pull Request” 버튼을 클릭합니다.- PR 제목과 본문이 이슈 내용을 기반으로 자동 작성됩니다.- PR 본문에는 변경 사항 요약, 테스트 결과, 관련 이슈 링크가 포함됩니다.-
Closes #142키워드가 자동으로 추가되어 머지 시 이슈가 닫힙니다.
Pro Tips: 파워 유저를 위한 고급 활용법
| 팁 | 설명 |
|---|---|
| 멀티 이슈 참조 | Specification에 관련 이슈 번호를 추가하면 AI가 여러 이슈의 컨텍스트를 함께 고려합니다 |
| 브랜치 전략 지정 | Plan 단계에서 브랜치명을 feature/issue-142-pagination처럼 직접 지정할 수 있습니다 |
| 세션 공유 | Workspace URL을 팀원에게 공유하여 실시간 리뷰 및 피드백이 가능합니다 |
| 이터레이션 반복 | PR 리뷰 코멘트를 Workspace에서 다시 열어 추가 수정 후 재푸시할 수 있습니다 |
| 컨텍스트 파일 추가 | Plan 단계에서 AI가 참조할 추가 파일을 수동으로 지정하면 더 정확한 코드가 생성됩니다 |
| 문제 | 원인 | 해결 방법 |
|---|---|---|
| "Open in Workspace" 버튼이 안 보임 | Copilot Workspace 미활성화 | Settings → Copilot → Features에서 Workspace 토글 활성화 |
| Plan 생성 후 빈 파일 목록 | 이슈 본문이 너무 모호함 | 이슈에 구체적인 기술 요구사항과 파일 경로 힌트 추가 |
| 터미널에서 의존성 설치 실패 | 프라이빗 레지스트리 인증 문제 | Workspace 환경변수에 NPM_TOKEN 설정 필요 |
| 코드 생성 결과가 부정확함 | 리포지토리 컨텍스트 부족 | Plan에서 관련 파일을 수동으로 참조 목록에 추가 |
| PR 생성 시 권한 오류 | 리포지토리 쓰기 권한 없음 | 리포지토리 관리자에게 Collaborator 권한 요청 |
| 항목 | 기존 방식 | Copilot Workspace |
|---|---|---|
| 이슈 분석 | 수동으로 요구사항 정리 | AI가 자동 분석 및 명세 생성 |
| 구현 계획 | 개발자가 직접 설계 | 파일 단위 변경 계획 자동 생성 |
| 코드 작성 | 로컬 IDE에서 수동 코딩 | AI가 계획 기반으로 코드 생성 |
| 검증 | 로컬 환경 설정 후 테스트 | 클라우드 터미널에서 즉시 테스트 |
| PR 생성 | Git CLI로 커밋/푸시 후 생성 | 원클릭 PR 생성 (자동 이슈 연결) |
Q1: Copilot Workspace는 무료로 사용할 수 있나요?
Copilot Workspace는 GitHub Copilot 구독에 포함된 기능입니다. GitHub Copilot Individual($10/월), Business($19/월), 또는 Enterprise($39/월) 플랜 구독자가 사용할 수 있습니다. GitHub Copilot Free 플랜에서는 제한된 기능만 이용 가능하므로, 전체 워크플로우를 활용하려면 유료 플랜이 권장됩니다.
Q2: AI가 생성한 코드를 신뢰할 수 있나요? 리뷰 없이 머지해도 되나요?
AI 생성 코드는 반드시 사람이 리뷰해야 합니다. Copilot Workspace는 개발 속도를 높이는 도구이지 개발자를 대체하는 도구가 아닙니다. Step 5의 통합 터미널 검증을 반드시 수행하고, PR 단계에서 팀 코드 리뷰 프로세스를 거치는 것을 권장합니다. 특히 보안 관련 코드, 데이터베이스 마이그레이션, 인증 로직 등은 각별히 주의하여 검토해야 합니다.
Q3: 대규모 리팩토링이나 복잡한 이슈에도 Copilot Workspace를 사용할 수 있나요?
가능하지만 전략적으로 접근해야 합니다. 대규모 변경은 이슈를 작은 단위로 분할한 후 각각에 대해 Workspace를 실행하는 것이 효과적입니다. Plan 단계에서 AI가 참조할 컨텍스트 파일을 수동으로 추가하고, Specification을 상세하게 작성할수록 결과물의 품질이 향상됩니다. 10개 이상의 파일 변경이 필요한 경우 2~3개의 Workspace 세션으로 나누어 진행하는 것을 권장합니다.