[GitHub 100일 챌린지] Day 73 - Issues 고급 기능
[GitHub 100일 챌린지] Day 73 - Issues 고급 기능
100일 챌린지 Day 73 - Task Lists, Issue Forms, Saved Replies 등 고급 기능으로 생산성을 극대화합니다.
⏱️ 예상 학습 시간: 35-40분 📚 난이도: ⭐⭐⭐ (중급)
배울 내용
- Task Lists로 진행률 관리
- Issue Forms (YAML)로 표준화
- Saved Replies와 자동화
시작하기 전에
이 내용은 다음 개념을 알고 있다면 더 쉽게 이해할 수 있습니다:
- ✅ [Day 71 - Issues 기본 사용법]
- ✅ [Day 72 - Issues 관리 및 라벨 시스템]
- ✅ Markdown 기본 문법
- ✅ YAML 파일 형식 (간단히만 알아도 됨)
이전 Day들을 먼저 학습하면 Issues 전체 흐름을 이해하기 쉽습니다!
1. Task Lists (체크박스)
기본 문법
1
2
3
4
5
6
## 할 일 목록
- [x] 로그인 기능 구현
- [x] 회원가입 기능 구현
- [ ] 비밀번호 찾기 구현
- [ ] 소셜 로그인 추가
렌더링 결과:
1
2
3
4
5
6
7
8
할 일 목록
✅ 로그인 기능 구현
✅ 회원가입 기능 구현
☐ 비밀번호 찾기 구현
☐ 소셜 로그인 추가
진행률: 50% (2/4)
중첩 Task Lists
1
2
3
4
5
6
7
8
9
10
## Phase 1: 인증 시스템
- [x] 백엔드
- [x] User 모델 생성
- [x] JWT 토큰 발급
- [x] API 엔드포인트
- [ ] 프론트엔드
- [x] 로그인 폼
- [ ] 회원가입 폼
- [ ] 비밀번호 재설정
실전 활용
Feature Issue 예시:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 사용자 대시보드 구현
## 🎯 목표
사용자 활동을 한눈에 볼 수 있는 대시보드 페이지 구현
## ✅ 작업 목록
### Phase 1: 데이터 수집
- [x] 사용자 활동 로그 API 설계
- [x] 데이터베이스 스키마 설계
- [x] 데이터 수집 로직 구현
### Phase 2: 백엔드
- [x] 통계 API 엔드포인트
- [ ] 캐싱 시스템 구현
- [ ] 성능 최적화
### Phase 3: 프론트엔드
- [ ] 대시보드 레이아웃
- [ ] 차트 컴포넌트
- [ ] 반응형 디자인
### Phase 4: 테스트 & 배포
- [ ] 단위 테스트
- [ ] E2E 테스트
- [ ] 프로덕션 배포
진행률: 35% (5/14)
2. Issue Forms (YAML)
기존 Markdown 템플릿의 한계
1
2
3
4
5
<!-- 사용자가 무시할 수 있음 -->
## 버그 설명
여기에 작성하세요...
<!-- 필수 필드를 강제할 수 없음 -->
Issue Forms의 장점
1
2
3
4
✅ 필수 필드 강제
✅ 드롭다운, 체크박스 등 UI 제공
✅ 유효성 검사
✅ 구조화된 데이터 수집
Bug Report Form 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# .github/ISSUE_TEMPLATE/bug_report.yml
name: 🐛 Bug Report
description: 버그를 보고해주세요
title: "[BUG] "
labels: ["bug", "needs-triage"]
assignees:
- octocat
body:
- type: markdown
attributes:
value: |
버그 리포트를 작성해주셔서 감사합니다!
- type: input
id: summary
attributes:
label: 버그 요약
description: 버그를 한 줄로 요약해주세요
placeholder: "예: 로그인 버튼 클릭 시 404 에러"
validations:
required: true
- type: textarea
id: description
attributes:
label: 상세 설명
description: 버그에 대해 자세히 설명해주세요
placeholder: 무슨 일이 발생했나요?
validations:
required: true
- type: textarea
id: reproduce
attributes:
label: 재현 방법
description: 단계별로 재현 방법을 작성해주세요
placeholder: |
1. '...'로 이동
2. '...'을 클릭
3. 에러 확인
validations:
required: true
- type: dropdown
id: browser
attributes:
label: 브라우저
description: 어떤 브라우저를 사용하셨나요?
options:
- Chrome
- Firefox
- Safari
- Edge
- Other
validations:
required: true
- type: dropdown
id: os
attributes:
label: 운영체제
options:
- Windows
- macOS
- Linux
- iOS
- Android
validations:
required: true
- type: dropdown
id: severity
attributes:
label: 심각도
description: 이 버그가 얼마나 심각한가요?
options:
- Critical (서비스 불가)
- High (주요 기능 장애)
- Medium (불편함)
- Low (사소함)
validations:
required: true
- type: checkboxes
id: terms
attributes:
label: 체크리스트
description: 아래 항목을 확인해주세요
options:
- label: 중복된 이슈가 없는지 확인했습니다
required: true
- label: 최신 버전에서 발생하는 버그입니다
required: true
💡 초보자 팁 YAML 문법이 처음이라면 걱정하지 마세요! 위 예시를 복사해서 필드 이름만 바꿔 사용하면 됩니다. YAML에서 가장 중요한 것은 들여쓰기입니다. 스페이스 2칸으로 들여쓰기를 맞춰주세요 (탭 X). 처음엔 간단한 폼으로 시작하고, 필요할 때 필드를 추가해가는 것을 추천합니다!
Feature Request Form
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# .github/ISSUE_TEMPLATE/feature_request.yml
name: ✨ Feature Request
description: 새로운 기능을 제안해주세요
title: "[FEATURE] "
labels: ["enhancement"]
body:
- type: input
id: title
attributes:
label: 기능 제목
description: 어떤 기능인가요?
placeholder: "예: 다크 모드 지원"
validations:
required: true
- type: textarea
id: problem
attributes:
label: 해결하려는 문제
description: 현재 어떤 문제가 있나요?
placeholder: "밤에 사용할 때 눈이 부셔요"
validations:
required: true
- type: textarea
id: solution
attributes:
label: 제안하는 해결책
description: 어떻게 구현하면 좋을까요?
placeholder: "다크 모드 토글 버튼을 추가하면..."
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: 고려한 대안
description: 다른 방법도 생각해보셨나요?
placeholder: "브라우저 다크 모드 자동 감지도 고려했지만..."
- type: dropdown
id: priority
attributes:
label: 우선순위
description: 얼마나 중요한 기능인가요?
options:
- Critical (없으면 사용 불가)
- High (매우 필요함)
- Medium (있으면 좋음)
- Low (나중에)
validations:
required: true
3. Saved Replies (저장된 답변)
Saved Replies란?
자주 사용하는 답변을 템플릿으로 저장하여 재사용하는 기능입니다.
설정 방법
1
GitHub Settings → Saved replies → Add a saved reply
유용한 Saved Replies 예시
1. 감사 인사
1
2
3
4
5
이름: thanks
내용:
이슈를 보고해주셔서 감사합니다! 🙏
검토 후 빠른 시일 내에 답변드리겠습니다.
2. 추가 정보 요청
1
2
3
4
5
6
7
8
9
10
11
이름: need-more-info
내용:
안녕하세요! 이슈를 확인하기 위해 몇 가지 추가 정보가 필요합니다:
1. **버전**: 어떤 버전을 사용 중이신가요?
2. **환경**: OS와 브라우저 정보를 알려주세요
3. **재현 방법**: 단계별로 재현 방법을 작성해주세요
4. **스크린샷**: 가능하다면 스크린샷을 첨부해주세요
정보를 주시면 더 빠르게 도와드릴 수 있습니다. 감사합니다!
3. 중복 이슈
1
2
3
4
5
6
7
이름: duplicate
내용:
이 이슈는 #{issue_number}와 중복됩니다.
해당 이슈에서 논의를 계속하겠습니다.
참여해주셔서 감사합니다!
4. 해결됨
1
2
3
4
5
6
7
이름: resolved
내용:
이 이슈는 버전 {version}에서 해결되었습니다! 🎉
업데이트 후에도 문제가 계속되면 새로운 이슈를 열어주세요.
감사합니다!
5. 초보자 환영
1
2
3
4
5
6
7
8
9
10
11
이름: first-contribution
내용:
첫 기여를 환영합니다! 🎉
몇 가지 도움이 될 만한 정보:
- [기여 가이드](CONTRIBUTING.md)
- [개발 환경 설정](docs/setup.md)
- [코드 스타일 가이드](docs/style.md)
질문이 있으시면 언제든 물어보세요!
4. 이모지 반응 (Reactions)
사용 가능한 반응
1
2
3
4
5
6
7
8
👍 찬성 (+1)
👎 반대 (-1)
😄 웃음 (laugh)
🎉 축하 (hooray)
😕 혼란 (confused)
❤️ 사랑 (heart)
🚀 로켓 (rocket)
👀 관심 (eyes)
실전 활용
피드백 수집:
1
2
3
4
5
6
7
## 다음 기능 중 어떤 게 우선일까요?
1. 다크 모드 👍
2. 모바일 앱 🚀
3. API 개선 ❤️
반응으로 투표해주세요!
대신 댓글 대신:
1
2
3
4
5
6
❌ 나쁜 예:
댓글 50개: "동의합니다", "+1", "나도요"
✅ 좋은 예:
댓글 5개 + 45개 👍 반응
→ 깔끔하고 집중된 토론
5. Issue 연결 (Linked Issues)
Development 섹션
1
2
3
4
5
6
7
Issue 오른쪽 사이드바:
Development → Link a branch or pull request
연결하면:
- PR과 Issue 자동 연동
- PR 머지 시 Issue 자동 닫힘
- 진행 상황 추적 용이
실전 예시
1
2
3
4
5
6
7
Issue #123: 로그인 버그
Development:
├─ feature/fix-login (브랜치)
└─ PR #456 (머지 대기 중)
→ PR #456 머지되면 Issue #123 자동 닫힘
6. Issue 변환 (Convert to Discussion)
언제 사용하나요?
1
2
3
4
5
Issue → Discussion으로 변환:
- 버그가 아니라 질문인 경우
- 기능 제안이 장기 토론이 필요한 경우
- 커뮤니티 의견 수렴이 필요한 경우
변환 방법
1
2
3
Issue 우측 → Convert to discussion
→ 카테고리 선택 (Q&A, Ideas, etc.)
→ 확인
직접 해보기 (20-30분)
실습을 통해 배운 내용을 체화해봅시다!
📝 실습 1: Task Lists로 프로젝트 계획 작성하기 (10분)
1
2
3
4
5
- [ ] 1. 연습용 리포지토리에 새 Issue 생성
- [ ] 2. "프로젝트 개발 계획"이라는 제목으로 작성
- [ ] 3. Phase별로 구분된 Task Lists 작성 (최소 3개 Phase)
- [ ] 4. 각 Phase에 3-5개의 하위 작업 추가
- [ ] 5. 일부 항목을 체크하여 진행률 확인
📝 실습 2: Bug Report Issue Form 만들기 (10분)
1
2
3
4
5
- [ ] 1. .github/ISSUE_TEMPLATE/ 디렉토리 생성
- [ ] 2. bug_report.yml 파일 생성
- [ ] 3. 위 예시를 참고하여 최소 5개 필드 추가
- [ ] 4. 필수 필드와 선택 필드 구분하기
- [ ] 5. GitHub에서 실제로 폼이 작동하는지 테스트
📝 실습 3: Saved Replies 설정하기 (5분)
1
2
3
4
- [ ] 1. GitHub Settings → Saved replies 이동
- [ ] 2. "thanks" 답변 템플릿 생성
- [ ] 3. "need-more-info" 답변 템플릿 생성
- [ ] 4. 실제 Issue에서 Saved Reply 사용해보기
📝 실습 4: Issue 연결 및 반응 활용하기 (5분)
1
2
3
4
- [ ] 1. 테스트 Issue 생성
- [ ] 2. Development 섹션에서 브랜치 연결해보기
- [ ] 3. 이모지 반응 추가해보기
- [ ] 4. 다른 Issue와 링크 연결 (#번호 참조)
실습 완료 후: Issue 관리가 훨씬 체계적이고 효율적으로 느껴질 것입니다. 이제 본격적으로 프로젝트에 적용해보세요!
😰 어려우시다면
이 내용이 어렵게 느껴진다면:
- YAML 문법이 어려운 경우
- 처음엔 Markdown 템플릿부터 시작하세요 (Day 71 복습)
- 위 예시를 그대로 복사하여 사용하고, 천천히 이해해나가세요
- YAML 검증 도구 (yamllint.com)를 사용하면 문법 오류를 쉽게 찾을 수 있습니다
- Task Lists가 복잡하게 느껴지는 경우
- 중첩 없이 단순한 체크리스트부터 시작하세요
- 익숙해지면 Phase별로 그룹화해보세요
- 너무 세세하게 나누지 말고, 적당한 크기로 나누는 것이 중요합니다
- Issue Forms vs Markdown 템플릿 선택
- 소규모 프로젝트: Markdown 템플릿으로 충분
- 대규모/오픈소스: Issue Forms로 데이터 수집 표준화
- 팀 상황에 맞게 선택하세요
- 복습이 필요하다면
- Day 71: Issues 기본 개념 다시 확인
- Day 72: 라벨과 마일스톤 관리 복습
- 공식 문서의 Issue Forms 가이드 참고
꼭 기억하세요: 고급 기능들은 필요할 때 하나씩 추가하면 됩니다. 처음부터 모든 기능을 완벽하게 사용하려고 하지 마세요!
정리
완료 체크:
- Task Lists로 진행률을 관리할 수 있다
- Issue Forms (YAML)를 만들 수 있다
- Saved Replies를 활용할 수 있다
- 이모지 반응으로 피드백을 수집할 수 있다
- Issue와 PR을 연결할 수 있다
- 직접 실습을 완료했다
핵심 요약:
- Task Lists: 체크박스로 진행률 시각화
- Issue Forms: YAML로 구조화된 데이터 수집
- Saved Replies: 자주 쓰는 답변 템플릿화
- Reactions: 댓글 대신 깔끔한 피드백
- Linked Issues: PR과 Issue 자동 연동
실전 팁:
- ✅ Feature Issue에는 항상 Task Lists 사용
- ✅ Bug Report는 Issue Forms로 표준화
- ✅ 자주 쓰는 답변 5개는 Saved Replies로 저장
- ✅ 투표는 댓글 대신 이모지 반응 활용
- ✅ PR 생성 시 Development 섹션에서 Issue 연결
다음: Day 74 - GitHub Projects →
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
