by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

빌드와 빌드도구




빌드와 빌드도구

1. 빌드와 빌드도구

1.1 빌드란?

  • 빌드는 컴파일보다 훨씬 많은 것을 의미한다.
  • 빌드에서는 compile, testing, inspection, deploy등의 과정등이 포함 될 수 있다.
  • 즉 소프트웨어가 응집력 있는 하나의 단위로써 작동하는지 확인하는 과정이라 할 수 있다.
  • 빌드란 소프트웨어를 생성하고 테스트하고 검사하여 배포하기 위해 수행하는 행위의 집합이다.

1.2 빌드 도구의 기능

  • 코드 컴파일 : 테스트를 포함한 소스코드 컴파일
  • 컴포넌트 패키징 : 자바의 jar 파일이나 윈도우의 exe 파일 같은 배포할 수 있는 컴포넌트를 묶는 작업
  • 파일 조작 : 파일과 디렉토리를 만들고 복사하고 지우는 작업
  • 개발 테스트 실행 : 자동화된 테스트 진행
  • 버전관리 도구 통합 : 버전관리 시스템 지원
  • 문서 생성 : API문서(ex JAVA Doc)를 생성
  • 배포 기능 : 테스트 서버(alpha, beta) 배포 지원
  • 코드품질분석 : 자동화된 검사도구(findbug,checkstyle,pmd.)를 통한 코드 품질 분석

1.3 빌드 도구 Ant

  • http://ant.apache.org/
  • 가장 널리 사용되는 자바 빌드 도구로 2000년 Apache 에서 자신들이 쓰려고 출시하였다.
  • 안정성이 좋고, 문서화가 잘 되어 있으며, 자바 프로젝트에서 가장 쓸만한 도구중에 하나이다.
  • task라는 개념을 사용하며, 자바 소스 파일 컴파일, jar, war, ear, zip 파일의 생성, javadoc 생성, 파일이나 폴더의 이동 및 복사, 삭제, 작업에 대한 의존성 설정, 외부 프로그램 실행등의 기능을 지원한다.

1.4 빌드 도구 Maven

  • http://maven.apache.org/
  • Ant가 빌드 툴이라면 Maven는 어플리케이션 개발을 위하여 필요한 모든 작업을 추상화하여 지원하는 프로젝트 관리 툴이다.
  • Maven 사이트에서는 Maven을 "소프트웨어 프로젝트 관리 및 도구"라 설명 한다.
  • Maven은 어플리케이션 개발을 진행하면서 반복적으로 진행해왔던 작업들을 효율적으로 지원하기 위해 등장한 툴이다.
  • 아주 적은 설정 만으로도 프로젝트를 빌드하고, 테스트를 실행하고, 품질 보고서를 생성할 수 있다.
  • POM(Project Object Model)을 통해서 jar 파일의 의존성 관리, 빌드, 배포, 문서생성, Release 등을 관리 할 수 있다.

2. Maven과 Ant의 비교

2.1 Ant

장점
  • target기능을 이용해서 세밀하게 빌드를 설정할 수 있다.
  • 개발자에게 모든 자유를 주며, 복잡한 빌드환경에서도 적절히 대처할 수 있는 많은 task를 제공해 준다.
단점
  • 미리 정해진 규칙이나 프로세스가 없기 때문에 모든것을 개발자가 정의해야 한다.
  • 모든것을 개발자가 정의하다 보니깐 매우 복잡한 빌드 스크립트가 탄생하게 된다.
  • build 스크립트의 재사용이 불가능하다.
  • 프로젝트 종속(Dependency) 관계 및 개발자/소유자, 버젼, 사이트 홈페이지와 같은 메타 정보가 미비하다.

2.2 Maven

장점
  • 프로젝트 빌드시 jar파일의 의존성을 쉽게 관리할 수 있다.
  • 빌드 프로세스를 표준화하였고, 빌드 라이프사이클 phase를 이용해 작업을 쉽게 처리할 수 있다.
  • 표준화된 디렉토리 레이아웃을 제공한다.
  • 미리 제공된 plugin들을 활용해 거의 모든 작업을 수행 할 수 있다.
  • java소스 파일과 resource 소스파일, test 소스파일들을 구조적으로 분리하게 되어 있다.
단점
  • Maven이 Ant에 비해 추상화가 높기 때문에 Ant에 익숙한 개발자들이 처음 접근하기에 진입 장벽이 있다.
  • 다양한 plugin들의 사용법을 숙지하기가 힘들다.

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.