본문 바로가기
IT/웹서버프로젝트

Maven 프로젝트의 기초 개념과 구조 설명 및 실습을 통한 의존성 추가

by anuglyduckling 2024. 10. 18.
728x90
반응형

 

 

1. Maven Project

Maven Project는 Apache Maven이라는 빌드 관리 도구를 사용하는 자바 기반 프로젝트입니다.

Maven은 프로젝트의 빌드, 의존성 관리, 그리고 배포 과정을 효율적으로 처리해주는 도구로, 특히 자바와 JVM(Java Virtual Machine) 언어 프로젝트에서 널리 사용됩니다. Maven 프로젝트는 소스 코드뿐만 아니라, 필요한 외부 라이브러리, 프로젝트의 구조, 빌드 명령 등을 모두 관리하는 강력한 시스템입니다.


2. Maven의 주요 역할

1) 의존성 관리(Dependency Management)

  • Maven의 가장 큰 장점 중 하나는 의존성(외부 라이브러리)을 쉽게 관리할 수 있다는 점입니다. 프로젝트에서 필요한 외부 라이브러리를 Maven이 자동으로 다운로드하고 관리해줍니다.
의존성 관리(Dependency Management)는 소프트웨어 프로젝트에서외부 라이브러리나 모듈을 쉽게 가져와서 사용하는 방법을 자동화하는 과정입니다. 의존성은 특정 프로젝트가 올바르게 동작하기 위해 필요한 다른 라이브러리나 패키지를 의미합니다.
  • 이를 위해 프로젝트의 의존성을 pom.xml 파일에 명시하면, Maven이 해당 라이브러리를 중앙 저장소(예: Maven Central)에서 자동으로 가져와 프로젝트에 추가합니다.

2) 빌드 관리(Build Management)

  • Maven은 프로젝트를 컴파일하고, 테스트하고, 패키징하는 빌드 과정을 간단하게 자동화합니다. 여러 단계를 명령어 한 줄로 처리할 수 있습니다.
  • mvn clean install 같은 명령어를 통해 소스 코드의 컴파일, 테스트 실행, 패키징(JAR, WAR 파일) 등이 모두 자동으로 이루어집니다.

3) 프로젝트 구조 표준화

  • Maven은 표준 디렉토리 구조를 따르도록 강제합니다. 이를 통해 프로젝트의 일관성과 가독성을 높일 수 있습니다.
  • 예시 디렉토리 구조
src/
  main/
    java/    # 자바 소스 코드
    resources/   # 리소스 파일(설정 파일 등)
  test/
    java/    # 테스트 소스 코드

 

 

4) 플러그인 지원

  • Maven은 다양한 플러그인을 제공해 프로젝트의 테스트, 리포팅, 코드 분석, 배포 등의 작업을 자동화할 수 있습니다.
  • 예를 들어, Surefire 플러그인을 사용하여 단위 테스트를 자동으로 실행하거나, Javadoc 플러그인으로 문서를 생성할 수 있습니다.

5) 멀티모듈 프로젝트(Multi-Module Project)

Maven은 여러 모듈로 구성된 대규모 프로젝트를 관리하는 데 유용합니다. 각 모듈이 개별적으로 개발될 수 있으며, 전체 프로젝트는 하나의 큰 프로젝트로 관리됩니다.

 


 

3. Maven Project의 핵심 파일: pom.xml

pom.xml은 Maven 프로젝트의 핵심 설정 파일로, 프로젝트의 의존성, 빌드 설정, 플러그인, 버전 등을 정의합니다.

 

pom.xml 주요 요소

  • GroupId: 프로젝트를 식별하는 고유한 ID. 주로 조직의 도메인 이름을 역순으로 사용합니다.
  • ArtifactId: 프로젝트의 이름 또는 고유 식별자.
  • Version: 프로젝트의 버전.
  • Dependencies: 프로젝트에서 사용할 외부 라이브러리나 모듈들을 정의하는 섹션입니다.
<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>my-app</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.5.4</version>
        </dependency>
    </dependencies>

