◇ PART · SPRING

Maven & pom.xml

의존성 관리의 작동 원리 — 읽기 자료

📍 지금 어디를 만지고 있나요?
브라우저
Tomcat
pom.xml + Maven
Spring
DB

이 차시의 핵심 용어

Maven자바 프로젝트의 빌드·의존성 관리 도구. 라이브러리를 자동으로 다운로드하고 클래스패스에 연결.
pom.xmlMaven 프로젝트의 설정 파일. 어떤 라이브러리가 필요한지 목록을 작성. 「장보기 목록」 비유.
의존성 (Dependency)내 프로젝트가 사용하는 외부 라이브러리. <dependency> 태그로 추가.
전이적 의존성 (Transitive Dependency)A 가 B 를 쓰고 B 가 C 를 쓸 때 A 가 추가하면 C 까지 함께 추가됨. Maven 이 알아서 처리.

1. 라이브러리의 늪

옛날 자바 프로젝트는 jar 파일을 직접 다운로드, lib 폴더에 넣고, 클래스패스 등록을 일일이 했습니다. 라이브러리 하나가 또 다른 라이브러리를 필요로 해서 「의존성 지옥」이 만들어졌습니다.

왜 자동화가 필요한가

Spring 을 쓰려면 spring-core, spring-beans, spring-context, commons-logging, aop, ... 수십 개의 jar 가 필요. 하나라도 빠지면 NoClassDefFoundError. 직접 관리는 거의 불가능.

2. Maven 의 약속

「필요한 것 이름만 적어주세요」

사용자는 pom.xml 에 라이브러리 이름과 버전을 적습니다. Maven 이 알아서 인터넷에서 다운로드해 프로젝트에 연결합니다.

3. pom.xml 의 핵심 구조

<project>

    <!-- 내 프로젝트 식별자 -->
    <groupId>com.example</groupId>
    <artifactId>myapp</artifactId>
    <version>1.0</version>

    <!-- 추가할 라이브러리 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.30</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.13</version>
        </dependency>
    </dependencies>

</project>

구조 설명

4. 전이적 의존성 — 의존성의 의존성

내가 spring-context 한 줄을 추가하면, Maven 은 다음 것들도 자동으로 함께 가져옵니다:

spring-context ├── spring-core ├── spring-beans ├── spring-aop ├── spring-expression └── commons-logging

덕분에 우리는 큰 그림만 적으면 됩니다.

5. ⚠️ 가장 흔한 함정 — Maven Update 누락

디버깅 1순위

pom.xml 을 수정한 뒤에는 반드시:

📦 프로젝트 우클릭 → Maven → Update Project

이걸 빠뜨리면 코드는 맞아도 빨간 줄(컴파일 오류)이 사라지지 않습니다. 학생들이 가장 자주 막히는 지점입니다.

6. 빌드 도구 비교 — Maven vs Gradle

항목 Maven Gradle
설정XML 기반Groovy/Kotlin DSL
빌드 속도상대적으로 느림빌드 캐시·병렬로 빠름
시장 점유전통 강세신규 프로젝트 선호

본 과정은 Spring Legacy 와 잘 맞는 Maven 으로 진행합니다.

7. Before / After

전 차시 끝

Spring vs Boot 차이는 안다. pom.xml 은 들어본 정도.

이번 차시 끝

pom.xml 한 줄이 무엇을 의미하는지 알고, Maven Update 함정을 피할 수 있다.