소프트웨어 프로젝트를 성공적으로 수행하기 위해선 개발에 참여하는 이해관계자들간에 사용하는 기술과 물적/인적 자원, 프로세스의 공유가 절대적으로 필요하다는 것은 소프트웨어 개발을 해본 사람이라면 누구나 공감할 것이다. 하지만 이러한 개발 환경과 관련된 문제들은 이해의 범위와 자원의 한계로 많은 한계에 부딪히고 실직적인 프로젝트 실패라는 고배를 마셔본 경험을 개발자라면 능히 한번쯤은 해 보았을 것이다.

인력이나 금전적 문제같은 물리적 자원의 부족으로 불안정한 상태의 프로젝트를 무리해서 진행하는 것보다는 안정화 단계를 거치는 것이 소프트웨어 품질 개선을 위한 최선의 방향이겠지만, 어디서부터 잘못 되었는지 찾아 내는 것 또한 그리 만만한 작업은 아닐 것이다. 이러한 문제들로 인한 자원낭비를 줄이기 위해 다양한 방법들이 개발자들간에 거론되고 다양한 시도가 실무에서 이루어지면서 지금은 소프트웨어 품질개선을 위한 솔루션들이 제품화되어 출시되고 있을 정도로 품질관리 영역 또한 소프트웨어 개발의 중요한 분야로 자리잡은 상태이다.

소프트웨어 공학에서 제안하는 수많은 개념 중에 다양화, 대형화 되고 있는 소프트웨어 프로젝트의 특성 때문에 고전적으로 빌드단계에서 품질관리가 이루어지던 방식에서 생산성과 안정성 확보를 주기적인 빌드를 통해 고품질의 소프트웨어 개발을 보장하고 통합운영할 수 있는 개념도 나오게 되었다.

세상에 변하지 않는 것은 없다는 불교의 진리처럼 이용자의 요구사항도 변하고, 소프트웨어의 기능도 변하기 때문에 소프트웨어의 지속적인 변화, 즉 업그레이드는 소프트웨어 분야에서 자연의 순리라 할 수 있다. 이런 과정을 보다 효율적으로 수행하기 위해 나온 것이 지속적 통합(Continuous Integration)으로 소프트웨어 개발 생명주기에 걸쳐서 코드 품질 보증에 대한 초점을 맞춘 방법이다.

소프트웨어의 지속적 통합은 소프트웨어의 품질 향상이란 근본적인 목적뿐 아니라 최소한의 백업 및 공유를 제공할 수 있기 때문에 프로젝트를 수행하는 데 꽤나 유용하리라 본다.

지속적 통합을 위해 기본적으로 충족되어야 할 것이 몇 가지 있는데

  • CVS, Subversion, Git와 같은 소스코드를 공유하고 이력을 관리할 수 있는 형상관리저장소
  • 지금 내가 프로그램이 아닌 버그를 만든 것은 아닌지를 확인할 수 있는 단위 테스트 환경
  • Ant 혹은 Maven 같은 빌드 자동화(Build Automation) 도구들

