2015년 9월 10일 목요일

칸반에 업무 프로세스 태우기 (딱딱한 JIRA workflow 의 대안)




JIRA에는 workflow기능이 있다. 은행권에서 많이 사용한다는 본격적인 BPM 솔루션에 비할바는 아니지만 간단한 업무 프로세스를 수행하기 위한 목적으로는 충분히 쉽게 만들 수 있고, 사용법도 그리 어렵지는 않다. 그러나 워크플로우가 복잡하다면 사용자들의 머리속에 해당 이슈타입의 아이템이 거치게 되는 워크플로우를 기억하고 있어서 머리에 그릴 수 있지 않은 한 이슈보기 화면에서 상태 옆에 보이는 [워크플로우 보기] 버튼을 눌러서 어느 상태에 있는지 확인해야만 한다. 이렇게 해서는 워크플로우가 가시적이지가 않아 프로세스를 아무리 열심히 최적화 해서 만들었다고 해도 그 효과가 크게 나지 못한다.

실제로 나의 회사에서 유상/무상으로 진행되는 유지보수 프로세스를 JIRA 워크플로우로 구현해서 사용자들(고객서비스 엔지니어)에게 제공했더니 사용하는둥 마는둥하게 되고 기껏 정의해놓은 프로세스가 무용지물이 되는 현상이 발생했었다. 좀더 직관적으로 사용하게 할 방법이 없을까 고민하던 중에 불현듯 JIRA Agile의 칸반보드가 떠올랐다. 칸반보드는 이미 전사로부터 우리 팀(PI/QA)으로 들어오는 요청사항을 관리하기 위한 용도로 만들어서 대시보드화해서 사용하고 있었던지라 만드는 방법은 이미 파악하고 있던 터였다.

칸반에 사내업무인 유지보수 프로세스를 적용하는 순서는 아래와 같이 진행하였다.
1. 현업업무수행자와 업무프로세스 정의(BPMN)
BPMN은 실제로 BPM 솔루션에 동작할수 있는 비즈니스 프로세스를 정의하는 모델링 언어이고, UML을 표준화한 단체인 OMG 표준으로 등록되어있다.
프로세스를 표현해야하는 경우(순차적인 처리) 다방면으로 활용가능하다. 나의 회사에서도 개발방법론에서 요구사항 분석을 하는 방법으로 사용하고 있다.


모델링 툴은 무료로도 사용할 수 있는 좋은 툴이 많이 존재한다.
수 많은 툴중에서 여러 모로 비교해 본 결과로
예쁜 다이어그램으로 효과가 매우 좋은 BizAgi Modeler를 추천한다. (windows환경, 회사에서도 무료로 사용가능하다!)
http://www.bizagi.com/en/bpm-suite/bpm-products/modeler#downloadmodeler

2. 정의한 업무프로세스 최적화(요구사항을 주는 입장에서는 이런저런 내용들을 막 쏟아내기 때문에 시스템 구현입장에서의 최적화가 필요하다고 생각한다. 실제로 칸반으로 만들어보면 컬럼이 8개가 넘어가면 가로폭이 너무 좁아져서 너무 빡박해보이는 느낌이 발생한다. 그리고 업무프로세스가 아무리 복잡하다 하더라도 그렇게 길어져서는 안된다.)

3. JIRA 커스터마이징 : 이슈타입 생성, 커스텀 필드생성, 스크린생성, 워크플로우 정의, JIRA Agile보드생성(Kanban)
Agile보드 생성하는 것은 대시보드 설정하는 것 만큼이나 쉽다. 컬럼을 정의하고 매핑하려고 하는 워크플로우상의 상태를 drag&drop으로 갖다 넣으면 끝난다.

4. 사용자에게 1차 오픈 / 피드백 수집

5. 피드백 반영해서 최종 서비스 오픈 / 사용자 교육
이슈 생성해서 Drag & Drop으로 옮기는 데모를 한번 보여주면 사용자는 바로 이해한다.

