---
description: 3장 JIRA를 이용한 스크럼과 개발 조직, 코드 리뷰 기법
---

# 3장(1) JIRA를 이용한 스크럼 프로젝트 관리

아틀라시안사의 `JIRA`는 버그 트랙킹 시스템에서 시작해서, 이슈나 이슈 기반의 전체적인 프로젝트 관리를 할 수 있게 하는 도구다. 클라우드를 이용한 호스팅 서비스와 설치형 서비스 양 쪽을 모두 지원하며, 설치형 10 사용자, 호스팅형 10$, 100사용자일 경우 4000$이다. JIRA는 이슈 관리 뿐 아니라 소스 코드 관리, CI를 위한 자동 빌드 도구, 팀 채팅 서비스, 코드 리뷰 도구 등의 기능을 제공한다.

## 1.1 가상 프로젝트 <a href="#id-9b7eea9b-2193-4285-88b1-ecbc2941fb76" id="id-9b7eea9b-2193-4285-88b1-ecbc2941fb76"></a>

먼저 서비스의 주요 기능을 정의하고 엑셀로 먼저 정의한다. 개발이나 기획 그리고 UX 사람들과 몇 번의 리뷰를 거치면서 조금 더 상세화해야 한다.

이 때, 두 단계 정도로 나눠서 `Feature(기능)`를 기술하는데, Feature Level 1의 경우에는 일반적으로 생각할 수 있는 기능이다. Feature Level 2에는 상세 기능을 정의하는데, 이 때는 스크럼 방법론의 `사용자 스토리 기술 방법`을 사용한다. ("as a {user} I want to do {something}")

이런 기능 리스트를 정의할 때 중요한 것을 크게 3가지 정도 있다.

* 스토리(Flow, Sequence) : 전체적인 Feature가 스토리 형태로 흐름을 가져야 한다.
* 테스트 가능(Testable)
* 디자인 가능(Designable)

다음으로 UX에 대한 프로토타입을 구현한다. 이러한 UX 프로토타입을 `와이어프레임(Wireframe)`이라고 한다.

## 1.2 JIRA 애자일 보드 <a href="#id-96e1a269-c467-47a4-a721-c38f40ea2e59" id="id-96e1a269-c467-47a4-a721-c38f40ea2e59"></a>

스크럼 애자일 방법론에는 `스크럼 보드`가 있는데, 해야할 일(To do, Backlog), 진행 중인 일(In Progress), 완료된 일(Complete)로 나눠서 각 일(이슈)를 포스트잇으로 만든 후, 진행 단계에 따라 각 단계로 포스트잇을 이동해서 붙이는 방법이다.

이런 스크럼 보드를 웹으로 만든 것이 JIRA의 애자일 보드라는 기능이다. 이 기능을 쓰면 원격지에 있는 팀원까지 스크럼 보드를 공유할 수 있다. 각 해야할 일(이슈)에 대해서 자세한 내용을 Description에 서술해야 한다.

**JIRA 메뉴**

\[Projects] → \[Create Project] : 프로젝트 생성 , \[Agile] → \[Manage Board] → \[Create a Scrum Board] : 스크럼 보드 생성

## 1.3 이슈 종류 <a href="#id-8ee79cdb-f09c-45d0-94e9-f8c448e9b6e5" id="id-8ee79cdb-f09c-45d0-94e9-f8c448e9b6e5"></a>

*   `Epic (에픽)`

    여러 스토리들의 집합. 여러 스프린트에 걸쳐 종료됨. Level 1 Feature가 적합. 에픽을 정의할 때는 사용자 스토리 뿐 아니라 서버 설정이나 디자인 작업등도 해당된다.
*   `Story (스토리)`

    "as a {user}, I want to {do something}"에 해당하는 사용자가 직접 사용하는 기능이다. 이때 Story Point를 입력하여 개발에 걸리는 시간 또는 난도를 설정할 수 있다.