이 제공되어야 한다. 특히 CI와 빌드 자동화를 위한 프로그램은 허드슨(http://www.hudson-ci.org/)과 젠킨스(http://jenkins-ci.org)같은 프로그램들로 이미 유포되어 사용되고 있으며 역사가 조금 더 오래된 Hudson 의 경우는 몇몇 프로젝트 그룹에서 사용되어 괜찮은 평가를 받고 있다.

지속적 통합을 처음 접하고 어디서부터 시작하면 좋을지를 고민중인 개발자라면 Hudson 을 설치하고 Hudson 환경에 맞게 개발환경을 구축한다면, 제법 그럴듯한 지속적 통합 환경에서 평안하고 희망적인 개발을 기대할 수 있을 것이다.


허드슨 특징 및 다운로드

허드슨의 주요특징을 간략하게 설명하면 기본적으로 CI서버 기능을 제공하면서 플러그인 기반으로 동작하기 때문에 설치된 플러그인의 종류에 따라 다양한 분석을 수행할 수 있다. 자바로 개발되었기 때문에 JDK 6.0 이상이 설치된 환경에서 설치가 쉽고, 웹을 통해 서비스를 이용할 수 있다.
JDK 6.0 이상과 Apache Tomcat 5 이상이 설치되었음을 가정한다.

1. 우선 허드슨 홈페이지(http://www.hudson-ci.org/) 메인 페이지 좌측 하단을 보면 최신버전의 허드슨을 다운받을 수 있다. 웹 기반 서비스가 제공되기 때문에 Servlet Container 에서 서비스 될 수 있는 WAR(Web ARchive) 파일로 제공된다.



2. 시스템에 따로 설치를 할 필요 없이 다운받은 파일(hudson-3.1.1.war) 을 직접 실행하거나 톰캣 서버를 이용해 서비스를 실행할 수 있다. hudson 자체적으로 동작할 수 있도록 Jetty 서버를 탑재하고 있기 때문에 별도의 웹 어플리케이션 서버를 설치하지 않아도 실행은 가능하다.
- 허드슨에 내장된 Jetty 서버는 다음과 같이 실행시킨다.
> java -jar hudson-3.1.1.war 톰캣 서버를 이용하는 경우는 톰캣이 설치된 폴더의 webapps 폴더에 war파일을 복사해 붙혀 넣으면 된다.



3. Tomcat 서버를 실행하면 자동으로 war파일에 해당하는 컨텍스트 폴더가 생기고 웹 브라우저를 열어 주소창에 "http://localhost:8080/hudson-3.1.1" 를 입력하면 hudson 서비스 페이지로 이동하게 된다. hudson에 내장된 Jetty 서버를 이용하는 경우는 주소창에 "http://localhost:8080/"를 입력하면 톰캣에서의 결과를 확인할 수 있다. 처음 설치해 실행하는 경우엔 유용한 플러그인 선택 화면을 통해 필요한 플러그인 설치를 수행할 수 있다.




백업 및 복구 방법


허드슨의 모든 설정과 프로젝트 소스 코드는 허드슨 홈 디렉토리에 저장되기 때문에 홈 디렉토리를 복사하고 붙여넣는 것만으로 백업과 복구 작업이 가능하다. 허드슨 홈 디렉토리 이름은 .hudson 으로 되어 있으며, 윈도우즈의 경우는 "C:/uesrs/계정폴더/.hudson" 처럼 위치한다.





보안 설정

허드슨 메인 화면 왼쪽 메인메뉴의 "Hudson 관리"를 클릭하면 관리화면을 통해 플러그인을 관리하거나 시스템 로그를 확인할 수 있다. 관리화면에서 "Configure Security" 링크를 클릭하면 허드슨 보안기능, JDK/Ant/Maven 설치경로 및 이메일 통지 등을 설정할 수 있는 화면으로 이동하게 된다.




"Enable security" 체크박스를 선택하면 설정 폼이 활성화되어 설정을 계속 진행할 수 있다. Tomcat 설치 폴더의 conf 폴더의 tomcat-user.xml 파일에 설정되어 있는 Role을 이용한 그룹별 권한 설정 방법은 다음과 같다.

(1) 우선 톰캣서버의 tocmat-user.xml 에 role을 정의한다.



(2) 허드슨 보안관리 페이지의 Security Realm 에서 Delegate to servlet container 를 선택한다.



(3) Authorization 영역에서는 Matrix-based security 를 선택한다. Anonymous 그룹에는 Overall 의 read 권한만을 부여하고, 하단 User/group to add 에 추가할 tomcat-user.xml 에 등록된 그룹 이름을 입력한 후 "Add" 버튼을 눌러 추가한 후 권한 체크한 후 저장하게 되면 등록된 사용자 계정으로 로그인 할 수 있다.



(4) 시스템 설정
Manage Hudson 페이지의 Configure System 을 클릭하면 JDK, Maven, Subversion 등의 경로설정 및 이메일 통지 설정을 할 수 있다.
1) JDK 경로 설정
JDK 영역의 Add JDK 버튼을 클릭하면 JDK를 추가할 수 있는 입력폼이 나온다. 이미 설치되어 있는 JDK를 이용하기 위해선 Install automatically 체크박스 선택을 해제하고 이름과 JAVA_HOME 경로를 입력한 후 저장한다.





작업 등록

허드슨은 기본적으로 자바뿐만 아니라 C/C++ 의 프로젝트 빌드할 수 있다. 기타 다른 언어들도 지원하지만 그러기 위해선 프로젝트 유형에 맞는 플러그인을 설치해야 한다.

1. 허드슨 페이지 왼쪽 메인 메뉴에서 "새 작업"을 클릭하면 아래와 같이 간단한 작업으로 프로젝트를 등록할 수 있다. 4가지 항목 중에 "Build a free-style software job" 이 무난하기 때문에 이것을 선택해 프로젝트를 등록하도록 한다.




2. save 버튼을 눌러 작업을 등록하면 작업에 대한 보안설정 화면으로 이동하게 된다. 다른 선택사항들은 그대로 두고 Source Code Management 영역의 Subversion 설정을 보면 Repository URL 에 SVN 주소를 넣고 Local module directory 에 동기화할 폴더 경로를 입력한다. 기본적으로 동기화 폴더는 허드슨 홈 디렉토리(.hudson)에 하게 된다. 다른 설정들은 기본으로 한 후 저장한다. 플러그인이 설치 된 경우 CVS, Git 정보들에 대한 설정도 가능하다.




3. Build Triggers 영역을 보면 언제 프로젝트 빌드 작업을 수행할 것인지를 선택할 수 있게 되어 있다.
- Build after other jobs are built : 다른 작업들의 빌드 작업이 끝난 후에 빌드 수행
- Trigger builds remotely : HTTP를 통해 원격으로 빌드수행.
- Poll SCM : 형상관리 서버가 변경되었을 때 빌드 수행
- Build periodically : 설정한 일정에 따라 반복적으로 빌드 수행



4. Build 영역에서 빌드 설정을 할 수 있다. 콤보박스를 누르면 4가지 선택항목이 있다. 프로젝트 환경에 맞게 선택을 하면 된다.
- Invoke Maven 2 (Legacy) : Maven 형식의 자바 프로젝트를 빌드한다.
- Execute shell : 리눅스 플랫폼에서 서비스되는 경우 셸 스크립트를 실행할 수 있다.
- Execute Windows batch command : 윈도우 플랫폼에서 서비스되는 경우 사용된다.
- Invoke Ant : Ant를 이용한 자바 프로젝트를 빌드한다.



5. Post build Actions 영역에서 빌드가 완료된 후 수행할 작업들을 선택할 수 있다.
- Publish JUnit test result report : Junit 수행 테스트 결과를 게시한다.
- Archive the artifacts : 빌드하고 나서 target 디렉토리의 모든 Jar 파일을 아카이브 파일로 제공한다.
- Record fingerprints of files to track usage : 현재 프로젝트가 참조되는 프로젝트의 위치를 표시한다.
- Build other jobs : 다른 빌드 작업을 수행



모든 설정이 완료된 후 save 버튼을 눌러 저장하면 빌드작업 설정은 끝이난다. 생성된 작업 화면을 통해 프로젝트 빌드 이력관리, 상태정보 등을 확인하면서 누가 버그를 만들고 있는지 확인할 수 있다.


작성자 : 데이터사이언스센터 선임개발자 양성진

Posted by 人Co

2014/03/11 17:11 2014/03/11 17:11
Response
No Trackback , No Comment
RSS :
https://www.insilicogen.com/blog/rss/response/149

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다



« Previous : 1 : ... 231 : 232 : 233 : 234 : 235 : 236 : 237 : 238 : 239 : ... 376 : Next »