</project>

 


4. Maven의 주요 명령어

  • mvn clean: 이전 빌드 결과물을 삭제합니다.
  • mvn compile: 소스 코드를 컴파일합니다.
  • mvn test: 테스트 코드를 실행합니다.
  • mvn package: 컴파일된 코드를 JAR 또는 WAR 파일로 패키징합니다.
  • mvn install: 패키징된 결과물을 로컬 저장소에 설치하여 다른 프로젝트에서 사용할 수 있게 합니다.
  • mvn deploy: 패키지를 원격 저장소에 배포합니다.

 

 


5. 실습

 

1) 프로젝트 생성

  • 이름(프로젝트명): my-app
  • 시스템빌드: Maven
  • JDK: Oracle OpenJDK 23.0.1 다운로드
  • 고급설정 > 그룹ID: com.example, 아티팩트ID: my-app
  • 생성버튼 클릭

 


2) maven 프로젝트 구조 

my-app/               <- 프로젝트 루트 디렉토리
├── .idea/            <- IntelliJ IDEA 관련 설정 파일들이 저장되는 디렉토리 (IDE 전용, 소스 코드와는 무관)
├── src/              <- 소스 코드와 리소스가 들어있는 디렉토리
│   ├── main/         <- 애플리케이션의 메인 소스 코드가 위치하는 디렉토리
│   │   ├── java/     <- Java 소스 코드가 들어가는 디렉토리
│   │   └── resources/ <- 애플리케이션에서 사용하는 리소스 파일이 위치하는 디렉토리 (예: 설정 파일, 이미지 등)
│   └── test/         <- 테스트 소스 코드가 들어가는 디렉토리
├── .gitignore        <- Git에서 추적하지 않을 파일/디렉토리 목록을 정의한 파일
├── pom.xml           <- Maven 프로젝트의 설정 파일 (핵심 파일)

 

 

  • my-app/:
    • 프로젝트의 루트 디렉토리입니다. my-app은 프로젝트 이름이며, 여기서 Maven 프로젝트의 전반적인 구조가 시작됩니다.
  • .idea/:
    • 이 디렉토리는 IntelliJ IDEA가 프로젝트 관련 설정을 저장하는 디렉토리입니다. Maven과 직접적인 관련은 없으며, 프로젝트를 IntelliJ에서 열 때 생성됩니다. 일반적으로 이 디렉토리는 버전 관리 시스템(Git 등)에 포함되지 않습니다.
  • src/:
    • 이 디렉토리는 프로젝트의 소스 코드와 리소스 파일이 저장되는 곳입니다. 두 개의 하위 디렉토리인 main과 test로 나뉘어 있습니다.
  • src/main/:
    • 애플리케이션의 실제 메인 코드가 위치하는 디렉토리입니다.
    • java/: Java 소스 코드가 들어가는 곳입니다. 이곳에 패키지 구조에 따라 Java 파일들을 넣어 작성합니다.
    • resources/: 애플리케이션에서 사용하는 정적 리소스(예: application.properties, 이미지, XML 파일 등)를 넣는 디렉토리입니다. 이러한 파일들은 컴파일 시 함께 패키징됩니다.
  • src/test/:
    • 이 디렉토리에는 프로젝트의 테스트 코드가 들어갑니다. 주로 JUnit이나 다른 테스트 프레임워크에서 사용하는 테스트 코드가 작성됩니다.
  • .gitignore:
    • Git에서 버전 관리하지 않을 파일이나 디렉토리를 정의한 파일입니다. 보통 target/, .idea/와 같은 빌드 결과물이나 IDE 설정 파일들이 여기에 포함됩니다.
  • pom.xml:
    • Maven 프로젝트의 핵심 구성 파일로, 의존성, 빌드 설정, 플러그인 등의 정보를 담고 있습니다. 이 파일을 통해 Maven이 프로젝트의 빌드 과정과 의존성 관리를 자동으로 처리합니다.

 


