GitHub ISSUE와 PR 템플릿

artp·2024년 10월 12일

git&github

목록 보기
4/18
post-thumbnail

팀 프로젝트를 진행하며 다양한 문제에 직면했습니다. 그중에서도 작업 관리의 어려움팀원 간 커밋/병합 충돌이 가장 큰 문제였습니다.

  • 작업이 체계적으로 관리되지 않아 진행 상황을 한눈에 파악하기 어려웠고, 누락되거나 중복된 작업이 발생하기도 했습니다.
  • 협업 과정에서 커밋이나 병합 과정에서의 충돌이 빈번하게 일어나는 문제가 있었습니다.

이러한 문제를 해결하기 위해 팀원들과 논의한 끝에 GitHub 이슈 템플릿과 PR 템플릿을 만들어 활용하기로 했습니다. 이를 통해 프로젝트 진행 상황을 체계적으로 관리하고, 작업 현황을 쉽게 공유할 수 있는 환경을 마련하고자 했습니다.

또한, 이슈 기반 브랜치 전략을 채택하여 충돌 문제를 최소화하기로 했습니다. 이슈를 생성한 뒤, 해당 이슈에 대응하는 브랜치를 만들어 작업하는 방식으로 팀원 간 작업 영역을 명확히 구분하고자 했습니다.

이슈 템플릿 생성

  • 리포지토리 - Settings - General - Features - Issues에서 Set up templates 선택
  • Custom template을 선택합니다.
  • Preview and edit을 선택합니다.
  • 연필 아이콘을 선택하여 템플릿을 편집합니다.
  • 템플릿 편집 후 Propose changes를 선택합니다.
  • Commit changes를 선택하여 템플릿 생성을 완료합니다.
  • 리포지토리에서 확인해 보면, .github/ISSUE_TEMPLATE 폴더에 이슈 생성 템플릿 파일이 생성된 것을 확인할 수 있습니다.

템플릿을 사용하여 새로운 이슈 생성

  • 리포지토리 - Issues - New issue 선택
  • Get started를 선택합니다.
  • 필요한 내용을 작성한 후, Submit new issue를 선택하여 이슈 생성을 완료합니다.

이슈 브랜치(Create a branch) 생성

  • 이슈에서 Development의 Create a branch를 선택합니다.
  • 이슈번호 - 이슈명 규칙으로 브랜치명이 정해집니다.
  • Create branch를 선택하여 이슈 브랜치 생성을 완료합니다.
  • 팝업의 명령어를 복사하여 로컬에 이슈 브랜치를 가져올 수 있습니다.
  • 인텔리제이 터미널에 복사한 명령어를 붙여넣어 로컬에 이슈 브랜치를 가져왔습니다.

이슈 브랜치 삭제

작업을 완료한 이슈 브랜치를 삭제합니다.
이슈 브랜치를 삭제하는 이유는 브랜치 관리의 효율성을 높이고, 깔끔한 프로젝트 상태를 유지하기 위함입니다. 아래는 이슈 브랜치를 생성, 작업, 병합, 삭제하는 전체적인 워크플로입니다.

이슈 브랜치 작업 및 삭제 워크플로

  1. 이슈 브랜치 생성

    • GitHub 또는 로컬에서 브랜치를 생성합니다.
    • 브랜치 이름은 이슈 번호와 작업 내용을 명시적으로 포함합니다.
      git checkout -b feature/1-issue-로그인-기능-구현
  2. 브랜치에서 작업

    • 변경 사항을 추가하고 커밋합니다.
      git add .
      git commit -m "[Feat] static 폴더에 test.txt 추가 (#1)"
  3. 작업 완료 후 원격 저장소에 푸시

    • 브랜치를 원격 저장소로 푸시합니다.
      git push origin feature/1-issue-로그인-기능-구현
  4. Pull Request(PR) 생성 및 병합

    • GitHub에서 해당 브랜치로 PR을 생성합니다.
    • 리뷰 후 문제가 없으면 메인 브랜치에 병합합니다.
  5. 브랜치 삭제

    • 병합 후 원격 브랜치 삭제:

      • PR 병합 시 GitHub에서 자동으로 브랜치를 삭제하는 옵션을 활성화하거나, 수동으로 삭제합니다.
        git push origin --delete feature/1-issue-로그인-기능-구현
    • 로컬 브랜치 삭제:

      • 원격 저장소에서 브랜치가 삭제된 후, 로컬에서도 삭제합니다.
        git branch -d feature/1-issue-로그인-기능-구현
      • 병합되지 않은 브랜치를 강제로 삭제하려면 -d 대신 -D를 사용합니다.
        git branch -D feature/1-issue-로그인-기능-구현

이슈 브랜치를 삭제하는 이유

  1. 불필요한 브랜치 정리:

    • 작업이 끝난 브랜치를 그대로 두면 프로젝트 저장소가 혼란스러워질 수 있습니다.
    • 오래된 브랜치가 남아 있으면 의도치 않은 실수로 작업에 영향을 줄 수 있습니다.
  2. 협업 효율성 향상:

    • 삭제를 통해 팀원들이 더 이상 필요하지 않은 브랜치를 오해하여 작업하거나 다시 사용하는 실수를 방지할 수 있습니다.
  3. CI/CD 성능 최적화:

    • 많은 브랜치가 남아 있으면 CI/CD 도구가 불필요한 브랜치를 분석하거나 실행하는 경우가 발생할 수 있습니다.

