Maven 기본 구조
Maven은 자바 프로젝트의 빌드, 관리, 배포를 자동화하는 도구임.
프로젝트 구조와 설정을 표준화하여 개발자들이 쉽게 프로젝트를 관리할 수 있도록 도와줌.
Maven 프로젝트는 특정 디렉토리 구조와 설정 파일을 기반으로 동작함.
1. Maven 프로젝트의 디렉토리 구조
Maven은 표준화된 디렉토리 구조를 사용함.
기본 디렉토리 구조는 다음과 같음.
my-app/ # 프로젝트의 루트 디렉토리
│
├── pom.xml # 프로젝트의 핵심 설정 파일
├── src/ # 소스 파일을 포함하는 디렉토리
│ ├── main/ # 애플리케이션의 메인 소스 코드
│ │ ├── java/ # Java 소스 파일이 위치하는 디렉토리
│ │ ├── resources/ # 리소스 파일 (예: 설정 파일, XML 등)
│ └── test/ # 테스트 코드를 포함하는 디렉토리
│ ├── java/ # 테스트 Java 파일이 위치하는 디렉토리
│ ├── resources/ # 테스트 리소스 파일
└── target/ # 빌드된 산출물이 저장되는 디렉토리
주요 디렉토리 및 파일
pom.xml
Maven 프로젝트의 가장 중요한 설정 파일임.
프로젝트의 의존성, 플러그인, 빌드 정보, 그리고 프로젝트의 메타데이터를 정의함.
src/main/java
애플리케이션의 주 소스 코드가 위치하는 디렉토리임.
src/main/resources
애플리케이션에서 사용하는 설정 파일, 프로퍼티 파일, XML 등의 리소스 파일이 위치함.
src/test/java
테스트 코드가 위치하는 디렉토리임.
src/test/resource
테스트시 사용하는 리소스 파일을 넣는 디렉토리임.
target
Maven이 빌드를 수행한 결과물이 생성되는 디렉토리임.
컴파일된 .class 파일, jar파일, war파일 등이 여기에 저장됨.
2. POM (Project Object Model)
Maven에서 가장 중요한 파일인 pom.xml은 프로젝트의 모든 정보를 담고 있는 XML 파일임.
pom.xml 파일의 주요 요소들은 다음과 같음.
필수 요소
1. groupId
프로젝트가 속한 그룹이나 회사의 고유 식별자
2. artifactId
프로젝트의 이름이나 ID
3. version
프로젝트의 버전 정보
주요 요소
1. dependencies
프로젝트에서 사용하는 라이브러리와 의존성들을 정의함.
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.10</version>
</dependency>
</dependencies>
2. build
빌드 과정에서 사용할 플러그인, 목표 등 설정을 정의함.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
3. repositories
외부 라이브러리나 플러그인을 다운로드할 원격 저장소를 지정함.
<repositories>
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
</repositories>
4. profiles
특정 환경이나 조건에 맞게 다른 설정을 적용할 수 있도록 프로파일을 정의할 수 있음.
<profiles>
<profile>
<id>dev</id>
<properties>
<environment>development</environment>
</properties>
</profile>
</profiles>
3. Maven 생명주기
Maven의 빌드 과정은 여러 단계로 나누어지며, 각 단계는 하나의 생명주기를 형성함.
기본 생명주기는 다음과 같음.
1. validate
프로젝트가 정상 상태인지 확인함.
2. compile
소스 코드를 컴파일함.
3. test
단위 테스트를 실행함
4. package
컴파일된 코드를 jar, war 등의 배포 가능한 형태로 패키징함.
5. verify
통합 테스트 등을 통해 패키징된 코드의 유효성을 검증함.
6. install
패키징된 파일을 로컬 저장소에 설치함.
7. deploy
원격 저장소에 배포함.
4. 의존성 관리 (Dependency Management)
Maven의 가장 강력한 기능 중 하나는 의존성 관리임.
프로젝트에 필요한 라이브러리와 그 라이브러리들이 필요로 하는 추가 의존성을 자동으로 해결해 줌.
1. 의존성 전이
Maven은 의존성에서 정의된 추가 의존성을 자동으로 다운로드하고 추가함.
2. 스코프
의존성의 사용 범위를 설정할 수 있음.
예를 들면, compile, test, runtime 등
5. Maven 플러그인
Maven은 플러그인을 통해 빌드 프로세스를 확장하고 자동화함.
Maven은 빌드, 테스트, 배포와 관련된 다양한 플러그인을 제공함.
대표적인 플러그인들은 다음과 같음.
1. maven-compiler-plugin
소스 코드를 컴파일하는 플러그인
2. maven-surefire-plugin
테스트를 실행하는 플러그인
3. maven-jar-plugin
JAR 파일을 생성하는 플러그인
Maven 기본 구조 요약
Maven의 기본 구조는 다음과 같이 요약할 수 있음.
1. 디렉토리 구조
표준화된 구조로, 소스코드, 테스트코드, 리소스 파일을 분리하여 관리함
2. POM 파일
프로젝트 메타데이터와 의존성을 정의하며, 빌드 프로세스를 설정함.
3. 생명주기
빌드, 테스트, 배포 과정이 자동화된 생명주기 단계를 통해 관리됨.
4. 의존성 관리
프로젝트에 필요한 라이브러리들을 손쉽게 관리하고 전이 의존성을 자동으로 해결함.
5. 플러그인
빌드 과정에서의 다양한 작업을 자동화하고 확장할 수 있음.
위와 같은 기본 구조와 설정을 통해 Maven은 자바 프로젝트의 빌드를 효율적으로 관리하고 일관성을 유지하는 도구로 널리 사용됨.
'Data Engineering > Zeppelin' 카테고리의 다른 글
[Zeppelin] org.eclipse.jetty (0) | 2024.09.20 |
---|---|
[Zeppelin] io.micrometer.core.instrument 패키지 (0) | 2024.09.20 |
[Zeppelin] Maven (2) | 2024.09.18 |
[Zeppelin] SLF4J (0) | 2024.09.18 |
[Zeppelin] 아파치 제플린의 인터프리터 (2) | 2024.09.17 |