포스트

[GitHub 100일 챌린지] Day 78 - GitHub Discussions 활용

[GitHub 100일 챌린지] Day 78 - GitHub Discussions 활용

100일 챌린지 Day 78 - GitHub Discussions로 커뮤니티를 만들고 소통하는 방법을 마스터합니다.

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

배울 내용

  1. Discussions의 개념과 Issues와의 차이점
  2. 카테고리 설정과 관리
  3. Q&A로 지식 베이스 만들기
  4. Polls(투표)로 의견 수렴하기
  5. 커뮤니티 모더레이션
  6. 고급 기능과 통합

시작하기 전에

이 내용은 다음 개념을 알고 있다면 더 쉽게 이해할 수 있습니다:

  • ✅ [Day 71-73 - Issues 사용 경험]
  • ✅ 온라인 커뮤니티/포럼 사용 경험
  • ✅ 마크다운 기본 문법

Discussions는 Issues와 비슷하지만 더 자유로운 대화를 위한 공간입니다. 포럼이나 커뮤니티를 사용해봤다면 쉽게 이해할 수 있어요!


1. GitHub Discussions란?

정의와 목적

GitHub Discussions는 저장소에 내장된 커뮤니티 포럼입니다.

1
2
3
4
5
6
7
8
9
10
11
Issues = 작업 추적
├─ 버그 리포트
├─ 기능 요청
└─ 태스크 관리

Discussions = 대화와 협업
├─ 질문과 답변
├─ 아이디어 공유
├─ 공지사항
├─ 투표
└─ 일반 토론

Discussions vs Issues

구분 Issues Discussions
목적 작업 추적 대화와 소통
생명주기 Open → Closed 영구적
구조 단일 스레드 답글과 스레드
카테고리 라벨로 분류 카테고리
답변 채택 없음 Q&A에서 가능
투표 이모지 반응 Polls 기능
검색 Issue 검색 Discussion 검색

언제 무엇을 사용?

1
2
3
4
5
6
7
8
9
10
11
12
13
Issue 사용:
✅ 명확한 버그 리포트
✅ 구체적인 기능 요청
✅ 수정이 필요한 작업
✅ 완료/닫힘 상태 필요

Discussion 사용:
✅ "어떻게 하나요?" (How-to)
✅ "왜 이렇게 동작하나요?" (Why)
✅ "이런 기능 어떤가요?" (Ideas)
✅ 커뮤니티 공지사항
✅ 장기적인 토론
✅ 여러 해결책 논의

2. Discussions 활성화하기

활성화 방법

1
2
3
4
5
6
Repository → Settings → Features

☑ Discussions
  Host discussions in your repository

→ Save

활성화 후:

1
2
3
4
5
6
7
8
9
Repository 탭에 Discussions 추가:
Code | Issues | Pull requests | Discussions | ...

자동으로 기본 카테고리 생성됨:
📢 Announcements
💡 Ideas
🙏 Q&A
💬 General
🙌 Show and tell

권한 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Settings → Discussions

권한 레벨:
- Read: Discussion 읽기만
- Write: Discussion 작성 및 댓글
- Moderate: 모더레이터 권한
- Admin: 카테고리 관리 등 모든 권한

Public Repository:
● Anyone with read access can create discussions
○ Only users with write access can create discussions

Private Repository:
● Only collaborators (자동)

3. 카테고리 활용

기본 카테고리

1. Announcements (공지사항)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
📢 Announcements

특징:
- 관리자와 maintainer만 작성 가능
- 중요한 업데이트와 공지
- 댓글은 모두 가능

용도:
- 새 릴리스 발표
- 중요한 변경 사항
- 이벤트 공지
- 정책 변경

예시:
제목: v2.0 릴리스 발표
내용:
MyProject v2.0이 출시되었습니다! 🎉

주요 변경사항:
- 새로운 API 엔드포인트
- 성능 30% 향상
- React 18 지원

자세한 내용: [Release Notes](...)

2. Ideas (아이디어)

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
💡 Ideas

특징:
- 새로운 기능 아이디어
- 브레인스토밍
- upvote로 인기 파악

용도:
- 기능 제안
- 개선 아이디어
- 미래 계획 논의

