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