*   `Chore (초어)`

    초어는 개발 해야하는 부분이지만 사용자와 직접적으로 관계되지 않는 개발 내용을 정의한다. (예: Server Logging 구현)
*   `Task (태스크)`

    태스크는 해야 하는 일이지만, 구현에 관련없고, 일정이 없는 경우에 해당한다. (예: 디자인 문서 작성, 기획과 업무 협의)
*   `Issue (이슈)`

    매니저들이 관리하는 항목. (예: 클라우드 계약, 솔루션 결정)
*   `Bug (버그)`

    버그는 테스트 엔지니어에 의해 테스팅 되고 버그로 리포팅된 타입이다.
*   `Sub Task (서브 태스크)`

    스토리나 초어를 개발하기 위해서는 여러가지 실제 개발 작업이 필요하다. 스토리나 초어가 상세한 개발 태스크로 나누어지면, 이를 스토리나 초어 같은 이슈 하위에 Clid Task로 등록할 수 있다. 이 Sub Task는 개별 개발자에게 할당되며, 0.5\~2일 정도에 끝날 수 있는 태스크로 정의되어야 한다.

**JIRA 메뉴**

\[Project] → \[Administration] : 이슈 타입 정의

## 1.4 에픽 등록 <a href="#id-2c12df1e-d9d5-464c-ae69-ffeec997ee72" id="id-2c12df1e-d9d5-464c-ae69-ffeec997ee72"></a>

Feature Level 1을 에픽으로 등록하면 좋다.

**JIRA 메뉴**

애자일 보드 Plan 모드 → \[Create Epic]

## 1.5 이슈 등록과 맵핑 <a href="#id-40696882-5141-482c-a163-d12e4fc77acf" id="id-40696882-5141-482c-a163-d12e4fc77acf"></a>

이슈(Story, Chore, Issue)를 등록한다.

*   `Component (컴포넌트)`

    Component는 시스템의 컴포넌트를 정의한다. 컴포넌트 설계는 Feature가 다 정의된 후 아키텍처 설계를 거쳐서 시스템을 구성하는 컴포넌트를 정의한 후 사용한다.
*   `Priority (우선순위)`

    해당 이슈가 얼마나 중요한지를 나타내는 것으로 Blocker, Critical, Major, Minor, Trivial 식으로 나누어진다.

    * **Blocker** : 해결되지 않으면 프로젝트가 진행될 수 없는 경우
    * **Critical** : 프로젝트 진행은 가능하나 해결하지 않으면 정상적인 서비스 개발이 어려운 경우
    * **Major** : 꼭 개발해야 하는 경우
    * **Minor** : 개발은 해야 하나 없어도 상관없는 경우
    * **Trivial** : 있으나 없으나 크게 상관없는 경우

**JIRA 메뉴**

\[Issues] → \[Create Issue] : 이슈 생성

\[Projects] → 해당 프로젝트 선택 → \[Administration] → \[Components] : 컴포넌트 추가

## 1.6 릴리즈 버전 정의와 맵핑 <a href="#id-0bf3e24e-532e-4895-92f1-924fe4aa01a2" id="id-0bf3e24e-532e-4895-92f1-924fe4aa01a2"></a>

`릴리즈`는 서비스를 작동 가능한 상태로 만드는 것. 즉 운영 서비스로 올리는 것이다. 어떤 기능을 언제 릴리즈할 것인가를 정의하는 것을 `릴리즈 계획(Release Planning)`이라고 한다. 버전 생성 후 애자일 보드에서 이슈들을 드래그 앤 드롭하여 릴리즈 버전에 매핑할 수 있다.

**JIRA 메뉴**

\[Version] → \[Create Version] : 릴리즈 버전 생성

## 1.7 스프린트 계획 <a href="#ecf9d5c1-3280-4610-95ac-f365efd2a69d" id="ecf9d5c1-3280-4610-95ac-f365efd2a69d"></a>

**스토리 포인트 부여**

