루비로 구현한 개인 프로젝트에 CI 를 적용해 보았다.

CI는 사실 이전 회사 다닐때 자바와 MFC 프로젝트에 대해 적용해보고 싶었는데, 당시엔 업무과중으로 심신이 너무 지쳐있던 터라 개발 프로세스 개선에 신경을 쓸 여력이 없었다.(그래도 이전 회사의 개발팀의 버전관리 + 이슈관리 틀을 제안하고 구축하였으니 몫은 충분히 하지 않았나 싶다.)

루비 뉴비니까 최대한 쉬운 방향을 찾아보기로 한 결과, 아래의 조합이 적당하다고 판단이 들었다.

버전 관리 > Subversion (이미 설치되어 있음)
유닛 테스트 > Test::Unit
테스트 커버리지 계산 > Rcov
이슈 관리 > JIRA (이번에 스타터 라이센스를 5$ 에 팔길래 냉큼 구입)
자동 빌드 > CruiseControl.rb

먼저, JIRA 를 설치하고 약간의 설정을 하였다. GMail SMTP 설정이랑 Subversion 플러그인 정도만 설정하고 나머지 건드릴 수 있는 기능은 시간이 날 때 해보는 것으로 미뤘다.(골드피처에 한글팩을 요청해 두었다.)

이후, 기존 소스에 유닛 테스트를 적용하였다. 기본으로 포함되어 있는 Test::Unit 을 활용했으며, 타인에게 서비스하지 않는 개인 프로젝트이기 때문에 예측불가능한 입력이라던지 이런 부분에 대해서 고민하지 않고 그냥 Happy Case 에 대해 정상 작동하는지만 테스트하도록 구현하였다.

그 다음, Rcov 를 설치하여 유닛 테스트에 대해 코드 커버리지를 확인하였다. 75% 대가 나오는데, 웹에서 데이터를 가져오는 부분과 메인 실행 부분이 커버리지에 포함되지 않기 때문에 그냥 넘기기로 하였다.(Real world Rails, Part 4: Ruby on Rails의 테스팅 전략 에 따르면 최고의 루비 프로그래머들이 80% 이상을 제안한다고 하니 이정도면 충분할 듯 싶다.)

자동 빌드는 CruiseControl.rb 에게 맡긴다. 설치와 실행에 문제들이 좀 있었지만(CruiseControl.rb(1.3.0) 를 윈도우에서 사용할 경우) 어찌저찌 마무리하였다. 루비이기 때문에 빌드는 하지 않고 유닛 테스트만 하며, 코드 커버리지도 같이 계산하도록 하려고 했는데 찾아보니 Rakefile 을 잘 알아야 되어서 생략했다. 나중에 꼭 적용할 생각이다.

자동 빌드 결과는 CCTray 를 통해 모니터링한다. CruiseControl.net 을 위해 만들어졌지만, 모니터링 기능만은 CruiseControl.rb 도 가능하다.

아래는 작업 결과 화면들이다. 초보가 기본 설정과 구글링으로 만들어낸 결과라 부끄럽지만 나중에 뭔가 하다 막힐 때 이걸 보면 자신감을 다시 찾을 수 있지 않을까 생각된다.







(이미지 슬라이드쇼로 올릴까 싶었는데 블로그 옮길때 이것때문에 고생할 것 같아 그냥 올림)

ps. 사실 Rakefile 을 다룰 줄 몰라서 상당히 고생할 것 같았는데 넷빈즈의 도움 덕분에 편하게 한 것 같다. 기본으로 제공해 주는 Rakefile 에서 많이 수정하지 않았다. 그리고 추가하거나 수정할 내용은 웹 검색으로 해결했다. (조만간 공부해서 다시 고쳐볼 생각이다.)


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Heart