예시:
제목: 다크 모드 지원
내용:
다크 모드를 추가하면 어떨까요?

장점:
- 눈의 피로 감소
- 배터리 절약 (OLED)
- 현대적인 UX

구현 방법:
1. CSS 변수로 테마 정의
2. localStorage에 사용자 선택 저장
3. 토글 버튼 추가

👍 찬성 투표 부탁드립니다!

3. Q&A (질문과 답변)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
🙏 Q&A

특징:
- 답변 채택 가능 (✅ 표시)
- Stack Overflow 스타일
- 지식 베이스 구축

용도:
- 사용법 질문
- 문제 해결
- 모범 사례 공유

예시:
제목: npm install 시 EACCES 오류
내용:
```bash
npm install -g myproject
# Error: EACCES: permission denied

어떻게 해결하나요?

환경:

  • OS: macOS 14.0
  • Node: v18.0.0
  • npm: v9.0.0

답변 (채택됨 ✅): sudo 없이 글로벌 설치 경로를 변경하세요:

1
2
3
4
5
6
7
8
9
# npm 글로벌 경로 변경
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'

# .bashrc 또는 .zshrc에 추가
export PATH=~/.npm-global/bin:$PATH

# 재시도
npm install -g myproject

이렇게 하면 권한 문제가 해결됩니다!

1
2
3
**4. General (일반)**

💬 General

특징:

  • 자유로운 대화
  • 카테고리 미정 주제
  • 커뮤니티 교류

용도:

  • 일상적인 대화
  • 프로젝트 관련 잡담
  • 자기소개
  • 피드백

예시: 제목: 프로젝트 사용 후기 내용: MyProject를 2주 동안 사용해봤는데 정말 좋네요!

좋은 점:

  • 설치가 간단함
  • 문서가 잘 되어 있음
  • 커뮤니티가 활발함

개선 제안:

  • 튜토리얼 영상이 있으면 좋겠어요
  • 예제가 더 많았으면…

전체적으로 만족합니다! 👍

1
2
3
**5. Show and tell (쇼앤텔)**

🙌 Show and tell

특징:

  • 프로젝트 활용 사례
  • 만든 것 자랑
  • 영감 공유

용도:

  • MyProject로 만든 앱 소개
  • 플러그인 공유
  • 튜토리얼 공유
  • 성공 사례

예시: 제목: MyProject로 만든 할 일 관리 앱 내용: MyProject를 사용해서 Todo 앱을 만들었습니다!

[스크린샷]

기능:

  • 태그로 분류
  • 마감일 알림
  • 다크 모드

GitHub: https://github.com/user/todo-app Demo: https://todo.example.com

코드에 대한 피드백 환영합니다!

1
2
3
### 커스텀 카테고리 만들기

Settings → Discussions → Categories → New category

예시 1: Tutorials (튜토리얼) 이름: Tutorials 이모지: 📚 설명: Step-by-step guides and tutorials 포맷: Open-ended discussion

예시 2: Showcase (쇼케이스) 이름: Showcase 이모지: ✨ 설명: Share your projects built with MyProject 포맷: Announcement (관리자만 작성)

예시 3: Feature Requests (기능 요청) 이름: Feature Requests 이모지: 🚀 설명: Suggest new features 포맷: Open-ended discussion

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
---

## 4. Q&A로 지식 베이스 만들기

### 답변 채택 기능

**질문 작성**:
```markdown
Category: Q&A

제목: API 인증은 어떻게 하나요?

본문:
MyProject API를 사용하려고 하는데 인증 방법을 모르겠습니다.

```javascript
fetch('https://api.example.com/users')
  .then(res => res.json())
// 401 Unauthorized 오류

어떻게 해야 하나요?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
**답변 작성 및 채택**:
```markdown
답변:
API 키를 헤더에 포함해야 합니다!

```javascript
fetch('https://api.example.com/users', {
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY'
  }
})
  .then(res => res.json())
  .then(data => console.log(data))

API 키 발급 방법:

  1. Settings → API Keys
  2. “Generate New Key” 클릭
  3. 키를 안전하게 저장

자세한 문서

→ 질문자가 “Mark as answer” 클릭 → 답변에 ✅ 표시됨 → Discussion 목록에서 “Answered” 배지

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
### 검색 가능한 지식 베이스

**효과적인 Q&A 작성**:
```markdown
✅ 좋은 질문:
제목: React에서 API 호출 시 CORS 오류 해결 방법