3) pom.xml 설정 

  • 오른쪽 프로젝트 툴 창에서 프로젝트 파일과 폴더 구조를 볼 수 있습니다. 
  • Maven 프로젝트의 설정과 관리에 관한 모든 정보를 담고 있는 pom.xml을 클릭하여 설정을 확인합니다.

<?xml version="1.0" encoding="UTF-8"?>

 

XML 선언부: 이 부분은 XML 파일의 버전과 인코딩 방식을 정의합니다. 1.0은 XML 버전을 의미하고, UTF-8은 파일의 문자 인코딩 방식이 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">

 

<project> 요소: 이 요소는 Maven 프로젝트의 루트 요소입니다. xmlns는 XML 네임스페이스를 정의하며, 여기서는 Maven의 POM(POM: Project Object Model) 버전 4.0.0을 사용하고 있음을 나타냅니다.

  • xmlns:xsi는 XML 스키마 인스턴스를 정의하기 위한 네임스페이스입니다.
  • xsi:schemaLocation은 XML 문서가 사용할 스키마의 위치를 지정합니다.
<groupId>com.example</groupId>

 

<groupId>: 이 값은 프로젝트가 속하는 그룹을 나타냅니다. 일반적으로 도메인 네임을 뒤집어서 사용하며, 여기서는 com.example로 설정되어 있습니다. 즉, 이 프로젝트는 com.example 그룹에 속하는 것으로 정의된 것입니다.

 

<artifactId>my-app</artifactId>

<artifactId>: 프로젝트의 고유 식별자를 정의합니다. 이 값은 프로젝트의 이름이자 빌드된 산출물(artifact)의 이름으로 사용됩니다. 여기서는 my-app이라는 이름의 프로젝트로 설정되어 있습니다.

 

<version>1.0-SNAPSHOT</version>

<version>: 프로젝트의 버전을 정의합니다. 1.0-SNAPSHOT은 프로젝트가 아직 완성되지 않은 개발 중인 버전임을 나타냅니다. SNAPSHOT은 변경될 수 있는 개발 중 버전임을 의미합니다.

 

<properties>
    <maven.compiler.source>23</maven.compiler.source>
    <maven.compiler.target>23</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

 

<properties>: Maven에서 사용할 프로젝트 전반에 걸쳐 반복적으로 사용되는 변수들을 정의하는 곳입니다. 이 파일에서는 다음과 같은 속성이 정의되어 있습니다:

  • maven.compiler.source: 프로젝트 소스 코드가 Java 버전 23에서 작성되었음을 나타냅니다.
  • maven.compiler.target: Maven이 이 프로젝트를 컴파일한 후 타겟으로 할 JVM 버전이 Java 23임을 나타냅니다.
  • project.build.sourceEncoding: 프로젝트의 소스 코드 파일이 UTF-8 인코딩을 사용하도록 지정합니다.

4) 의존성 추가 및 Maven Reload

  • Dependency 추가: pom.xml 파일에 Spring JDBC 의존성을 추가합니다.
  • 추가한 후에는 Maven이 해당 의존성을 다운로드하고 프로젝트에 적용할 수 있도록 해야 합니다.

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.3.20</version>
</dependency>

  • Maven 프로젝트 재로드: pom.xml 파일에 의존성을 추가하거나 수정한 경우, Maven이 자동으로 인식하지 못할 수 있기 때문에 수동으로 프로젝트를 다시 로드해야 합니다. 
  • IDE 오른쪽 상단에 Maven 재로드 아이콘을 클릭하면 의존성이 새로 적용됩니다. 이 아이콘은 의존성을 추가하거나 변경할 때마다 나타나며, 이를 클릭하면 IDE가 변경 사항을 반영합니다.


  • 의존성 적용 확인:  프로젝트 툴 창에서 외부 라이브러리 폴더를 클릭 해보면 spring-jdbc 의존성과 함께 Spring 프레임워크 관련 파일들이 다운로드된 것을 볼 수 있습니다. 

 

 

 

 

 

 

728x90
반응형