Maven

WebStudy / / 2021. 2. 4. 23:04

Maven

Maven이란?

  • 지금까지 애플리케이션을 개발하기 위해 반복적으로 진행해왔던 작업들을 지원하기 위해 등장한 도구
  • 빌드, 패키징, 문서화, 테스트와 테스트 리포팅, git, 의존성 관리, svn등과 같은 형상 관리 서버와 연동(SCMs), 배포 등의 작업을 도와준다.
  • CoC(Convention over Configuration)
    • (일종의 관습)
    • 예를 들어 프로그램의 소스파일은 어떤 위치에 있어야 하고, 소스가 컴파일된 파일들은 어떤 위치에 있어야 하는지 등을 미리 정해놓은 것

Maven의 이점

  • 편리한 의존성 라이브러리 관리
  • 설정 파일에 몇 줄 적어줌으로써 직접 다운로드 받거나 하는 것을 하지 않아도 라이브러리를 사용할 수 있다.
  • Maven에 설정한 대로 모든 개발자가 일관된 방식으로 빌드를 수행할 수 있다.
  • 다양한 플로그인을 제공해서, 많은 일들을 자동화 시킬 수 있다.

Maven 기본

Maven 기반 프로젝트를 생성할 경우 pom.xml파일이 생성된다.
기본 생성파일을 보면 다음과 같다.

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>kr.or.connect</groupId>
    <artifactId>examples</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>mysample</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>
  • <project>
    • pom.xml 파일의 최상위 루트 엘리먼트(Root Element)
  • <modelVersion>
    • POM model의 버전
  • <groupId>
    • 프로젝트를 생성하는 조직의 고유 아이디를 결정
    • 일반적으로 도메인 이름을 거꾸로 적는다.(java 패키지랑 같네...)
  • <artifactId>
    • 해당 프로젝트에 의하여 생성되는 artifact의 고유 아이디를 결정
    • Maven을 이용하여 pom.xml을 빌드할 경우
      • artifactid-version.packaging
    • 위 예의 경우 examples-1.0-SNAPSHOT.JAR 파일이 생성됨
  • <packaging>
    • 해당 프로젝트를 어떤 형태로 packaging 할 것인지 결정한다.
    • jar, war, ear 등이 해당됨
  • <version>
    • 프로젝트의 현재 버전
      • 프로젝트가 개발 중일 때는 SNAPSHOT을 접미사로 사용한다.
      • Maven의 버전 관리 기능은 라이브러리 관리를 편하게 한다.
  • <name>
    • 프로젝트 이름
  • <url>
    • 프로젝트 사이트가 있다면 사이트 URL을 등록하는 것이 가능함
  • <dependencies>
    • Dependency Management 기능의 핵심
      • Dependency Management는 Maven을 이용할 경우 얻게 되는 가장 큰 이점이다.

실습

maven 프로젝트를 생성해 주는데, 간단한 실습을 진행하기 위해 maven-archetype-webapp을 선택하여 진행한다.

폴더 약속

  • prject dir
    • src dir
      • main dir
        • java: 자바 패키지 폴더와 소스 코드가 위치
        • resources dir: *.properties, *.xml등 설정파일들 위치
        • webapp dir: WEB-INF와 웹 관련 리소스들 위치
      • test dir
        • java: 테스트와 관련된 자바 패키지 폴더와 소스 코드가 위치
        • resources dir: 테스트와 관련된 *.properties, *.xml등 설정파일들 위치
    • target dir: 컴파일, 패키징된 결과물이 위치
    • pom.xml: Maven 설정 파일

WAS 런타임 지정

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
  • <scope>: dependency의 전이성을 제한하고, 다양한 빌드 작업에 사용된느 클래스 경로에 영향을 준다.
    • compile
      • 컴파일 할 때 필요, scope을 설정하지 않는 경우 기본값
      • 테스트 및 런타임에도 클래스 패스에 포함됨
    • runtime
      • 런타임에 필요.
      • 컴파일 시 필요하진 않지만, 실행 시에 필요한 경우
      • ex) JDBC 드라이버 등
    • provided
      • 컴파일 시에 필요하지만, 실제 런타임 때에는 컨테이너 같은 것에서 제공되는 모듈.
      • ex) servlet, jsp api 등
    • test
      • 테스트 코드를 컴파일 할 때 필요
      • 테스트 시 클래스 패스에 포함되며, 배포시 제외

jstl 사용

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

JSTL은 Tomcat이 기본으로 제공하지 않는다.
따라서 컴파일 할 때도 배포할 때도 사용 되어야 한다.

'WebStudy' 카테고리의 다른 글

Browser  (0) 2021.02.06
HTTP  (0) 2021.02.06
프로젝트A. 명함 관리 프로그램  (0) 2021.02.05
JDBC  (0) 2021.02.05
SQL  (0) 2021.02.04
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기