이 페이지의 내용은 간트캘린더 / 데코레이터 플러그인 한국어 커스터마이즈 버전의 구 버전에 대한 설명입니다.
이 페이지는 개발 히스토리 관리 차원으로 유지되는 오래된 문서입니다. 구 버전은 예상치 못한 버그가 존재할 수 있으므로, 2차 커스터마이징한 최신 버전 사용을 강력히 권장합니다.
우연한 기회에 원 저작권자와 Shibuya.trac 에 제가 작업한 결과물을 contribute 할 계기가 생겨
GanttCalendarPlugin 한국어 커스터마이즈 버전을 base로
Trac 0.12 전용으로 GanttCalendarPlugin 국제화 버전 pilot projcet 개발을 완료하게 되었습니다.
의사소통의 어려움으로 우여곡절이 많았지만 좋은 결과가 있기를 바랍니다.
그리고, Trac API 인 parse_date() 함수 오작동으로 인해 한국어 환경에서 Trac 사용이 불편한 점은
해당 티켓(http://trac.edgewall.org/ticket/2182) 의 Owner 인 담당 committer 가 Shibuya.trac의 회원이여서
그리고, 리포트에 아이콘을 표시해 주는 Decorator Plugin도 같이 한글화 하였습니다.
한글화 하면서 DateField Plugin을 대체할 목적으로 DateField 플러그인 소스 코드 일부를 머지하여
DateField 플러그인 사용 시 불편했던 날짜 포맷 처리을 자동 인식하도록 커스터마이징 하였습니다.
-- 2010.4.16 추가 : 스크린 샷 변경 함 -- 2010.8.12 추가 : Trac 0.12 용 스크린 샷 추가 함
. 로케일 관련 오류 패치
. UI 관련 버그 패치 / UI 커스터마이징
. 간트 차트 확대, 축소 기능 추가
. 간트 차트, 캘린더 단축키 추가
. 한 주의 시작 요일 변경 기능 추가
. 날짜 포맷 변경 기능 추가
. Complete by Close 새로 작성
. 필드값 검증(Ticket Validator) 기능 추가
. 타임 트래킹 플러그인 연동 기능 추가
. 필터 작동 버그 및 기타 버그 패치
. 한 주의 시작 요일 변경 기능 추가
. Gantt with Query 필터 관련 버그 패치
. Trac 0.12 용어 반영 / 한글 용어 정리 (Redmine 한글 용어 참고 함)
. 2013년 ~ 2015년 우리나라 휴일 추가
. 커스터마이징
간트 차트, 캘린더의 티켓, 마일스톤 풍선 도움말 팝업 UI 통일시킴
풍선 도움말에 상태(Status), 해결방법(Resolution), 우선순위(Priority) 항목 추가
(UI 통일을 위해 캘린더 풍선 도움말에 진척율(Complete) 항목도 추가)
(추가된 항목은 Trac Decorator Plugin 과 연동하여 아이콘 표시 되도록 함)
간트 차트 마일스톤 링크, 풍선 도움말 추가 - IE 에서 마일스톤 풍선 도움말 가려짐. (known issue)
캘린더 마일스톤 풍선 도움말에 아이콘 추가
풍선 도움말에 close한 티켓 구분 가능하도록 수정
간트 차트의 bar 에 tooltip 추가
간트 차트의 bar 의 티켓 제목과 티켓 상태 표시되는 부분에 tooltip 추가
간트 차트, 캘린더 폰트 키움, margin 추가
간트 차트 정렬기준 디폴트 값을 마일스톤으로 변경
캘린더 "close한 티켓 포함" 옵션 추가
간트 차트, 캘린더 MILESTONE_VIEW 권한 체크 추가
* r15~r18 은 피곤할 때 올려서 커밋 로그에 영문 관련 오타가 있는데 assembla 는 로그 수정이 안되네요 ...
6단계 (줌 모드 1 ~ 6) 확대/축소가 가능하도록 기능 추가 (줌 기본 모드 기본값: 3)
zoom in/zoom out 아이콘은 Redmine 에서 가져 옴.
zoom in/zoom out 아이콘을 클릭하면 확대/축소가 가능하고
현재 모드가 숫자로 zoom in/zoom out 아이콘 사이에 표시된다.
아이콘 사이에 있는 현재 모드 숫자를 클릭하면
줌 기본 모드 기본값이나 trac.ini 에서 미리 설정한 모드로 전환하도록 구현함.
. 간트 차트, 캘린더 단축키(accesskey) 추가
간트 차트 - alt + (shift) + i,j,k,l,m,n
확대 (zoom in) - alt + i (IE) / alt + shift + i (firefox)
축소 (zoom out) - alt + k (IE) / alt + shift + k (firefox)
기본 모드(normal) - alt + shift + n (firefox) / IE 지원 안함
이전달 이동 (previous month) - alt + j (IE) / alt + shift + j (firefox)
다음달 이동 (next month) - alt + l (IE) / alt + shift + l (firefox)
이번달 이동 (current month) - alt + shift + m (firefox) / IE 지원 안함
캘린더 - alt + (shift) + j,l,m
이전달 이동 (previous month) - alt + j (IE) / alt + shift + j (firefox)
다음달 이동 (next month) - alt + l (IE) / alt + shift + l (firefox)
이번달 이동 (current month) - alt + shift + m (firefox) / IE 지원 안함
. 간트 차트 줌 기본 모드, 티켓 제목 표시 여부를 trac.ini 파일에서 설정이 가능하도록 함.
ticket_summary, zoom_mode 옵션 추가 함
* 몰아서 커밋하다 보니 이번에도 r20 커밋 로그에 오타가 있네요 ( 첫 줄 2010.5.5 -> 2010.5.10 으로 교정 )
역시나 assembla 는 로그 수정이 안되 불편하네요 ...
. 타임 트래킹 플러그인 연동 기능 추가
Timing And Estimation Plugin / TracHours Plugin 데이터 지원
ticket_custom 테이블에서 소요시간(Total Hours), 추정시간(Estimated Hours)를 읽어
간트 차트, 캘린더에 소요시간, 추정시간, 소요시간 합계, 추정시간 합계를 표시하도록 기능 추가
소요시간이 모두 NULL (None)인 경우 화면 출력 안하도록 함.
간트캘린더 플러그인 한국어 커스터마이즈 버전 Trac 0.12 호환 개선 패치 (Trac 0.11 환경에서는 해당 사항 없음)
. 소스 코드 정리
. Gantt with query - summary 필터 잘못 표시 되는 문제 수정 (r21 에서 추가한 기능으로 인해 발생한 문제 해결)
. Gantt with query - 필터의 조회하기 버튼 삭제
. Gantt with query - restrict_owner 옵션이 true 일 경우 owner 필터를 drop-down 하도록 기능 추가
. Gantt with query - 필터 항상 펼쳐지도록 수정
. 기능 한글화
. 달력(datepicker) UI 를 DateField 플러그인 UI 와 비슷하게 수정
. 달력(datepicker) UI 한글화 / 달력(datepicker) 아이콘 추가
. 간트캘린더 플러그인 / 마일스톤에 달력(datepicker) 표시되게 기능 추가
. 달력(datepicker) 날짜 포맷을 자동으로 읽어오게 기능 추가
. 달력(datepicker) 과 GanttCalendar 플러그인의 시작 요일이 일치하게 기능 추가
. holiday table index 생성 처리 방법 개선
. resolution Filter 오작동 하는 문제 수정
. 간트 차트, 캘린더 풍선 도움말 개선 - min-width IE6 Hack 적용
. 간트 차트 바(bar) 상단의 티켓 제목 표시 개선 - 줄 밀리는 현상 제거
. ticket_summary -> show_ticket_summary, zoom_mode -> default_zoom_mode 로 변경
. 간트 차트 - '티켓 제목' -> '티켓 제목 표시', '티켓 상태' -> '티켓 상태 표시' 로 변경
. 간트 차트, 캘린더 풍선 도움말 가독성 개선
. 간트 차트 바(bar) 상단 티켓 제목 표시 및 툴팁의 가독성 개선
. 간트캘린더 플러그인 한국어 커스터마이즈 버전 (r46) 을 base 로 국제화 버전 pilot 개발
. Trac 0.12 전용 버전
. babel 을 통한 다국어 환경 i18n / i10n 적용 (한국어 / 일본어 / 영어 기본 지원)
. 다국어 환경을 위해 UI 소폭 수정 (한글 용어 추가/변경 및 글자 자리수 변경)
- 풍선 도움말에서 DecoratorPlugin 연동 기능 삭제
- 간트 차트 좌측 티켓 제목 출력 자리수 변경 (10 자 -> 14 자)
- 기준일, 풍선 도움말 indent 삭제
- 간트 차트, 캘린더 좌측 상단의 '소요시간 합계' -> '소요시간', '추정시간 합계' -> '추정시간' 으로 변경
- 휴일 테이블 생성 관련 한글 용어 추가
- trac.ini 설정 -- 2010.5.5 추가 : 시작 요일 변경 관련 내용 추가 및 한글 용어 변경 함. -- 2010.5.10 추가 : 줌 기본 모드, 티켓 제목 표시 옵션 관련 내용 추가 함. -- 2010.7.14 추가 : 필드값 검증 (Ticket Validator) 관련 내용 추가 함. -- 2010.7.20 추가 : 데코레이터 플러그인 한국어 커스터마이즈 버전 관련 내용 추가 함. -- 2010.11.21 추가 : ticket_summary -> show_ticket_summary, zoom_mode -> default_zoom_mode 로 변경 함.
complete_conditions 항목에는 티켓을 close할 때, 진척율을 100%로 자동 변경할
해결방법들(Resolutions)을 설정합니다. (한글로 된 Resolution 도 정상 작동합니다)
일요일부터 시작하는 시작 요일을 월요일로 변경하려면 first_day = 1 로 변경합니다.
기타 다른 요일로 변경하려면 0 ~ 6 사이 값 중에서 선택하여 설정합니다. (디폴트 값: first_day = 0)
(아이콘 파일을 과다하게 추가하면 웹브라우저에서 화면 갱신이 느려질 수 있으므로,
필요한 아이콘만 선별하여 추가해야 합니다 !!!
특히, 오래된 성능이 낮은 PC 나 IE 6 처럼 자바스크립트 처리가 느린 웹브라우저 환경에서는
아이콘 표시에 클라이언트 PC 의 CPU 부하가 높을 수 있습니다.)
- Apache 데몬 restart
변경 사항을 반영하기 위해 Apache 데몬이나 tracd 데몬을 restart 합니다.
- 휴일 테이블 생성
마지막으로 TRAC_ADMIN 권한을 가진 계정으로 로그인 하여 휴일 테이블을 생성하면
2010년 ~ 2015년 우리나라 휴일이 자동 등록되고 화면에 표시가 됩니다.
휴일 테이블 생성 이후에 휴일을 추가/삭제할 수 있으며, 등록된 휴일은 간트 차트와 캘린더에 표시가 됩니다.
휴일 표시 기능이 필요 없거나, 휴일 테이블 생성 시 에러가 발생하는데 문제를 해결할 수 없다면
휴일 테이블 생성 안해도 간트 차트와 캘린더 사용에는 문제가 없습니다. ( 대신에 휴일 표시 안됨 )
- 프린터 설정
정상적인 프린터 출력을 위해서 웹 브라우저 설정을 변경해야 합니다.
- 커스터마이징 한 기능 설명 (고급 사용자 용) -- 2010.7.20 추가 : 데코레이터 플러그인 한국어 커스터마이즈 버전 관련 내용 추가 함.
간트 차트에서 zoom in/zoom out 아이콘을 클릭하면 6 단계 내에서 확대/축소가 가능하고,
현재 모드가 숫자로 zoom in/zoom out 아이콘 사이에 표시됩니다.
현재 모드를 표시하는 아이콘 사이의 숫자를 클릭하면
줌 기본 모드 (trac.ini 에서 default_zoom_mode 항목에 설정한 모드) 로 전환하도록 구현해 두었습니다.
사용의 편리를 위해 간트 차트와 캘린더에 단축키를 추가하면서
개발자들이 방향키로 사용하는 i,j,k,l 을 직관적으로 매핑해 두었습니다.
(단축키는 브라우저 설정이나 설치 환경에 따라서 작동 안할 수 있습니다.)
간트 차트 - alt + (shift) + i,j,k,l,m,n 상 - zoom in - alt + i (IE) / alt + shift + i (firefox) 하 - zoom out - alt + k (IE) / alt + shift + k (firefox) 좌 - 이전달 이동 - alt + j (IE) / alt + shift + j (firefox) 우 - 다음달 이동 - alt + l (IE) / alt + shift + l (firefox)
기본 모드 (normal) - alt + shift + n (firefox) / IE 지원 안함
이번달 이동(current month) - alt + shift + m (firefox) / IE 지원 안함
캘린더 - alt + (shift) + j,l,m 좌 - 이전달 이동 - alt + j (IE) / alt + shift + j (firefox) 우 - 다음달 이동 - alt + l (IE) / alt + shift + l (firefox)
이번달 이동 (current month) - alt + shift + m (firefox) / IE 지원 안함
Redmine UI 를 참고하여 간트 차트 bar 와 풍선도움말에 티켓 상태와 진척율이 표시되도록 기능을 추가하면서
close 한 티켓의 경우, 진척율 업데이트가 제 때 안 이루어지면 혼동이 올 수 있으므로
이미 종료한 업무에 대해서는 진척율이 표시되지 않도록 하였습니다.
close 한 티켓은 진척율(Complete) 대신에 해결방법(Resolution) 이 표시됩니다.
( 다만, 간트 차트 bar 는 빨간색으로 지연되고 있는 것으로 보여질 수 있습니다. )
종료한 업무에 대해 진척율이라는 숫자를 무시하자는 접근 방식입니다.
개인적으로 진척율이라는 숫자 자체는 의미가 없다고 생각하는 편입니다.
개개인의 진척율 판단 기준이 서로 달라 숫자 자체의 변별력이 떨어지는데다 많은 프로젝트에서 보고용 진척율은 허위 숫자로 기재하고, 실제 진척율은 별도 관리하는 경우가 빈번합니다.
다만, 비 개발 조직과 커뮤니케이션하기 위해서 0%, 25%, 50%, 75%, 100% 수치 정도는 의미가 있어 보입니다.
프로젝트에서 진척율이라는 단편적인 숫자만으로 개발자를 평가하거나 실적을 달달 볶는
마이크로 매니저가 존재하면 할수록 진척율을 허위로 기재할 가능성이 높아짐을 유념해 주십시오.
엄밀히 따지면 개발자가 진척율을 허위로 기재하는 일 보다는
매니저 급에서 진척율을 허위로 보고하는 일이 더 자주 발생하고 더 큰 문제이긴 합니다.
그래서, 진척율이라는 숫자 자체를 너무 신뢰하면 안된다고 생각합니다.
이러한 진척율 이라는 숫자의 변별력이 떨어지는 점을 보완하기 위해서
타임트래킹 플러그인에서 입력한 소요시간, 추정시간을 같이 출력하도록 기능을 추가하였습니다.
간트 차트와 캘린더의 풍선도움말 UI 가 서로 달라 일관성이 부족하고
우선순위와 상태, 해결방법 같은 중요 정보가 표시 되지 않기에 (캘린더 풍선 도움말에는 진척율 표시 안 됨)
간트 차트와 캘린더의 풍선도움말 UI 를 통일 하면서 (우선순위, 상태, 해결방법, 진척율 항목 추가)
간트 차트 bar 에 추가한 티켓 상태/진척율(해결방법) 이 표시 되도록 한 구조를
동일하게 적용하여 간트 차트/캘린더 풍선도움말 과 간트 차트 bar 간 의 일관성을 유지 시켰습니다.
open 된 티켓은 상태/진척율이 시작일 옆에 표시되도록 하였고
close 한 티켓은 상태/해결방법이 완료기한 옆에 표시되도록 하여 한 눈에 알아볼 수 있도록 하였습니다.
Trac 설치 시 기본 생성된 리포트에는 시작일, 완료기한, 진척율 항목이 표시되지 않습니다.
다음 내용을 참고하여 리포트 SQL 문을 수정해야 첨부한 이미지 처럼 제대로 표시가 됩니다.
SELECT
.
. a.value AS 시작일, c.value AS 완료기한, cmp.value AS complete,
.
.
FROM ticket t
.
. LEFT JOIN ticket_custom a ON a.ticket = t.id AND a.name = 'due_assign' LEFT JOIN ticket_custom c ON c.ticket = t.id AND c.name = 'due_close' LEFT JOIN ticket_custom cmp ON cmp.ticket = t.id AND cmp.name = 'complete'
.
.
.
데코레이터 플러그인을 설치하면 리포트에 아이콘이 표시되어 리포트 보기가 한결 수월하지만
정작, 리포트에서 활용도가 높고 중요한 기능은 아이콘 표시보다 csv 파일 생성 기능입니다.
Trac 0.11/0.12 버전에서 생성한 csv 파일을 MS 엑셀에서 읽으면 한글이 깨져 보입니다.
이 문제를 해결하려면 아래 글을 참고하여 Trac 소스를 직접 수정해야 합니다.
첫째, 간트 차트, 캘린더 데이터 조회 시 엉뚱한 데이터 조회
둘째, 로케일에 따라 간트 차트 기준일자 변경, 휴일 설정 추가/삭제 시 날짜 관련 에러
셋째, 휴일 테이블 생성 이후 로케일 변경 시 휴일 표시 오작동
넷째, 휴일 테이블 생성 시 기본 휴일 insert 할 때 유니코드 디코딩 관련 에러
일본 로케일에서 사용하면 별다른 문제없이 작동합니다.
그러나, 일본 이외 로케일에서 사용하려면 소스 수정이 불가피 합니다.
첫번째, 간트 차트, 캘린더 데이터 조회 시 엉뚱한 데이터를 조회했던 이유는
trac 에서 제공하는 parse_date() 와 format_date() 함수를 잘못 조합하여 사용했기 때문입니다.
parse_date() 함수는 유니코드로 된 날짜 데이터를 입력 받아서
설정된 로케일 또는 ISO 포맷에 유효한 형태의 날짜 데이터인지 체크한 후
정상적인 날짜 데이터 이면 datetime 타입으로 리턴 합니다.
format_date() 함수는 datetime 타입의 날짜 데이터를 입력 받아서
설정된 로케일의 날짜 포맷 유니코드로 리턴 합니다.
예를 들어 2010/02/01 ~ 2010/02/28 일 까지의 데이터를 조회할 경우
원래 기대한 결과는 로케일 구분 없이 2010/02/01 ~ 2010/02/28 일 까지 조회이지만
조회할 날짜를 ISO 포맷으로 변환한 후
format_date( parse_date( u'2010-02-01')) 형식으로
SQL 문에서 사용할 날짜 범위를 입력하기 때문에
무조건 자기 로케일에 맞는 날짜 포맷으로 변환하여 DB 를 조회하게 됩니다.
영국 로케일에서는 '01/02/2010' ~ '28/02/2010' 까지 조회
미국 로케일에서는 '02/01/2010' ~ '02/28/2010' 까지 조회
한국 로케일에서는 '2010-02-01' ~ '2010-02-28' 까지 조회
일본 로케일에서는 '2010/02/01' ~ '2010/02/28' 까지 조회
하는 식으로 로케일에 따라 엉뚱한 데이터를 조회하게 됩니다.
그 후, SQL 쿼리로 조회된 결과를 parse_date() 로
자기 로케일에 맞는 날짜 포맷인지 데이터 검증 처리를 하게되는데
간트캘린더 플러그인 데이터 저장 형식이 YYYY/MM/DD 이므로
일본 로케일 아니고서는 모두 에러로 처리해 버리겠지요 ...
( 물론, 일본 로케일이 아니면 날짜 검증할 데이터 자체가 select 되지도 않습니다 )
결과적으로 일본 로케일에서만 정상 작동하게 됩니다.
해당 오류는 trunk 뿐만 아니라 branch 에 있는 모든 소스에서 동일하게 발생합니다.
( branch 의 0.10 용 소스 제외 )
단순히 코드상의 실수라기 보다는 설계상의 미스로 보입니다.
년도가 뒤에 붙는 스트링 타입의 날짜 포맷은 SQL 로 정상적인 조회가 불가능한 구조 입니다.
리비전 142 에 반영된 parse_date() 와 format_date() 로 인해 발생하는
로케일 관련 문제를 해결하기 위해
DB 쿼리에 사용되는 날짜 데이터와 쿼리 후 날짜 데이터 검증 로직 부분을
리비전 141 코드로 되돌리는 방식을 취했습니다.
일본 휴일을 삭제하고 우리나라 휴일로 대체하면서
스트링 앞에 u 를 붙여 u'크리스마스' 형식으로 명시적으로 유니코드 디코딩하도록 수정 하였습니다.
- 한글화 용 리소스 -- 2010.5.5 추가 : Trac 0.12 용 한글 용어 반영 및 용어 정리함.
. 한글화 원칙 : 교육 비용을 최소화하는 한글 용어를 선택한다.
- 기본적으로 Trac 0.12 버전의 한글 용어를 우선적으로 선택한다. (예외사항: Owner --> 담당자 로 번역)
- Trac 에 없는 개념이면 Redmine 의 한글 용어를 참고하여 선택한다.
- Trac 과 Redmine 에도 없는 개념이면
일반적으로 사용하는 용어를 선택하나 발음하기 편하고 의미가 명확한 용어를 우선적으로 선택한다.
간트 차트의 ソートするフィールド 는 어감이 안좋아 "정렬기준"으로 의역 함.
간트 차트의 絞込みをします 는 의미가 모호해서 "조회대상"으로 의역 함.
간트 차트/캘린더의 自分のチケットのみ表示 는 의미를 명확히 하기위해 "자신의 티켓만 조회" 로 의역 함.
간트 차트의 closeしたチケットを表示 는 의미를 명확히 하기위해 "close한 티켓 포함" 으로 의역 함.
간트 차트/캘린더의 更新 버튼은 의미를 명확히 하기위해 "조회하기"로 번역 함.
간트 차트의 達成率 은 국내에서 주로 사용하는 "진척율" 로 번역 함.
간트 차트/캘린더의 終了日은 Redmine 을 참고하여 "완료기한"으로 번역 함.
Trac 의 개념인 마일스톤의 due 는 공식 0.12 리소스를 참조하여 "완료 기한"으로 번역 함.
. 간트캘린더 / 데코레이터 플러그인 한국어 커스터마이즈 버전은 Trac 0.11 용 으로 개발 되었습니다.
(Trac 0.12 를 지원하지 않아 개인적으로 패치하였기에, Trac 0.12 에서 항상 정상 작동함을 보장하지 않습니다.)
. Gantt with Query 플러그인은 Ganttcalendar 플러그인에 필터 기능이 추가되어
Ganttcalendar 플러그인에 비해 환경적인 영향을 더 받는 것으로 리포트 되었습니다.
Gantt with Query 플러그인 실행에 문제가 있는 환경이라면 Ganttcalendar 플러그인을 사용하길 권장합니다.
. 로케일 설정에 따라 Trac 에서 제공하는 날짜 관련 API 함수가 오작동 할 수 있습니다.
(Trac 날짜 관련 API 함수가 다국어 환경을 지원하지 않아 발생하는 버그)
해당 플러그인 사용 시, 정상적인 날짜 포맷임에도 날짜 관련 에러가 발생한다면
; Apache httpd.conf 파일을 수정해서 에러가 발생 안하는 다른 로케일로 변경해야 합니다.
[#M_||
YYYY-MM-DD (한국/ISO 포맷)
PythonOption TracLocale "English_KOREA"
YYYY/MM/DD (일본 포맷)
PythonOption TracLocale "English_JAPAN"
MM/DD/YYYY (미국 포맷)
PythonOption TracLocale "English_USA"
DD/MM/YYYY (영국 포맷)
PythonOption TracLocale "English_UK"
.
.
.
tracd 데몬으로 사용하는 경우에도 Trac 날짜 관련 API 함수가 오작동하는 특정 로케일이 있음. -- 2010.3.18 추가 : 로케일 변경 없이 해당 문제를 해결하기 위해 예외처리 루틴 추가함_M#] . Trac 과 해당 플러그인은 단순 일정관리 용도로 사용하는 어플리케이션이 아닙니다.
기본적으로 데이터베이스 개념에 대한 이해와 SQL 작성 능력을 보유하고 있어야 제대로 활용할 수 있습니다.