🌐 [Maven] Spring 프로젝트의 설계도, pom.xml 완벽 해부
오늘은 Maven 기반의 Spring 프로젝트에서 가장 핵심적인 파일, 바로 pom.xml에 대해 상세히 분석해 보겠습니다. pom.xml은 Project Object Model의 약자로, 프로젝트의 모든 정보를 담고 있는 설계도와 같습니다.이 파일 하나에 어떤 라이브러리를 사용할지(의존성), 어떤 버전의 자바로 만들지, 그리고 최종적으로 어떻게 빌드하고 패키징할지에 대한 모든 정보가 정의되어 있습니다. Spring Boot 없이 전통적인 방식으로 프로젝트를 구성할 때, 이 파일을 정확히 이해하는 것은 필수입니다.
📝 전체 코드 살펴보기
먼저 분석할 pom.xml 파일의 전체 코드입니다.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>spring-mvc-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<spring.version>5.3.21</spring.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- Spring Core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring Context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring Web MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Servlet API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- JSP API -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
<!-- JSTL -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
</plugin>
</plugins>
</build>
</project>
📝 핵심 설정 분석
pom.xml은 크게 4가지 영역으로 나눌 수 있습니다.
1.프로젝트 기본 정보 (Project Coordinates)
2.설정값 변수 (Properties)
3.프로젝트 라이브러리 (Dependencies)
4.빌드 방법 (Build)
하나씩 자세히 살펴보겠습니다.
1. 프로젝트 기본 정보 (Project Coordinates)
프로젝트를 식별하는 고유 정보입니다. Maven Central Repository 등에서 이 프로젝트를 유일하게 찾아낼 수 있는 주소와 같습니다.
<groupId>com.example</groupId>
<artifactId>spring-mvc-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<groupId>: 프로젝트를 만든 그룹이나 조직의 고유 ID입니다. 보통 회사의 도메인을 역순으로 사용합니다.
<artifactId>: 프로젝트의 이름입니다. groupId 내에서 유일해야 합니다.
<version>: 프로젝트의 버전입니다. SNAPSHOT은 아직 개발 중인, 불안정한 버전임을 의미합니다.
<packaging>: 프로젝트를 빌드한 결과물의 형태를 지정합니다. war는 Web Application Archive의 약자로, Tomcat 같은 웹 애플리케이션 서버(WAS)에 배포하기 위한 패키지 형식입니다
2. 설정값 변수 (Properties)
pom.xml 파일 내에서 공통적으로 사용될 값들을 변수로 정의하는 곳입니다. 이렇게 하면 버전 등을 한 곳에서 관리할 수 있어 매우 편리합니다.
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<spring.version>5.3.21</spring.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<maven.compiler.source> & <target>: 이 프로젝트가 Java 11 문법으로 작성되었고, Java 11 환경에서 실행되도록 컴파일하라는 설정입니다.
<spring.version>: 사용할 스프링 프레임워크의 버전을 5.3.21로 지정했습니다. 아래 의존성(Dependencies) 부분에서 ${spring.version} 형태로 이 값을 참조합니다.
<project.build.sourceEncoding>: 소스 코드의 인코딩을 UTF-8로 설정하여 한글 깨짐을 방지합니다.
3. 프로젝트 라이브러리 (Dependencies)
pom.xml의 심장부입니다. 이 프로젝트가 동작하기 위해 필요한 외부 라이브러리(JAR 파일)들을 명시하는 곳입니다. Maven은 여기에 명시된 라이브러리들을 자동으로 다운로드하고 클래스패스에 추가해 줍니다.
<!-- Spring Web MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Servlet API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
* Spring Framework Dependencies: spring-core, spring-context, spring-webmvc는 Spring MVC 애플리케이션을 구동하기 위한 핵심 라이브러리입니다. 버전은 위 <properties>에 정의된 ${spring.version}을 사용하고 있습니다.
* Servlet/JSP API: javax.servlet-api와 javax.servlet.jsp-api는 서블릿과 JSP를 사용하기 위한 라이브러리입니다.
💡 <scope>provided</scope>란? 이 설정은 매우 중요합니다. provided는 '제공된다'는 의미로, 컴파일할 때는 이 라이브러리가 필요하지만, 서버(Tomcat 등)에서 이미 제공하므로 최종 war 파일에는 포함하지 말라는 뜻입니다. 만약 이 설정을 빼면 서버에 내장된 라이브러리와 충돌이 발생할 수 있습니다.
* JSTL: JSP에서 c:forEach, c:if 같은 태그를 사용하기 위한 라이브러리입니다.
4. 빌드 방법 (Build)
프로젝트를 컴파일하고 패키징하는 방법을 정의합니다. 여기서는 Maven 플러그인을 사용합니다.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
</plugin>
</plugins>
</build>
* maven-compiler-plugin: 자바 소스 코드를 바이트코드로 컴파일하는 역할을 합니다. <configuration>을 통해 <properties>에서 정의한 자바 11 버전을 사용하도록 설정했습니다.
* maven-war-plugin: 프로젝트를 <packaging>에 명시된 war 파일로 묶어주는 역할을 합니다.
🎯마무리
오늘은 Maven 프로젝트의 설계도인 pom.xml을 분석해 보았습니다.
요약:
1.프로젝트 정보: groupId, artifactId 등으로 프로젝트를 식별합니다.
2.의존성 관리: <dependencies>를 통해 필요한 라이브러리를 선언하고 자동으로 관리합니다.
3.빌드 설정: <build>와 플러그인을 통해 컴파일 및 패키징 과정을 제어합니다.
pom.xml을 이해하는 것은 의존성 충돌 문제를 해결하고, 프로젝트의 구조를 파악하는 데 큰 도움이 됩니다. 이 글이 여러분의 개발 여정에 도움이 되었기를 바랍니다
'Java > Spring Framework' 카테고리의 다른 글
| Spring Boot 없이 IntelliJ 유료버전으로 전통적인 Spring MVC 프로젝트 구성하기 (2) | 2025.08.29 |
|---|---|
| [Spring] 웹 요청 처리의 핵심, dispatcher-servlet.xml 완벽 분석 (Java Config 전환 포함) (6) | 2025.08.29 |
| [Spring] 스프링 MVC의 심장, web.xml 완벽 분석 (DispatcherServlet, 한글 필터) (2) | 2025.08.29 |