포스트

[GitHub 100일 챌린지] Day 73 - Issues 고급 기능

[GitHub 100일 챌린지] Day 73 - Issues 고급 기능

100일 챌린지 Day 73 - Task Lists, Issue Forms, Saved Replies 등 고급 기능으로 생산성을 극대화합니다.

⏱️ 예상 학습 시간: 35-40분 📚 난이도: ⭐⭐⭐ (중급)

배울 내용

  1. Task Lists로 진행률 관리
  2. Issue Forms (YAML)로 표준화
  3. 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 관리가 훨씬 체계적이고 효율적으로 느껴질 것입니다. 이제 본격적으로 프로젝트에 적용해보세요!


😰 어려우시다면

이 내용이 어렵게 느껴진다면:

  1. YAML 문법이 어려운 경우
    • 처음엔 Markdown 템플릿부터 시작하세요 (Day 71 복습)
    • 위 예시를 그대로 복사하여 사용하고, 천천히 이해해나가세요
    • YAML 검증 도구 (yamllint.com)를 사용하면 문법 오류를 쉽게 찾을 수 있습니다
  2. Task Lists가 복잡하게 느껴지는 경우
    • 중첩 없이 단순한 체크리스트부터 시작하세요
    • 익숙해지면 Phase별로 그룹화해보세요
    • 너무 세세하게 나누지 말고, 적당한 크기로 나누는 것이 중요합니다
  3. Issue Forms vs Markdown 템플릿 선택
    • 소규모 프로젝트: Markdown 템플릿으로 충분
    • 대규모/오픈소스: Issue Forms로 데이터 수집 표준화
    • 팀 상황에 맞게 선택하세요
  4. 복습이 필요하다면
    • 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 라이센스를 따릅니다.