6. 프로세스를 탄 아이템 발생해서 데이터가 축적되면 대시보드로 통계데이터 표시

7. 프로세스 재수정 3번으로 돌아가서 반복.(6개월내에 프로세스 수정이 이루어 지지 않으면 프로세스의 생명령이 저하되고 있다는 신호임)


JIRA사용자들의 이야기를 들어보면 커스터마이징 하지 않고 순정상태 그대로 쓰는 경우가 많은 것 같은데 그래서는 JIRA의 강점인 유연성을 느끼기 어렵다. 사용법을 익히는데 약간의 시간이 필요하기는 하지만 한번 만들어두면 두고두고 도움이 되는 것이 업무 프로세스 구현이라고 생각한다.

이 글을 읽는 독자들도 꼭 시도해 보기를 강력히 권한다.

p.s. 업무 수행시 발생되는 데이터, 암묵적인 지식, 형식적인 지식 모든 것을 시스템에 남겨서 특정인에 의존하지 않도록 하는 것이 회사에서 가져야할 시스템에 대한 인식이라고 생각한다. 이런 환경의 구축없이 재택근무, 한 달이상의 휴가, 정보의 축적은 불가능하다고 봐야 할 것이다.


Kanban사용시 주의사항
- 칼럼이 너무 많아지면 보기에 너무 복잡해진다. (5~8개 컬럼이 가장 좋음)
- JIRA Agile은 JIRA의 플러그인으로 JIRA의 반 값으로 구매해야 한다.
- Kanban은 스크럼 보드와 달리 시작일과 종료일이 없는 업무에 적용해야 한다.(ex. 서비스 대응, IT자산관리 등)


태그 :  , , , , ,   With No comments 

2015년 7월 6일 월요일

구글차트를 커스텀 필드로 JIRA에 추가하는 방법




필요요소
JIRA plugin : JIRA Misc Custom Fields (Atlassian에서 제공, Free)


JIRA를 사용하다보면 기본 제공되는 커스텀 필드만으로는 부족함을 느끼게 되는 순간이 온다. 오해를 막기 위해 좀 더 자세히 설명하자면 JIRA 자체에서 제공하는 커스텀 필드에서 제공하는 데이터 타입이 기본적으로 사용하기에는 충분할 만큼 제공되지만 커스터마이징 하다보면 딱 맞는 것이 존재하지 않거나 JIRA 자체에서는 제공할 필요가 없다고 생각하는 것들이다. 이 글에서 언급할 구글 차트를 보여주는 커스텀 필드의 예에서도 JIRA 자체에서 이런 필드를 제공한다면 너무 어느 하나의 목적에 딱 맞는 것이라 일반적인 고객이 사용할 수 어야 하는 범용적인 것들을 만들어야 하는 JIRA의 개발자들 입장에서는 오히려 만들어서는 안 되는 것이라 볼 수 있다. 이렇게도 만들 수 있는 환경을 제공해 준다는 면에서 JIRA의 개발 철학은 또 다른 감동으로 다가온다.

이번에 설명하고자 하는 것은 구글차트가 커스텀 필드로써 화면에 표시되도록 하는 기능이다. 필자는 SW 개발회사의 JIRA 운영자로서 여러 부서의 요구사항을 받고 있다. 그 중 대응 가능한 요구사항은 커스터마이징해서 기능을 추가하고 있다. 이번에 기능 추가를 요청한 부서에서 다음과 같은 요구사항을 전달해 왔다.

1. 트렌드(라인 차트)를 보고 싶음
2. 입력데이터는 (날짜, 비율(%)) 의 리스트 임
3. 어떤 날의 데이터에는 말풍선으로 설명을 넣고 싶음

요구사항의 내용을 잠깐 설명하자면,
제품관련하여 개발한 로직의 성능이 80% 이상이 되어야 하는데
(보고를 위해) 그 성능을 매일 또는 며칠에 한 번씩 검증하고 있으며,
JIRA에 입력하고 싶고 결과도 보여주고 싶은데
입력은 핸드폰을 가지고 해야하므로 최대한 짧고 효율적으로(타이핑 최소화) 가능해야 한다는 것이었다.

