자바(Java) 개발자라면 누구나 mvn clean install 이라는 마법의 주문을 터미널에 입력해 본 경험이 있을 겁니다. 이 명령어를 치면 수많은 로그가 올라가며 컴파일, 테스트, 패키징이 순식간에 이루어지죠. 하지만 이 과정이 정확히 어떤 순서와 규칙으로 진행되는지 알고 계신가요?
이 모든 것을 지휘하는 메이븐의 핵심 철학이 바로 빌드 라이프사이클(Build Lifecycle) 입니다.
메이븐 라이프사이클이란? 프로젝트 조립 공정 설명서
메이븐 라이프사이클은 소프트웨어를 빌드하고 배포하는 전체 과정을 단계별로 정의해 놓은 '표준 공정(Process)' 입니다. 마치 자동차를 조립하는 공장의 '표준 작업 절차서' 와 같습니다. 🚗
- 설계 검증 (validate)
- 부품 생산 (compile)
- 중간 검수 (test)
- 완제품 포장 (package)
- 품질 검사 (verify)
- 창고 입고 (install)
- 대리점 배송 (deploy)
메이븐은 clean, default, site라는 3개의 독립적인 라이프사이클을 가지고 있으며, 우리가 가장 흔하게 사용하는 것이 바로 default 라이프사이클입니다.
중요한 규칙: 라이프사이클의 특정 단계를 실행하면, 그 이전의 모든 단계가 순서대로 먼저 실행됩니다. 즉, mvn package 명령을 내리면, 메이븐은 자동으로 validate -> compile -> test 단계를 먼저 수행한 후, package 단계를 실행합니다. mvn install이 컴파일과 테스트를 모두 수행하는 이유가 바로 이것입니다.
라이프사이클의 각 단계 (Phase)
default 라이프사이클의 주요 단계(Phase)들은 다음과 같은 역할을 합니다.
- validate: 프로젝트가 올바른 정보를 가지고 있는지, 필요한 모든 의존성이 있는지 확인하는 단계.
- compile: 소스 코드를 컴파일하여 .class 파일을 생성하는 단계.
- test: 컴파일된 코드를 단위 테스트 프레임워크(e.g., JUnit)로 테스트하는 단계. 테스트가 실패하면 빌드는 여기서 중단됩니다.
- package: 컴파일된 코드와 리소스를 .jar, .war 같은 배포 가능한 형태로 압축(패키징)하는 단계.
- install: 패키징된 파일을 로컬 컴퓨터의 Maven 저장소(.m2/repository)에 설치하는 단계. 내 컴퓨터의 다른 프로젝트에서 이 라이브러리를 의존성으로 사용할 수 있게 됩니다.
- deploy: install을 넘어, 완성된 아티팩트를 원격 저장소(e.g., Nexus, Artifactory)에 배포하여 다른 개발자나 서버와 공유하는 최종 단계.
그래서 clean은 뭔가요?
clean은 default 라이프사이클과는 별개의 라이프사이클입니다. clean 라이프사이클의 목적은 단 하나, 이전 빌드 과정에서 생성된 모든 파일(target 폴더)을 깨끗하게 삭제하는 것입니다.
우리가 mvn clean install 이라고 명령을 두 개 연달아 쓰는 이유는, "이전 빌드의 잔여물을 모두 지우고(clean), 처음부터 다시 깨끗하게 빌드해서 로컬 저장소에 설치(install)해 줘" 라는 의미입니다. 이를 통해 혹시 남아있을지 모를 오래된 파일로 인한 문제를 원천적으로 방지할 수 있습니다.
마치며
메이븐의 라이프사이클은 모든 자바 프로젝트가 "약속된 표준 절차" 에 따라 빌드되도록 강제하는 강력한 컨벤션입니다. 이 표준 덕분에, 개발자는 어떤 메이븐 프로젝트를 받더라도 pom.xml 파일만 보면 어떤 의존성을 가지고 어떻게 빌드되는지 즉시 파악하고, mvn install 이라는 동일한 명령어로 프로젝트를 빌드할 수 있습니다.
단순한 빌드 툴을 넘어, 프로젝트 관리와 이해의 표준을 제시하는 것. 그것이 바로 메이븐 라이프사이클의 핵심 철학입니다. 🛠️