start.spring.io 사이트에서 프로젝트 관리 도구의 선택
![](https://blog.kakaocdn.net/dn/bApOEr/btr6RZBPD7h/cDTpVOFKNK1JvlnzhY9V21/img.png)
Android Studio에서 Gradle 프로젝트 관리 도구가 있다.
![](https://blog.kakaocdn.net/dn/cDWDqj/btr6QpggGD4/b5U4FhaYfZsslhKOfgupCK/img.png)
위 프로젝트 관리도구는 무엇이며, 빌드 자동화는 무엇인지 알아보자
프로젝트 관리도구
말 그대로 프로젝트를 관리하는 도구이다.
프로젝트 관리 기능과 빌드 자동화 기능을 제공한다.
프로젝트 관리
프로젝트 관련된 라이브러리의 의존성, 버전을 관리한다.
프로젝트 산출물을 일관된 구조로 관리한다.
- 프로젝트 디렉토리 구조 관리
- 의존성 관리
- 빌드 프로세스 관리
빌드 자동화
정리하면 빌드를 포함하여 테스트 및 배포를 자동화 하는 도구이다.
빌드 자동화 도구로는 Maven, Gradle, Jenkins 등이 있다.
Maven
![](https://blog.kakaocdn.net/dn/bVpMKX/btr60Epzyy7/LTPtz7EMkeObhnWDkSOHqk/img.png)
빌드 라이프 사이클
Maven은 기본, clean, site 3개의 라이프사이클이 존재한다.
- 기본
- 여러 단계의 Phase로 나뉘어져 있다.
- 각 페이즈는 의존관계를 가진다.
- complie, test, package deploy 순서로 진행된다.
- clean
- clean 페이즈를 이용하여 이전 빌드에서 생성된 모든 파일을 삭제한다.
- site
- site, site-deploy 페이즈를 이용하여 생성된 문서들을 대상 사이트에 배포한다.
Phase
Phase | 설명 |
---|---|
resource | 리소스가 준비되어 복사된다. |
compile | 소스 코드를 컴파일한다. |
test | Junit과 같은 테스트 프레임워크로 단위 테스트한다. |
package | pom.xml의 <packaging /> 엘리먼트 값(java, war, ear 등)에 따라 압축한다. |
install | 패키지를 로컬 저장소에 배포한다. |
deploy | 원격 메이븐 저장소에 압축한 파일을 배포한다. |
프로젝트 구조
디렉토리 명 | 목적 |
---|---|
project home | pom.xml 파일과 모든 서브 디렉터리가 들어있다. |
src/main/java | 프로젝트의 자바 소스코드가 들어있다. |
src/main/resources | 속성 파일 같은 프로젝트 산출물 리로스를 포함한다. |
src/test/java | 프로젝트 테스트 자바 소스코드가 들어있다. |
src/test/resources | 테스트에 필요한 리소스를 포함한다. |
프로젝트 설정 방법
POM (Project Obejct Model)을 이용하여 프로젝트를 설정한다.
필요한 라비르러리를 pom.xml 에 정의 시, 라이브러리 실행, 설치에 필요한 다른 라이브러리 관리 및 네트워크를 통한 다운로드를 진행한다.
pom.xml
의 주요 기능
- 프로젝트 정보 : 프로젝트 이름, 라이센스
- 빌드 설정 : 소스, 리소스, 라이프사이클 별 실행할 플러그인 등 빌드와 관련된 성질
- 빌드 환경 : 사용자 환경 별로 달라질 수 있는 환경 정보
- pom 연관 정보 : 의존 프로젝트, 상위 프로젝트, 포함하고 있는 하위 모듈 등
Gradle
![](https://blog.kakaocdn.net/dn/ehHVsf/btr6UCzxovz/c22tO9knCDXpxT1zHOOB4k/img.png)
Andriod Studio 공식 빌드 시스템
Java, C/C++, Python 등 여러가지 언어를 지원한다.
Groovy
Java 플랫폼 용 Java구문 호환 객체 지향 프로그래밍 언어
특징
- 고성능
- 입출력이 변경되어 작업을 수행해야 하는 작업만 실행하여 불필요한 작업을 방지한다.
- 다양한 캐시를 사용하여 이전 빌드의 출력을 재사용한다.
- 공유 빌드 캐시를 사용하면 다른 시스템의 출력을 재사용할 수도 있다.
- JVM 기반
- 표준 Java API를 사용할 수 있다.
- 다양한 플랫폼에서 Gradle을 쉽게 실행할 수 있다.
- 컨벤션
- 규칙들을 통해 일반적인 유형의 프로젝트를 쉽게 빌드할 수 있다.
- 확장성
- IDE 지원
- Android Studio, Intellij IDEA, Eclipse, VSCode등 여러 IDE에서 Gradle 빌드와의 상호작용을 제공한다.
빌드 라이프 사이클
- Initialization
- 빌드 환경을 설정하고 참여할 프로젝트를 결정한다.
- Configuration
- 빌드에 대한 작업 그래프를 구성한다.
- 사용자가 실행하려는 작업에 따라 실행해야 하는 작업과 순서를 결정한다.
- Execution
- 구성 단계가 끝날 때 선택한 작업을 실행한다.
프로젝트 설정 방법
build.gradle
- 빌드에 대한 모든 기능을 정의, 환경 설정, 빌드 방법, 라이브러리 정보를 기술하여 프로젝트의 관리 환경울 구성
setting.gradle
- 프로젝트 구성을 할 때 작성하는 파일
- 프로젝트간의 의존성 및 멀티 프로젝트를 구성할 때 사용
Jenkins
![](https://blog.kakaocdn.net/dn/c6slcE/btr60FWvmGR/N10ADInRIZcWnTSHaRNQNk/img.png)
지속적 통합 : CI(Continuous Integration)
CI 도구가 나오기 이전에는 타이머를 이용하여 일정 시간마다 빌드를 실행하는 방식이 일반적이였다.
CI 도구는 이에 더해서 Git같은 버전 관리 시스템과 연동하여 소스의 커밋을 감지하면 자동으로 자동화 테스트가 포함된 빌드를 작동되도록 설정할 수 있다.
장점
- 컴파일 오류 검출
- 자동화 테스트 수행
- 코딩 규약 준수여부 체크
- 소스 변경에 따른 성능 변화 감시
- 많은 플러그인을 지원하며, 커스터마이징이 가능
단점
- 규모가 작은 프로젝트의 경우, 설정하는데 리스소 낭비가 발생
- 호스팅을 직접해야하기 때문에 서버 운영 및 관리 비용 발생
Uploaded by N2T