개발

[Maven] Maven, clean install, clean package 이란

qwas15788hj 2025. 8. 5. 21:42

업무 중 Git으로 협업하다 보면, 동료가 새 패키지/클래스를 올린 뒤 내가 pull 했을 때 프로젝트가 바로 실행되지 않거나 오류가 나는 일이 잦다. 이때 Run Configurations > Maven Build에서 빌드를 다시 돌리면 해결되곤 한다. 특히 clean package 와 clean install 중 무엇을 써야 하는지 헷갈리기 쉬워, 실제 현업 흐름에 맞춰 핵심만 정리했다.

 

✅ 1. “Maven/패키지/클래스”가 무엇이길래 빌드가 필요할까?

  • 메이븐(Maven): POM(XML) 기반의 빌드/의존성 관리 도구
  • 패키지(package): 코드가 들어있는 폴더 구조/이름공간 (예: com.example.app).
  • 클래스 파일(.class): *.java를 컴파일해서 생기는 실행 파일(바이트코드).
  • Git에는 보통 소스(.java)만 올라온다 → 내가 pull 해도 .class는 내 PC에서 새로 만들어야 한다.
즉, 새 소스가 오면 내 로컬에서 “컴파일”를 다시 해야 실행 가능!

 

✅ 2. 왜 ‘다시 빌드’를 안 하면 문제가 날까?

  • 소스/리소스 불일치: 내 PC의 예전 .class 와 새 .java 가 맞지 않음 → ClassNotFoundException, 빈 주입 실패 등.
  • 의존성/코드생성 변화: 팀원이 pom.xml을 바꾸거나 Lombok/QueryDSL 같은 코드 생성 단계를 추가했을 수 있음 → 빌드 단계 재실행 필요.
  • 리소스 처리/프로필 반영: 환경별(yml/properties) 설정이 Maven 단계에서 반영되므로 그냥 실행만으론 부족.
안전 루틴 : git pull → Maven Update(Alt+F5) → 빌드(clean …)

 

✅ 3. Run Configurations

📌 Run Configurations란?

  • 자주 쓰는 실행 명령을 버튼 하나로 저장해 두는 실행 저장소
  • 이클립스 및 인텔리제이가 무엇을 실행할지(도구: Maven/Java 등), 어디서(프로젝트 루트), 어떤 옵션으로(Goals/프로필/플래그) 실행할지를 기억해 둡니다.

📌  자주 사용하는 항목들

  • Base directory: 프로젝트 루트
  • Goals: clean package, clean install 같이 목표 단계만 적기
  • Profiles: dev, test 등 필요 시
  • Skip Tests: 체크 시 테스트 실행 생략(= -DskipTests)

 

✅ 4. clean, package, install

  • clean: 지난 빌드물 지우기(target/ 폴더 정리)
  • package: 내 프로젝트 안에서 결과물(JAR/WAR) 만들기
  • install: 만든 결과물을 내 PC의 Maven 창고(~/.m2)에 저장 다른 모듈/프로젝트가 내 결과물을 의존성으로 바로 사용 가능

📌 사용 용도

  • clean package
    • 목적: 내 프로젝트만 실행/배포해볼 때 결과물 만들기
    • 한계: 다른 모듈이 의존성으로 쓰려면 부족(창고에 올리지 않음)
  • clean install
    • 목적: 결과물을 로컬 창고에 올려 다른 모듈이 즉시 사용하도록 함
    • 멀티 모듈·상/하위 모듈 의존이 있으면 install을 써야 의존성이 정상 인식됨