당니의 개발자 스토리

Maven, 빌드 자동화 도구에 대해서 본문

Java, Spring

Maven, 빌드 자동화 도구에 대해서

clainy 2026. 5. 6. 14:59

Spring 프로젝트를 하다 보면 Maven을 같이 사용하게 된다.

 

그래서 처음에는 Maven도 Spring처럼 프레임워크인가? 라는 생각이 들 수 있다.

하지만 Maven은 애플리케이션의 흐름을 제어하지 않는다.

 

Maven은 프로젝트를 빌드하고, 필요한 라이브러리를 관리해주는 도구다.


Maven은 무엇을 하는 도구일까?

Maven은 크게 두 가지 역할을 한다.

 

첫 번째는 빌드 자동화다.

코드를 컴파일하고, 테스트를 실행하고, 결과물을 만드는 과정을 자동으로 처리해준다.

 

두 번째는 의존성 관리다.

프로젝트에 필요한 라이브러리를 자동으로 다운로드하고 관리해준다.


pom.xml이란?

Maven 프로젝트를 보면 pom.xml이라는 파일이 있다.

이 파일은 프로젝트 설정 파일이다.

여기에서 어떤 라이브러리를 사용할지, 어떻게 빌드할지를 정의한다.

 

예를 들어 JUnit을 사용하고 싶다면 이렇게 작성한다.

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <scope>test</scope>
</dependency>

이렇게 추가하면 Maven이 알아서 JUnit 라이브러리를 다운로드해준다.


dependency란?

dependency는 '이 프로젝트가 의존하는 라이브러리' 를 의미한다.

즉, 내가 직접 만들지 않고 가져다 쓰는 코드다.

 

Spring, JUnit, MySQL Driver 같은 것들이 모두 dependency다.

 

scope란?

scope는 이 라이브러리를 언제 사용할지를 의미한다.

대표적인 scope는 다음과 같다.

compile
기본값이다. 컴파일할 때도 사용하고 실행할 때도 사용한다.

runtime
실행할 때만 필요하다. 컴파일할 때는 필요 없다.

provided
이미 서버에서 제공되는 라이브러리다. 예를 들어 Servlet API가 있다.

test
테스트 코드에서만 사용하는 라이브러리다. JUnit이 여기에 해당한다.

 

Servlet API와 Tomcat

웹 프로젝트를 하면 Servlet API를 사용하게 된다.

 

Servlet API웹 요청을 처리하기 위한 규칙이다.

HttpServletRequest, HttpServletResponse 같은 클래스들이 여기에 포함된다.

 

Tomcat은 웹 서버이면서 Servlet Container다.

즉, Servlet을 실행해주는 프로그램이다.

 

그래서 Tomcat이 있으면 우리가 만든 서블릿을 실행할 수 있다.


JDBC Driver

DB를 사용하려면 JDBC Driver가 필요하다.

이건 자바 프로그램과 DB를 연결해주는 라이브러리다.

 

MySQL을 쓰면 MySQL Driver를 dependency로 추가해야 한다.


Maven 의 life cycle이란?

Maven에는 정해진 작업 흐름이 있다.

이걸 lifecycle이라고 한다.

 

대표적인 흐름은 다음과 같다.

clean → 이전 빌드 결과 삭제
compile → 코드 컴파일
test → 테스트 실행
package → jar 또는 war 생성
install → 로컬 저장소에 저장
deploy → 서버에 배포

 

이 과정을 순서대로 실행해준다.


jar와 war

빌드 결과물은 보통 jar 또는 war 형태로 나온다.

 

jar일반 자바 애플리케이션 파일이다.

war웹 애플리케이션 파일이다.

 

Tomcat 같은 서버에 올릴 때는 war 파일을 사용한다.


plugin과 goal

Maven은 plugin을 통해 기능을 확장한다.

 

plugin 안에는 goal이라는 작업 단위가 있다.

예를 들어 compile, test 같은 작업도 내부적으로는 plugin의 goal이다.