그리하여 구현방향은 아래와 같이 정하고 커스터마이징 작업을 시작했다.

입력데이터인 정합성이라는 필드, 는 한 줄 입력 텍스트 형식(text input 1 line),
구글차트가 나와야 할 Trend Chart 필드는 JIRA Misc Custom Fields의 calculated text field로 설정하였고, 입력데이터는 YYMMDD,Percent; 형식으로 입력하도록 했다. 세미콜론(;)으로 key, value 쌍을 구분짓도록 하고 날짜와 비율값은 콤마(,)로 구분하도록 했다.
세미콜론, 콤마를 사용한 것은 입력데이터의 가독성이 그나마 괜찮은 기호라고 생각했기 때문이었다. 딱히 제약사항이 있는 것은 아니니 구현하는 사람의 생각대로 다른 기호를 사용해도 무방하다.

아래는 직접 작성한 소스코드이다. (JAVA 코드임)


흐름을 설명하자면,
구글 차트를 사용하기 위한 설정들을 먼저 해 놓고(L:8~)
입력데이터를 파싱한 후 (L:19~)
라인 차트의 점들을 찍기 위한 구글 차트용 데이터를 만들고 (L:33~)
말풍선 안에 넣을 구글 차트용 데이터를 만들고(L:69~)
말풍선에 넣을 문구에 공백이 있으면 안되서 공백을 더하기(+)로 변환하고 (L:110~)
이렇게 만들어 낸 URL을 img태그의 src로 넣어줌(L:152~)

주의해야 할 점은
calculated text field 는 반드시 문자열 값을 반환해야 한다는 것이다. (다른 타입을 반환하면 아무런 결과가 발생하지 않는다.)
문자열을 반환한다는 것을 확실하게 하기 위해 String.valueOf() 메서드까지 쓴 것을 볼 수 있는데, 이 내용을 JIRA Misc Custom Fields의 다른 타입들까지로 확장하자면 Calculated Number Field는 숫자 타입이 반환되어야 하고 Calculated Date/Time Field은 날짜타입(java.util.Date)되어야 함을 의미한다.
그리고 디버깅을 하기 위해서는 JIRA자체의 로그(atliassian-jira.log)를 확인하면 된다. 화면에 아무런 결과가 나오지 않으면 예외가 발생했다는 것을 의미하는데 이 예외는 JIRA의 예외처리 방식에 따라 로그에 찍혀 나오게 되니 디버깅할 방법이 아주 없지는 않다.

이번에 사용한 구글 차트는 URL 형식으로 보내면 이미지 파일이 보여지는 방식으로 사용하는 구글 이미지 차트이다.(구글에서는 예전 기술이라고 이제 사용하지 말라는 권고를 하고 있기는 하다.) Javascript를 사용하는 다른 방식도 있다. 그리고 라인 차트 외에도 다양한 차트를 제공하므로 일반적인 목적(엑셀에서 제공하는 차트들)이라면 사용할 만한 차트가 있을 것이라 생각한다.

제약사항 :
- 입력 데이터로 쓸 필드가 같은 이슈 유형안에 존재해야 함(정합성이라는 필드가 해당).
- 여러 이슈아이템의 결과로 얻어지는 합계와 같은 데이터를 다룰 수 없음(이 경우에는 이전글인 JIRA Visualization 개선제안 참고요망)
- 같은 날짜인 입력 데이터가 있어서는 안 됨
태그 :  , ,   With No comments 

2015년 5월 28일 목요일

JIRA의 visualization에 대한 개선 아이디어




JIRA의 대시보드와 가젯을 통한 가시화 기능은 정말 편리하다. 
필터를 자기 입맛에 맞게 정의하기만 하면, 가젯에서 필터를 불러들인 후 각종 차트나 테이블, 리스트까지 보여주는 형식도 다양하게 설정이 가능하다. 자동 갱신기능이나 wallboard로 표시해주는 등 사용자를 많이 배려하고 있음이 느껴진다.

