행복한 아빠

Maven 기반 개발환경에서 잊지 말고 해야 할 일 본문

개발환경

Maven 기반 개발환경에서 잊지 말고 해야 할 일

행복한아빠 2009. 11. 6. 20:52
지금 사용하는 개발환경이 Subversion, Maven2를 사용하고 있다. Maven 저장소로는 Artifactory를 사용하다가 Nexus로 옮겼다. 그리고 CI (Continuous Integration) 서버로는 Apache Continuum을 사용한다.
나중에 기회가 되면 Artifactory vs Nexus 그리고 Continuum vs Hudson 을 비교 분석해보고 싶다.

이런 기반에서 쓰다보면 Nexus나 Continuum 그리고 Maven에 의해 디스크를 엄청쓴다. 개발 프로젝트가 많으면 일주일만 돌려도 기가바이트 단위로 빌드결과가 쌓인다.
이러다가 디스크 꽉 차서 서버가 제대로 작동하지 않는 경우를 당한적이 있다.

왜 디스크를 이렇게 쓰나?
지금 CI 설정이 Common 프로젝트 그룹 (프로젝트 10개내), 제품 프로젝트 그룹 (프로젝트 20~30개)를 각각 1시간마다 교차해서 smoke 테스트를 돌리고 있다. 즉 30분마다 전 프로젝트 테스트를 계속 수행하고 있다.
(smoke testing: 한 순간이라도 빌드나 테스트가 깨지지 않는지 계속 검사하는거다. 즉 뭔가 이상이 생겨 연기가 나지 않는지 항상 모니터링하는 거나. svn에 잘못된 코드가 올라오면 바로 알려준다.)
그리고 매일 밤마다 전 프로젝트를 배포하는 스케줄을 걸어놓았다.

이렇게 돌리다보니 무수한 개발 스냅샷 버전이 빌드되어 디스크를 굉장히 많이 쓰게 된다. 스냅샷 빌드는 기본적으로 지워지지 않고 날짜/시간 대로 계속 쌓인다.


Continuum 관련 빌드 청소
Maven 빌드가 일어나면 스냅샷은 home 디렉토리 밑의 .m2/repository 에 쌓인다. 이중 스냅샷이 쌓이는 그룹디렉토리를 cron 스케줄로 이용하여 주기적으로 날려도 된다.
하지만 고맙게도 Continuum에 Purge(청소) 기능을 제공한다. Administration 메뉴에서 "Purge Configuration"을 선택하면 DEFAULT 저장소가 있을 것이다. 오른쪽 수정버튼을 이용하여 적당한 스케줄을 걸어놓으면 .m2 밑의 스냅샷을 설정대로 지워진다.


디렉토리를 조사해보니 Continuum의 빌드 결과 정보를 저장하는 디렉토리도 꽤 커진다. Purge 설정에서 Add 하면 buildOutput 청소 설정도 걸 수 있다.

Maven 저장소(Nexus) 스냅샷 청소
스냅샷 deploy를 자주하면 maven 저장소에도 날짜별로 계속 쌓인다. 당연히 Nexus에도 이를 청소해 주는 기능이 있다. "Administration" 메뉴군에 "Scheduled Task"에서 여러 스케줄 작업을 설정할 수 있는데 여기서 반드시 Snapshot을 주기적으로 삭제하는 작업을 걸어두는게 좋다. 특별한 경우가 아니라면 하루 이틀 스냅샷만 남기고 지운다.



이렇게 설정을 하지 않으며 개발하다가 서버가 제대로 동작하지 않는데 갑자기 일어나는 일이라 당황하고 삽질하는 경우도 있다.
물론 요즘 디스크가 싸고 용량도 크지만 만일을 위해 이 설정을 반드시하여 개발팀이 혼란에 빠지는 일이 없도록 사전에 예방하는 것이 좋을 것이다.



0 Comments
댓글쓰기 폼