Github 에서 개발 프로젝트 관리하기 (Zenhub 사용기)

jay.ahn 21.10.14
2116 11 4

Github에서 소프트웨어 개발 프로젝트를 관리하기 위한 툴을 소개합니다. 

 

배경

저희 팀은 회사에서 제공하는 Atlassian의 Jira, Bitbucket, Confluence를 사용하여 개발 및 이슈관리를 해왔습니다. 

특히 Jira의 경우는 Agile 방식의 개발을 위한 다양한 기능들을 제공하였고,
JQL (Jira Qeury Language)를 활용하여 다양한 필터와 리포트를 만들어 프로젝트를 관리해오고 있었습니다. 

 

그러던 와중에, 저희가 개발하는 소프트웨어중 많은 부분들을 오픈소스SW로 공개하여 키워가기로 결정을 하면서
Github에서 개발을 진행하기 시작하였고, 결국 모든 코드들과 개발 프로세스를 Github 중심으로 가져가게 되었습니다. 

 

하지만, Github이 제공하는 기본 Project 기능은 간단한 Kanban 스타일의 보드를 제공합니다만,
기존에 저희가 Jira에서 잘 활용하고 있었던 여러 기능들 (Epic/Story기반 이슈관리, Story Point, Agile board, Sprint 관리등)을
Github에서는 찾아볼 수가 없었습니다. 

 

따라서, Github기반으로 개발 프로젝트를 수행할 때 사용 가능한 Jira와 같은 기능들을 제공하는 툴을 찾아보기 시작했습니다. 

이 중에서 Github Project Beta는 나온지 얼마 안되어서 정보가 별로 없어 많은 Trial & Error가 필요해 보여서 제외 시켰고,
Azure DevOps Board와 Zenhub 사이에 고민을 하다가 Zenhub을 선택하여 사용하고 있습니다. 

 

Zenhub 

Zenhub는 Github에서 좀 더 손쉬운 프로젝트 관리를 하기 위한 기능들을 제공합니다.
특히, Github 페이지를 벗어나지 않고 Zenhub의 모든 기능들을 사용할 수 있다는 점을 큰 장점으로 생각했습니다. 

 

또한, 기본 철학이 뭔가 새로운 걸 추가 개발하기 보다는 Github의 기능과 메카니즘들을 100% 활용하고 있으며,
거기에 추가 metadata들을 넣어서 사용자 경험이나 유용한 기능들을 만들어내고 있습니다. 
이러한, Github Native를 최우선으로 하는 점도 큰 장점이 아닐까 합니다. 

 