백로그에 있는 이슈를 클릭하여 `Estimate`라는 항목에서 스토리 포인트를 부여한다.

**스프린트 생성 및 이슈 매핑**

애자일 스크럼 보드에서 `Create Sprint`로 스프린트를 생성한다. 백로그 이슈들을 드래그 앤 드롭으로 스프린트로 이동하여 맵핑한다. 해당 스토리나 초어를 구현하는 데 필요한 서브 태스크들을 정의한다.

**JIRA 메뉴**

이슈 → \[More] → \[Create Sub-Task] : 해당 이슈에 서브 태스크 생성 , \[Assign] : 담당자 할당

## 1.8 스프린트 시작 <a href="#b1c8e49a-0280-4d71-9426-90b7aa516535" id="b1c8e49a-0280-4d71-9426-90b7aa516535"></a>

스프린트가 시작되면 `[Work]` 메뉴에 스크럼 보드가 활성화된다.

**JIRA 메뉴**

애자일 스크럼 보드 → \[Plan] → \[Start Sprint] : 스프린트 생성

## 1.9 스프린트 진행 <a href="#ad3103d4-7101-4e88-bc12-4a24b24e6e50" id="ad3103d4-7101-4e88-bc12-4a24b24e6e50"></a>

**이슈 처리**

이슈에 대한 작업을 시작하면 작업의 상태를 `In Progress`로 변경한다. In Progess에서 작업이 끝나면 `Done`으로 상태를 옮겨준다.

**코멘트를 이용한 진행 상태 추가**

이슈에 코멘트를 적을 때는 내가 휴가를 가도 코멘트 기록만 보고도 인수인계될 정도로 기록하는 것이 좋다.

**해결됨(Resolved) 처리**

워크플로에 따라 `Done`이나 `Resolve`를 선택하면 자동으로 `Resolution`이 선택되도록 설정해주어야 한다.

**워크플로**

JIRA에서는 각각 다른 이슈 타입에 대해서 다르 워크플로를 정의할 수 있도록 지원한다.

**Version Control System 연동을 이용한 이슈별 코드 변경 추적**

SVN이나 Git에 커밋을 할 때 해당 이슈 #을 넣어서 커밋을 하면 해당 이슈에 관련되 소스 코드 변경 부분을 JIRA에서 링크로 해서 코드 변경 부분을 보여준다.

## 1.10 스프린트 종료 <a href="#id-8ec4a2f5-bff9-40a1-a6b4-da96f8e7b6ac" id="id-8ec4a2f5-bff9-40a1-a6b4-da96f8e7b6ac"></a>

이슈들을 진행하고 스프린트가 끝나는 기간이 되면 해당 스프린트를 종료해야 한다. 이때 종료되지 않은 이슈들은 다시 모두 백로그로 내려간다.

**JIRA 메뉴**

애자일 보드 → \[Work] → \[Complete Sprint]

## 1.11 새로운 스프린트 시작 <a href="#id-760e0764-1579-44d8-865c-f973334d3913" id="id-760e0764-1579-44d8-865c-f973334d3913"></a>

새로운 스프린트를 시작하기 전 `스크럼 회고(Retrospective)`를 진행해 지난 스프린트에서 잘한 것, 못한 것, 개선할 것을 논의하여 프로세스를 개선해나가야 한다.

## 1.12 JIRA의 확장 <a href="#e6da7a7e-2b1f-4a7e-85d4-dc4a95d281a7" id="e6da7a7e-2b1f-4a7e-85d4-dc4a95d281a7"></a>

JIRA는 홈 화면에 개인별 또는 프로젝트 별로 `대시보드`를 구성할 수 있다. 다음은 추천항목이다.

* 사용자별 이슈 할당 현황
* Block, Critical, Major 이슈 개수
* 신규 생성 대 해결되는 이슈 그래프(Created vs Resolved Graph)
* 나에게 할당된 이슈
* 내가 모니터링(Watching)하고 있는 이슈
* 다른 프로젝트의 진척 상황
