회사 소스파일을 내려받고 이클립스에서 적용시키려고 하니 Maven으로 빌드를 해야 했다.
나는 항상 Gradle로만 프로젝트를 빌드해서 진행했기 때문에 각각의 개념과 차이점을 정리해보려고 한다!
✔️ 빌드(Build)
- 빌드는 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 결과를 말한다.
- 우리가 작성한 소스코드(ex. java파일), 프로젝트에서 쓰인 각각의 파일 및 자원(.xml, .jpa, .jpg, properties)을 jvm이나 톰캣 같은 WAS가 인식할 수 있도록 패키징하는 과정 및 결과물을 일컫는다.
- Java 프로젝트를 진행하면 개발자가 작성한 A.java와 여러 가지 정적 파일 등에 해당하는 resource가 존재한다.
- 빌드를 한다면 소스코드를 컴파일해서 .class로 변환하고, resource를 .class가 참조할 수 있는 적절한 위치로 옮기고 META-INF와 MANIFEST.MF들을 하나로 압축하는 과정을 의미한다.
✔️ 빌드 관리 도구(Build Tool)
- 빌드 도구란 소스코드에서 애플리케이션을 생성하면서 여러가지 외부 라이브러리를 사용하는데, 빌드 관리도구는 사용자가 관리할 필요없이 필요한 라이브러리들을 자동으로 관리한다.
⚒️ 빌드 관리도구는 다음과 같은 작업을 수행한다.
1. 종속성 다운로드 - 전처리(Preprocessing)
2. 소스코드를 바이너리 코드로 컴파일(Compile)
3. 바이너리 코드를 패키징(Packaging)
4. 테스트 실행(Testing)
5. 프로덕션 시스템에 배포(distribution)
빌드 툴로는 Ant, Maven, Gradle 등이 있다.
Maven
Maven 정의
- Maven은 Java 전용 프로젝트 관리 도구로, Lifecycle 관리 목적 빌드 도구이며, Apache Ant의 대안으로 만들어졌다.
- Maven은 아파치 라이센스로 배포되는 오픈 소스 소프트웨어이다.
Maven 특징
- Lifecycle 관리 도구로, 정해진 Lifecycle에 의하여 작업을 수행하며, 전반적인 프로젝트 관리 기능을 포함하고 있다.
- clean - validate - compile - test - package - verify - install - site - deploy의 라이프사이클을 가진다.
더보기
(1) clean: 빌드 시 생성되어 있었던 파일들을 삭제한다.
(2) validate: 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인하는 단계
(3) compile: 프로젝트 소스코드를 컴파일하는 단계
(4) test: 단위 테스트를 수행하는 단계. 테스트 실패 시 빌드 실패로 처리하며, 스킵이 가능하다.
(5) package: 실제 컴파일된 소스 코드와 리소스들을 jar, war 등의 파일의 배포를 위한 패키지로 만든다.
(6) verify: 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인한다.
(7) site: 프로젝트 문서와 사이트 작성, 생성하는 단계
(8) deploy: 만들어진 package를 원격 저장소에 release하는 단
- Maven은 필요한 라이브러리를 pom.xml에 정의한다. 이를 프로젝트 모델링이라고 한다.
- pom(Project Object Model)❓
- 주요 기능은 다음과 같다.
- 프로젝트 정보: 프로젝트 이름, 개발자 목록, 라이센스 등
- 빌드 설정: 소스, 리소스, 라이프 사이클 별 실행한 플러그인 등 빌드 관련 설정
- 빌드 환경: 사용자 환경별로 달라질 수 있는 프로필 정보
- pom 연관 정보: 의존 프로젝트, 모듈, 상위 프로젝트, 포함하고 있는 하위 모듈 등
- <property>: pom.xml 내의 dependency 환경 설정을 위한 변수를 SET
- <dependency>: 프로젝트에서 사용할 라이브러리들을 명시. 명시된 라이브러리들은 메이븐 중앙 저장소에서 자동으로 다운 받아 준다.
- <build> 내 <plugin>: 메이븐 프로젝트 빌드를 위한 라이브러리 명
- pom(Project Object Model)❓
Gradle
Gradle 정의
- Maven을 대체할 수 있는 프로젝트 구성 관리 및 범용 빌드 툴이며, Ant Builder와 Groovy script를 기반으로 구축되어 기존 Ant의 역할과 배포 스크립의 기능을 모두 사용가능하며 스프링부트와 안드로이드에서 사용된다.
- 빌드 속도가 Maven에 비해 10~100배 가량 빠르며, Java, C/C++, Python 등을 지원한다.
Gradle 특징
- 가독성이 좋다
- 코딩에 의한 간결한 정의가 가능하므로 가독성이 좋다.
- 재사용에 용이
- 설정 주입 방식(Configuration Injection)을 사용하므로 재사용에 용이하다.
- 구조적인 장점
- Build Script를 Groovy 기반의 DSL(Domail Specific Language)를 사용하여 코드로서 설정 정보를 구성하므로 구조적인 장점이 있다.
- 편리함
- Gradle 설치없이 Gradle wrapper를 이용하여 빌드를 지원한다.
- 멀티 프로젝트
- Gradle은 멀티 프로젝트 빌드를 지원하기 위해 설계된 빌드 관리 도구이다.
- 지원
- Maven을 완전 지원한다.
Maven VS Gradle
- 스크립트 길이와 가독성 면에서 gradle이 우세하다.
- 빌드와 테스트 실행 결과 Gradle이 더 빠르다.
- gradle은 캐시를 사용하므로 테스트 반복 시 실행 결과의 차이가 더 커진다.
- 의존성이 늘어날 수록 스크립트 품질의 차이가 커진다.
- Maven은 멀티 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상속받아야 하지만, gradle은 설정 주입 방식을 사용하므로 멀티 프로젝트에 적합하다.
'Spring Boot > STUDY' 카테고리의 다른 글
[Spring] @PathVariable과 @RequestParam 차이점 (0) | 2024.09.26 |
---|---|
[Spring] Mapper와 Repository의 차이 (0) | 2024.08.08 |
[Spring Boot] 타임리프(Thymeleaf)란? (0) | 2024.07.17 |
[Spring Boot] React연동 프로젝트(4) - 상세 화면 (0) | 2024.07.04 |
[Spring Boot] React연동 프로젝트(3) - 회원가입 및 로그인 기능 구현 (1) | 2024.07.04 |