본문:
- 명확한 문제 설명
- 재현 가능한 코드
- 에러 메시지 포함
- 시도한 해결책
- 환경 정보

❌ 나쁜 질문:
제목: 안 돼요
본문: API가 작동하지 않습니다.

검색 최적화:

1
2
3
4
5
6
7
8
제목에 키워드 포함:
✅ "Node.js에서 환경 변수 설정하는 방법"
✅ "Docker 배포 시 포트 설정 오류"
✅ "TypeScript 타입 에러 해결"

❌ "질문있어요"
❌ "도와주세요"
❌ "이거 왜 이래요?"

5. Polls (투표)로 의견 수렴하기

Polls 만들기

기본 투표:

1
2
3
4
5
6
7
8
9
10
11
12
13
Category: Ideas

제목: 다음 릴리스에 어떤 기능을 우선 추가할까요?

본문:
v2.1에 추가할 기능을 투표로 결정하려고 합니다!

- [ ] 다크 모드
- [ ] 모바일 앱
- [ ] API v2
- [ ] 실시간 알림

투표는 7일간 진행됩니다. 많은 참여 부탁드립니다! 🗳️

복수 선택 투표:

1
2
3
4
5
6
7
8
9
제목: 어떤 플랫폼을 사용하시나요? (복수 선택 가능)

- [ ] Windows
- [ ] macOS
- [ ] Linux
- [ ] iOS
- [ ] Android

결과를 바탕으로 테스트 환경을 개선하겠습니다.

투표 결과 활용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
제목: [결과] 다음 릴리스 기능 투표

투표 결과:
1. 다크 모드: 234표 (48%)
2. API v2: 128표 (26%)
3. 모바일 앱: 89표 (18%)
4. 실시간 알림: 38표 (8%)

총 489명 참여

결정 사항:
✅ v2.1: 다크 모드 추가
✅ v2.2: API v2 작업 시작
⏰ 모바일 앱은 2025년 Q2에 검토

참여해주신 모든 분께 감사드립니다! 🙏

6. 커뮤니티 모더레이션

모더레이터 권한

1
2
3
4
5
6
7
8
Settings → Moderation

모더레이터는:
✅ Discussion 고정/잠금/삭제
✅ 부적절한 댓글 숨기기
✅ 사용자 차단
✅ 카테고리 이동
✅ Spam 신고 처리

고정 (Pinning)

1
2
3
4
5
6
7
8
9
10
11
중요한 Discussion을 상단에 고정:

1. Discussion 페이지 → "..." → Pin discussion
2. 최대 4개까지 고정 가능
3. 카테고리별로 별도 고정

고정할 Discussion:
- 시작 가이드
- FAQ
- 중요 공지
- 커뮤니티 규칙

예시:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
📌 고정됨

제목: 처음 오셨나요? 여기서 시작하세요!

환영합니다! MyProject 커뮤니티에 오신 것을 축하합니다.

👋 시작하기
1. [설치 가이드](...)
2. [튜토리얼](...)
3. [FAQ](...)

💬 도움 받기
- 질문: Q&A 카테고리
- 버그: Issues 탭
- 아이디어: Ideas 카테고리

📝 규칙
- [커뮤니티 가이드라인](...)
- [행동 강령](...)

Happy coding! 🚀

잠금 (Locking)

1
2
3
4
5
6
7
8
9
10
11
12
13
토론이 과열되거나 해결된 경우:

1. Discussion → "..." → Lock conversation
2. 사유 선택:
   - Off-topic (주제 이탈)
   - Too heated (과열)
   - Resolved (해결됨)
   - Spam

잠금 후:
- 새 댓글 불가
- 기존 댓글 읽기는 가능
- 필요시 다시 unlock

댓글 숨기기

1
2
3
4
5
6
7
8
9
10
스팸이나 부적절한 댓글:

1. 댓글 → "..." → Hide
2. 사유:
   - Spam
   - Abuse
   - Off-topic