주의사항

  1. 병합 여부 확인:

    • 로컬에서 브랜치를 삭제하기 전에 작업 내용이 메인 브랜치 또는 다른 브랜치에 병합되었는지 확인해야 합니다.
      git branch --merged
      병합되지 않은 브랜치를 실수로 삭제하면 작업이 손실될 수 있습니다.
  2. 백업 필요 시:

    • 삭제 전, 작업 내용이 필요할 가능성이 있다면 원격 저장소 또는 로컬에서 태그를 추가해 백업합니다.
      git tag backup-feature-issue-1

PR 템플릿 생성

  • default(main) 브랜치의 .github 폴더에 PR 템플릿 파일을 생성합니다.
  • 작성을 완료했으면, Commit changes...를 선택하여 PR 템플릿 생성을 완료합니다.
## 작업 개요
<!-- 간단한 작업 개요를 작성해 주세요 -->

## 작업 내용
<!-- 수행한 작업의 주요 내용을 정리해 주세요 -->
- [ ] 항목 1  
  - 해결한 내용: <!-- 상세 설명 작성 -->
- [ ] 항목 2  
  - 해결한 내용: <!-- 상세 설명 작성 -->

## 관련 이슈
<!-- 이 PR이 해결하거나 관련된 이슈 번호를 작성해 주세요 -->
- 이슈 번호: [#](예: #1)

## 리뷰 요구사항 (선택)
<!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해 주세요 -->
- 예: 이 부분의 로직이 적절한지 확인 부탁드립니다.

  • 이슈1 브랜치를 로컬에 가져와서 작업 후 커밋/푸시를 진행했습니다.
  • PR을 진행합니다.
  • PR 템플릿이 잘 적용되어 있는 것을 확인할 수 있습니다.
  • Merge pull request를 선택합니다.
  • Confirm merge를 선택합니다.

커밋 메시지, PR 메시지에 이슈번호 작성

커밋 메시지에 이슈번호 작성

  • 커밋 메시지에 이슈번호를 작성하면, 작업 히스토리 관리 / 특정 커밋이 어떤 이슈를 해결하려고 작성된 것인지 명확히 알 수 있습니다.
  • 커밋 메시지에 이슈번호를 포함하면, GitHub에서 커밋 히스토리를 통해 이슈와 관련된 모든 변경 사항을 빠르게 확인할 수 있습니다.
  • [작업 유형] 작업 내용 (#이슈번호) 형식을 사용하는 것이 일반적입니다.
"git commit -m [Add]: 회원가입 로직에 이름 필드 추가 (#4)"

PR 메시지에 이슈번호 작성

  • PR 메시지에 이슈번호를 작성하면, 해당 PR이 어떤 이슈를 해결하려는 것인지 명확히 전달할 수 있습니다.
  • Closes #이슈번호와 같은 형식을 사용하면, PR이 병합(merge)된 후 GitHub가 자동으로 해당 이슈를 닫아줍니다.
  • PR 메시지에 작업 내용을 상세히 작성하면 리뷰어와 팀원들이 작업 의도를 더 쉽게 이해할 수 있습니다.
## 작업 개요
<!-- 간단히 어떤 작업인지 작성해 주세요 -->
회원가입 로직에서 이름 필드를 추가하여 데이터 누락 문제를 해결합니다.

## 작업 내용
<!-- 수행한 작업의 주요 내용을 정리해 주세요 -->
- `JoinDto`에 이름 필드 추가
- `JoinService`에서 이름 필드 처리 로직 구현
- 관련 테스트 코드 수정

## 관련 이슈
<!-- 이 PR이 해결하거나 관련된 이슈 번호를 작성해 주세요 -->
Closes #4

PR 메시지 작성 시 주의사항

  1. Closes 키워드 사용

    • Closes #이슈번호를 사용하면, PR 병합 시 해당 이슈가 자동으로 닫힙니다.
    • 이외에도 Fixes #이슈번호, Resolves #이슈번호 등의 키워드도 사용할 수 있습니다.
    • #이슈번호만 작성해도 자동 연결 및 닫기가 가능하지만, Closes 키워드를 사용하면 더 명확하게 의도를 전달할 수 있어 협업 시 유용합니다.
  2. 작업 내용 구체화

    • 주요 작업 내역을 항목별로 나누어 명확히 작성합니다.
    • 각 작업이 어떤 문제를 해결했는지 또는 어떤 기능을 추가했는지 설명합니다.
  3. 팀원과 리뷰어 배려

    • 작업 개요와 관련 이슈를 명확히 작성해, 리뷰어가 작업 의도를 빠르게 이해할 수 있도록 돕습니다.

예시 PR 메시지

## 작업 개요
회원가입 로직에 이름 필드를 추가하여 데이터 누락 문제를 해결합니다.

## 작업 내용
- `JoinDto`에 이름 필드 추가
- `JoinService`에서 DTO 생성 시 이름 필드 처리 로직 구현
- 관련 테스트 코드 수정

## 관련 이슈
Closes #4

profile
donggyun_ee

0개의 댓글