하지만, 시간이 지나 JIRA에 적응하고 난 후에는 아쉬운 점들이 눈에 띄기 시작한다. 아쉬운 마음에 플러그인들을 찾아보지만 정작 내가 원했던 형태의 플러그인을 찾을 수 없거나, 찾았다 하더라도 가격이 너무 비싸고 필요하지 않은 기능들까지 제공하고 있어 선뜻 구매하기 어려운 경우도 겪게 된다.

최근에 회사에서 프로젝트 수행 및 모니터링의 수준으로 높이고자 PMO를 운영하기로 결정하여서, 전사차원에서 프로젝트 진행을 관리 및 모니터링 해야할 필요가 생기게 되었다. 일반적인 경우에는 전문적인 PMS 솔루션을 도입하는 방법이 아무래도 편하겠지만, 나의 회사에서는 JIRA를 중심으로 업무시스템을 구성한다는 목표를 가지고 있어서 JIRA를 활용하기로 결정하고 프로젝트를 어떻게 관리하면 좋을지 고민을 시작하게 되었다.

회사 전체의 프로젝트에 대한 통합 view도 있어야 하겠지만, 먼저 개별 프로젝트의 상황을 어떻게 보여줄지부터 시작하기로 했다. 단순하게 생각해보니 프로젝트에는 달성목표가 있고 발생하는 이슈가 있고 리스크가 있었다. (PMBOK에는 더 많은 항목들이 있으나 단순화하여 설명을 돕기 위해 3가지만 다룸)

프로젝트 관리에 사용할 이슈타입으로 PJT_GOAL, Issue, Risk를 만들고 PJT_GOAL에 Issue, Risk를 이슈링크를 통해 연결했다. 여기서 JIRA가 가지는 문제점은 한 화면에서 링크된 이슈에 대한 상세항목까지는 확인이 불가능하다는 점이다. summary나 우선순위정도가 보일뿐이고 그나마 5개가 넘어가면 강제로 접혀서 버튼을 눌러야 모든 링크된 이슈를 확인할 수 있다. 

예전부터 이슈링크에 대한 JIRA 자체 표현의 한계를 느끼고 있던 터라, 이번 기회에 코딩을 조금 하게 되더라도 원하는 모습으로 표현을 해보기로 했다. (떄 마침 상사분이 미국으로 일주일 넘게 다녀오셔야 하는 행운인 상황도 큰 도움이 되었다.)
JIRA가 REST API를 제공하는 것은 진작부터 파악하고 있던 내용이었지만 JIRA에서 어떻게 데이터를 끌어오고 형식은 무엇인지 그리고 간단하게 웹을 통해 UI를 제공할 방법이 있는자가 문제였다. 


가장 많이 사용하는 tomcat이나 nginx, node.js 등 여러 솔루션을 찾을 수 있었는데 예전에 AJAX 개발을 했던 경험이 있어 친숙한 Javascript로 돌아가는 backend 기술인 node.js로 구현을 해보기로 결정했다.

플랫폼 node.js기반에 HTML5로 하기로 결정하니 나머지는 그냥 검색으로 많은 정보를 얻을 수 있었다. 
먼저 JIRA의 REST API를 호출할 방법을 찾아보니 GitHub에서 여러 라이브러리를 찾을 수 있었다. jira-node, node-jira를 찾을 수 있었는데 여기서는 jql 쿼리를 보내고 결과만 받으면 되기 때문에 심플한 jira-node를 사용하기로 했다.


소스코드는 아래를 참조
https://github.com/e-conomic/jira-node


node-jira가 더 많은 API를 지원하고 문서도 좀 더 자세하게 작성되어 있기는 하다. 다시 말하지만, 지금은 그저 JQL로 필터처럼 조건을 JIRA에 보내서 결과를 JSON으로 받기만 하면 되고, 받은 JSON 데이터를 가공해서 원하는 화면의 위치에 표시해 주기만 하면 되므로 jira-node를 사용하였다. 