→ 댓글이 숨겨지고 "This comment was marked as spam" 표시
→ 관리자는 볼 수 있음

7. 고급 기능

카테고리 자동 전환

Issue → Discussion:

1
2
3
4
5
6
Issue가 질문인 경우:

Issue → "..." → Convert to discussion
→ 카테고리 선택 (Q&A)
→ Discussion으로 자동 이동
→ Issue는 자동 닫힘

Discussion → Issue:

1
2
3
4
5
Discussion에서 버그 발견 시:

"This should be an issue" 댓글
→ 관리자가 Issue로 변환
→ Discussion 링크 유지

레이블 활용

1
2
3
4
5
6
7
8
9
10
11
Discussion에도 레이블 추가 가능:

예시:
- status:in-progress
- priority:high
- help-wanted
- good-first-issue

필터링:
label:"help-wanted" → 도움 필요한 Discussion
label:"in-progress" → 진행 중인 논의

GitHub Actions 연동

새 Discussion 알림:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
name: New Discussion Notification

on:
  discussion:
    types: [created]

jobs:
  notify:
    runs-on: ubuntu-latest
    steps:
      - name: Send to Slack
        uses: slackapi/slack-github-action@v1
        with:
          payload: |
            {
              "text": "New Discussion: $",
              "url": "$"
            }
        env:
          SLACK_WEBHOOK_URL: $

자동 답변 봇:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
name: Auto Reply

on:
  discussion:
    types: [created]

jobs:
  auto_reply:
    runs-on: ubuntu-latest
    steps:
      - name: Welcome Message
        uses: actions/github-script@v6
        with:
          script: |
            github.rest.discussions.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              discussion_number: context.payload.discussion.number,
              body: '환영합니다! 질문에 곧 답변드리겠습니다. 🙏'
            })

8. 실전 활용 사례

오픈소스 프로젝트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
카테고리 구성:
📢 Announcements → 릴리스 공지
💡 Feature Requests → 기능 제안
🙏 Q&A → 사용법 질문
🐛 Bug Reports → Issue로 이동 안내
🙌 Showcase → 사용자 프로젝트
📚 Tutorials → 커뮤니티 튜토리얼
💬 General → 자유 토론

고정 Discussion:
1. 시작 가이드
2. 기여 방법
3. 2024 로드맵
4. FAQ

기업 내부 프로젝트

1
2
3
4
5
6
7
8
9
10
11
12
카테고리:
📢 Team Announcements → 팀 공지
💡 Ideas → 개선 아이디어
🙏 Q&A → 기술 질문
📊 Weekly Updates → 주간 업데이트
🎯 Goals → 분기별 목표

활용:
- 매주 Sprint 회고 Discussion
- 기술 문서 Q&A
- 팀 빌딩 이벤트 공지
- 내부 도구 showcase

학습 커뮤니티

1
2
3
4
5
6
7
8
9
10
11
12
카테고리:
📚 Tutorials → 튜토리얼
🙏 Q&A → 학습 질문
💡 Project Ideas → 프로젝트 아이디어
🙌 Student Showcase → 학생 작품
📝 Study Groups → 스터디 그룹

활용:
- 강의 질문 답변
- 프로젝트 피드백
- 스터디 모집
- 취업 정보 공유

💡 초보자 팁 Discussions가 처음이라면 먼저 다른 프로젝트의 Discussions를 둘러보세요! 카테고리는 5-6개 정도가 적당합니다. 너무 많으면 혼란스러워요. Q&A 카테고리에서는 답변 채택 기능을 꼭 활성화하세요. 나중에 찾기 쉽습니다!


직접 해보기 (25-30분)

실습을 통해 배운 내용을 체화해봅시다!

📝 실습 1: Discussions 활성화 및 카테고리 설정 (10분)

1
2
3
4
5
- [ ] 1. 연습용 리포지토리에서 Discussions 활성화
- [ ] 2. 기본 카테고리 확인
- [ ] 3. "Ideas" 카테고리 추가
- [ ] 4. "Q&A" 카테고리에 답변 채택 기능 활성화
- [ ] 5. 각 카테고리 설명 작성

📝 실습 2: Discussion 작성하기 (10분)