Zenhub을 사용하시려면 Chrome 혹은 Firefox 브라우저의 extension으로 설치하여 브라우저의 Github 웹페이지에서 직접 사용 가능합니다.
(https://chrome.google.com/webstore/detail/zenhub-for-github/ogcgkffhplmphkaahpmffcafajaocjbd)
설치를 하게 되면 아래와 같이 Github 페이지에 Zenhub라는 메뉴가 추가되어 보입니다. 

 

또 다른 옵션은 별도의 Web App으로도 사용이 가능합니다.
(https://help.zenhub.com/support/solutions/articles/43000010343-accessing-zenhub-on-web-and-mobile)


설치를 하시게 되면 위에 그림과 같이 Github에서 원하는 Repository들을 선택하여 Workspace를 만들어 사용할 수 있습니다.

아래는 실제 저희팀에서 사용하고 있는 Zenhub Workspace 입니다. ^^ 
decapod-development 라는 Workspace를 만들어 사용하고 있는 것을 보실 수 있습니다. 

 

Workspace를 만들게 되면 다음 기능들을 제공합니다. 

  • Board 
  • Report 
  • Roadmap 
  • Milestone 
  • Notification 
  • Workflows 

이 중에서 Board, Report, Workflows에 대한 설명을 드리도록 하겠습니다. 

 

 

Board 

Zenhub Board는 사용자가 단계별 파이프라인을 구성하여 관리 가능토록 해줍니다. 

 

저희 팀에서는 아래 그림과 같이
    New Issues - EPIC - Icebox - Product Backlog - Sprint Backlog - In Progress - Done - Closed
으로 파이프라인을 구성하여 사용하고 있습니다. 

 

생성한 티켓 (이슈)들은 진행 상태에 따라서 해당하는 파이프라인에 위치하게 됩니다.
예를 들어서, 처음 만들어진 티켓은 New Issue에 위치하며, Backlog에 포함시키기로 결정이 되면 Product Backlog로 이동하며,
개발을 위해 Sprint에 포함되게 되면 Sprint Backlog에 위치하게 됩니다.

 

Sprint가 시작이 되어 개발이 시작되는 티켓은 In Progress로 이동하며, 개발이 완료되면 In Review 상태로,
동료들의 Review와 테스트가 완료되면 Done으로 이동이 되게 됩니다. (Jira의 Agile Board와 상당히 유사합니다) 
 

 

 

EPIC - Story (Issue) 체계 

무엇보다 Github가 가지고 있지 않은 Epic 체계를 도입하여 사용할 수 있습니다. 


Epic도 Github Issue중 하나로 등록이 되지만, Zenhub에서는 다음 화면과 같이 다른 티켓 (이슈)과는 다른 형태로 관리되며
Jira와 마찬가지로 Epic에 개발 티켓 (이슈)들을 할당하여 관리가 가능합니다. 


특히, 아래 그림과 같이 Epic 이슈로 들어오면 포함된 개발 이슈들과 진행 현황을 상세하게 한눈에 볼 수 있습니다. 
이런 부분은 잘 활용하면 Epic별 관리 체계를 잘 만들어 갈 수 있을 것 같습니다. 

 

 

이슈 생성

티켓 생성 (이슈 생성)은 Board의 "New Issue" 버튼을 눌러서 생성이 가능합니다.
특히, Github에서 제공하는 Issue Template 기능을 활용하면 용도별로 미리 만들어진 템플릿을 활용하여 손쉽게 생성할 수 있습니다. 

 

아래 그림과 같이 이슈 생성시에  Bug Report, Story, Epic, Feature Request 중 하나를 선택하여 등록 가능합니다.
이와 같이 각 프로젝트별로 필요한 Template을 Github Repository 설정에서 등록하여 사용하시면 됩니다. 

 

또한, 이슈 생성시에 Label, Assignee, Sprints, Estimate, Epics 등을 설정할 수 있습니다. 
특히 Sprints, Estimate, Epics는 Github에서 제공하지 않는 추가 설정값들입니다.


이러한 추가 설정값들을 통해서 Jira와 비슷한 이슈 관리가 가능하게 되며, Story Point (Estimate) 기반으로
각 개발자별, Sprint별로  로 개발량이나 Velocity 측정도 가능해집니다. 

 

Zenhub에서는 Planning을 위하여 Planning Poker를 수행할 수 있는 방법도 제공하고 있습니다
(https://help.zenhub.com/support/solutions/articles/43000620555-planning-poker-in-zenhub

 

아래 그림은 저희 팀에서 생성하여 개발을 진행되고 있는 티켓 (이슈) 입니다. 


Jira와 유사하게 Pipeline에서 해당 이슈의 현재 상태, Assignees, Sprints, Estimate, Epic등이 지정되어 있는 것을 볼수 있습니다. 

 

추가로 Zenhub에서는 이슈를 생성할 때 연관된 다른 이슈와 의존성도 설정이 가능합니다. 
Jira에서처럼 다양한 관계 설정을 할 수는 없고 "Blocking" 이라는 단일 관계로 설정 가능한게 아쉽긴 합니다. 

 

Report 

Zenhub는 다음과 같은 Report 기능을 제공합니다. 

  • Cumulative flow 
  • Control chart 
  • Burndown report
  • Velocity tracking 
  • Release Report 

 

 

 

Workflows 

Zenhub의 가장 흥미로운 기능중 하나가 Workflows 입니다. 우선 자세한 내용은 다음 링크를 참조하시기 바랍니다. (https://help.zenhub.com/support/solutions/articles/43000584210-getting-started-with-workflows-in-zenhub

 

Workflow는 여러개의 Workspace간에 티켓 (이슈) 관리 Automation을 가능케 합니다.
특히, 용도별로 다양한 워크스페이스를 만들고 팀의 개발 관리 프로세스에 따라서,
혹은 여러 팀간에 협업 프로세스에 따라서 Customized된 Workflow를 만들수 있습니다. 

 

아래 그림에서는 개발이 크게 두 분야로 나눠져 있는 것을 볼 수 있습니다.

  • decapod-development
  • tacoplay-development

즉, decapod라는 프로젝트를 개발하는 팀과 tacoplay라는 프로젝트를 개발하는 팀은
각각에 맞는 Workspace를 만들고 팀에 맞게 설정하여 사용하게 되어 있습니다. 

 

하지만, 전체 프로젝트들을 관리하는 입장에서는 두 군데서 일어나는 개발 사항들을 모두 볼 필요가 있습니다.
따라서, Project Overview라는 별도의 Workspace를 만들고
각각의 개발용 Workspace들에서 티켓 (이슈) 상태 변화가 생길때
자동으로 Project Overview에서 볼 수 있도록 구성을 하였습니다.

 

이렇게 되면, 각각의 Workspace에 들어가지 않더라도 project-overview라는 단일 workspace에서 통합된 View를 볼 수 있게 됩니다. 

 

Workflow는 또한 서로 다른 팀간에 협업 프로세스를 자동화 하는데도 활용 가능합니다. 

 

아래와 같이 Product Team, Design Team, Engineering Team이 있을때,
이 세 팀간에 업무수행 절차와 협업을 Workflow 기능을 활용하여 자동화 하여 손쉽게 관리 가능합니다. 

 

(출처: https://help.zenhub.com/support/solutions/articles/43000618772-connect-your-workspaces-with-automated-workflows)

 

 

슬랙 연동 

Zenhub는 Slack연동 기능도 제공합니다.

 

Slack 연동을 하면 해당 채널에 Pipeline의 변화가 있을 때 Notification을 날려줍니다.

저희는 Github-Slack연동을 통해서 PR 등록, Merge, Comment등에 대한 정보를 받고,
Zenhub-Slack을 통해서 티켓들 상태변화에 대한 정보를 받고 있습니다. 

 

 

마지막으로

지금까지 Github기반으로 개발을 하면서, Jira와 유사한 개발/프로젝트 관리기능을 제공하는 Zenhub에 대한 소개를 하였습니다. 


Github이 제공하는 프로젝트 관리 기능에 비해서 훨씬 유용하고 편리한 Agile기반 개발 관리 기능들을 제공하고 있으며,
다양한 Use Case와 사용 방법들을 문서와 비디오로 제공하고 있습니다. 

 

Zenhub 홈페이지에 기능이나 Best practice에 대한 정보가 잘 정리되어 있습니다.
(https://help.zenhub.com/support/home)


특히, Public Repository만 사용하는 경우 무료로 사용 가능합니다.
저희의 경우 오픈소스SW 부분들에 대해서는 누구나 참여할 수 있는 개발체계를 Github-Zenhub 조합으로 만들어 갈 계획입니다. 

 

저희 팀도 이제 Zenhub를 사용하여 개발을 진행한지 얼마되지 않았기 때문에, 시행착오를 통해서 맞춰가고 있습니다. 
아직 Github기준의 프로세스를 만들고 있는 상황이라서, Milestone, Release, Roadmap등은 충분히 활용하지 못하고 있습니다만, 
올해내로 적어도 나름의 Best Practice를 만들어보려고 합니다. 

 

이 글이 Github기반으로 개발을 하시면서 뭔가 아쉬운 기능들이 있었던 분들에게 조금이라도 도움이 되었으면 합니다. 

 

감사합니다. 

jay.ahn 님의 최신 블로그

더보기

관련 블로그