모든 웹서비스(XML Webservice, REST API)가 다 그렇듯 맨 처음 호출할 때는 시간이 오래걸리지만 2회 이상에서는 그다지 느리지 않게 결과 데이터를 받을 수 있었다. (체감 속도 비교 => 1회차 : 8~10초, 2회차 이상 : 2~3초)

사실 여기서는 backend 기술이라고 부르기도 민망할 정도로 간단하게 끝나는 상황이고, 받은 JSON를 요리조리 가공해서 원하는 view로 웹을 통해 보여주는 작업이 더 시간을 많이 필요로 했다. 

다시 처음의 그림을 가지고 설명하자면,
JQL 쿼리의 결과로 받은 JSON 데이터에서 등급으로 분류하여 왼쪽의 바에 해당 등급의 PJT_GOAL들을 보여주고 클릭하면 그 PJT_GOAL의 상세내용과 이슈링크 되어 있는 Issue, Risk 아이템까지 끌어와서 한 화면에 전부 다 보여주었다. 





다음에 기회가 된다면 직접 작성한 node.js코드와 frontend 코드를 소개하고 싶다. 현재는 프로토타입이라 생각하고 짜임새 있게 코딩된 상태가 아니라서 당장 공개할 수는 없지만, 코드가 정리되는 대로 GitHub를 통해 공개할 생각이다.

JIRA를 2년 넘도록 관리자, 사용자로서 사용해 오면서 항상 아쉬웠던 점이 JIRA안에서 무엇이든 할 수 밖에 없었다는 것이었는데, 이번 기회를 통해서 그 한계를 뛰어넘을 수 있다는 자신감을 가질 수 있었다는 느낌이다. 

JIRA는 매우 훌륭한 솔루션이고 그 유연함은 항상 감동을 안겨주지만 Atlassian 또는 3rd party 제작사에서 채워주지 못하는 부분 또한 있는 것이 현실이다. 나 자신도 JIRA를 커스터마이징 하는 방법은 직접 플러그인을 만드는 방법만 있을 것이라 잘못 생각하고 있었는데, 직접 코딩을 해야 하는 부담은 있지만 데이터만 꺼내서 자신있는 개발언어, 플랫폼에서 자신이 원하는 모습으로 만들어 내는 것도 큰 보람을 느낄 수 있고 오히려 더 효율적이라는 점을 깨달을 수 있었다.

프론트엔드 동작 동영상





태그 :  , , , ,   With No comments 

2015년 5월 23일 토요일

ALM

ALM


현재 회사에서 사용하는 ALM과 관련된 사내시스템에 대한 구성을 정리해 본 자료

상용제품과 오픈소스 솔루션을 엮여서 구성함.


간단히 설명하자면,

이슈관리시스템이자 업무기반시스템으로 Atlassian사의 JIRA제품을 사용하여 업무 커뮤니케이션의 중심으로 삼아 Rawdata를 축적하고,

같은 Atlassian의 Confluence제품을 사용하여 전사차원의 정보 공유를 위한 장으로 활용,

개별 프로젝트를 진행할 때에는 
형상관리용도로 Alfresco Community로 오피스 문서위주의 바이너리 파일을 사용, Stash(Git)로 소스코드관리를 사용함, 
Stash와 연동하여 Jenkins를 통해 자동빌드, 배포관리를 수행하고 jenkins에 sonarqube를 연동시켜 코드 정적분석을 수행함.

그 밖에 사내의 교육 동영상, 버그리포트 동영상등 외부에 공개해서는 안되는 동영상을 사내한정으로 스트리밍으로 제공하기 위한 red5도 사용함.

상용제품 : JIRA(플러그인: JIRA Agile, JIRA Service Desk, Structure, TEMPO), Confluence, Stash
freeware : SourceTree, HipChat
오픈소스 : Alfresco Community, sonarqube, red5

실제로 동작하는 모습은 아래의 동영상과 실제로 거의 유사함

태그 :  , , , , , , , , , , ,   With No comments 

2015년 5월 17일 일요일