1
2
3
4
5
- [ ] 1. Announcements에 공지사항 작성
- [ ] 2. General에 자유 주제 Discussion 작성
- [ ] 3. Q&A에 질문 작성
- [ ] 4. 질문에 답변 달기
- [ ] 5. 답변 채택하기

📝 실습 3: 투표 만들기 (5분)

1
2
3
4
5
- [ ] 1. 새 Discussion 생성
- [ ] 2. Poll (투표) 추가
- [ ] 3. 투표 옵션 2-4개 작성
- [ ] 4. 다른 계정으로 투표해보기 (가능하면)
- [ ] 5. 결과 확인

📝 실습 4: 관리 기능 사용하기 (5분)

1
2
3
4
- [ ] 1. Discussion 하나를 상단에 고정
- [ ] 2. 댓글 숨기기 기능 테스트
- [ ] 3. Discussion을 Issue로 전환해보기
- [ ] 4. 라벨 추가해보기

실습 완료 후: 이제 프로젝트에 커뮤니티 공간을 만들 준비가 되었습니다!


😰 어려우시다면

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

  1. Discussions와 Issues의 차이가 헷갈리는 경우
    • Issues: 해야 할 작업, 버그, 기능 요청 (닫힘/열림 명확)
    • Discussions: 대화, 질문, 아이디어, 공지 (계속 진행)
    • 간단히: Issues는 TODO, Discussions는 Talk
  2. 어떤 카테고리를 만들어야 할지 모르겠는 경우
    • 처음엔 기본 5개로 시작하세요
    • 필요할 때 하나씩 추가
    • 다른 유명 프로젝트 참고
  3. 언제 Discussion을 사용해야 할지 모르겠는 경우
    • 질문/의견: Discussions
    • 버그/기능: Issues
    • 불확실하면: Discussions 먼저 (나중에 Issue로 전환 가능)
  4. 커뮤니티가 활성화되지 않는 경우
    • 먼저 직접 질문/답변하여 예시 제공
    • 정기적으로 투표나 토론 주제 게시
    • 답변에 감사 인사와 채택
    • 시간이 걸립니다. 꾸준히!
  5. 모더레이션이 부담스러운 경우
    • 소규모 프로젝트는 모더레이션 최소화
    • 명확한 규칙만 있으면 충분
    • Code of Conduct 참고
  6. 복습이 필요하다면
    • Day 71-73: Issues 복습
    • 다른 프로젝트의 Discussions 둘러보기
    • GitHub Discussions 공식 가이드

꼭 기억하세요: Discussions는 커뮤니티를 위한 공간입니다. 완벽하게 시작할 필요 없어요. 천천히 만들어가세요!


정리

완료 체크:

  • Discussions의 개념과 Issues의 차이를 이해했다
  • Discussions를 활성화하고 카테고리를 설정할 수 있다
  • Q&A로 답변을 채택할 수 있다
  • Polls로 투표를 만들 수 있다
  • Discussion을 고정/잠금/숨기기 할 수 있다
  • GitHub Actions와 연동할 수 있다
  • 직접 실습을 완료했다

핵심 요약:

  • 목적: Issues는 작업 추적, Discussions는 대화와 소통
  • 카테고리: Announcements, Ideas, Q&A, General, Show and tell
  • Q&A: 답변 채택으로 지식 베이스 구축
  • Polls: 투표로 커뮤니티 의견 수렴
  • 모더레이션: 고정, 잠금, 댓글 숨기기
  • 통합: GitHub Actions, 라벨, Issue 전환

실전 팁:

  • ✅ 중요한 Discussion은 상단에 고정
  • ✅ Q&A 카테고리에서 답변 채택 활성화
  • ✅ 명확한 카테고리 가이드라인 작성
  • ✅ 정기적으로 인기 질문 정리
  • ✅ 투표로 커뮤니티 참여 유도
  • ✅ 모더레이터 권한을 신뢰할 수 있는 멤버에게
  • ✅ 질문은 Issue보다 Discussion에서
  • ✅ 장기 논의는 Discussion, 단기 작업은 Issue
  • ✅ GitHub Actions로 자동 알림 설정

다음: Day 79 - 팀 협업


이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.