Maven

ybong·2022년 2월 27일
0

들어가기 전에..

앞서 JSTL에 대해 배울 때, JSTL과 관련된 라이브러리를 다운로드하여 연결해주었었다. 이러한 라이브러리가 많아질 수록 관리가 어려워지고, 또 프로젝트가 복잡해질수록 소스를 컴파일하고 배포하는 것도 점점 어려워지는데, 이를 해결할 수 있는 도구가 Maven이다.

핵심개념

  • Maven
  • CoC
  • pom.xml

Maven이란?

  • 지금까지 어플리케이션을 개발하기 위해 반복적으로 진행해왔던 작업들을 지원하기 위해 등장한 도구이다.
  • Maven을 이용하면 Build, 패키징, 문서화, 테스트와 테스트 리포팅, git, 의존성 관리, svn 등과 같은 형상관리서버와 연동(SCMs), 배포 등의 작업을 손쉽게 할 수 있다.
  • Maven을 이해하려면 CoC를 이해해야한다.

CoC (Convention over Configuration)

  • CoC는 일종의 관습을 말한다.
  • 예를 들어 프로그램의 소스파일은 어떤 위치에 있어야 하고, 소스가 컴파일된 파일들은 어떤 위치에 있어야 하고 등을 미리 정해놨다는 것
  • Maven을 사용한다는 것은 이러한 관습, 즉 CoC에 대해 알아나가는 것이라고도 말할 수 있다.

Maven의 장점

  • 의존성 라이브러리 관리
    • 앞서 JSTL 라이브러리를 따로 다운받아 연결해주었던 것, 만약 라이브러리가 많아지면 불편해진다.
    • Maven을 사용하면 설정파일에 몇 줄을 적어줌으로써 직접 다운로드 받지 않아도 라이브러리를 사용할 수있다.
  • 일관된 빌드
    • Maven에 설정한 대로 모든 개발자가 일관된 방식으로 빌드를 수행할 수 있다.
  • 다양한 플러그인을 제공하기때문에, 많은 일들을 자동화시킬 수 있다.

Maven 기본

  • Archetype을 이용하여(그냥 인텔리제이에서) Maven 기반 프로젝트를 생성할 경우, 프로젝트 하위에 pom.xml 파일이 생성된다.
  • 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>
    • 내꺼
      <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>
      
          <groupId>example</groupId>
          <artifactId>firstweb</artifactId>
          <version>1.0-SNAPSHOT</version>
          <name>firstweb</name>
          <packaging>war</packaging>
      
          <properties>
              <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
              <maven.compiler.target>1.8</maven.compiler.target>
              <maven.compiler.source>1.8</maven.compiler.source>
              <junit.version>5.7.1</junit.version>
          </properties>
      
          <dependencies>
              <dependency>
                  <groupId>javax.servlet</groupId>
                  <artifactId>javax.servlet-api</artifactId>
                  <version>4.0.1</version>
                  <scope>provided</scope>
              </dependency>
              <dependency>
                  <groupId>org.junit.jupiter</groupId>
                  <artifactId>junit-jupiter-api</artifactId>
                  <version>${junit.version}</version>
                  <scope>test</scope>
              </dependency>
              <dependency>
                  <groupId>org.junit.jupiter</groupId>
                  <artifactId>junit-jupiter-engine</artifactId>
                  <version>${junit.version}</version>
                  <scope>test</scope>
              </dependency>
          </dependencies>
      
          <build>
              <plugins>
                  <plugin>
                      <groupId>org.apache.maven.plugins</groupId>
                      <artifactId>maven-war-plugin</artifactId>
                      <version>3.3.1</version>
                  </plugin>
              </plugins>
          </build>
      </project>
    • 각각의 태그의 의미는 다음과 같다.
      • project : pom.xml 파일의 최상위 루트 엘리먼트(Root Element)입니다.
      • modelVersion : POM model의 버전입니다.
      • groupId : 프로젝트를 생성하는 조직의 고유 아이디를 결정합니다. 일반적으로 도메인 이름을 거꾸로 적습니다.
      • artifactId : 해당 프로젝트에 의하여 생성되는 artifact의 고유 아이디를 결정합니다. Maven을 이용하여 pom.xml을 빌드할 경우 다음과 같은 규칙으로 artifact가 생성됩니다. artifactid-version.packaging. 위 예의 경우 빌드할 경우 examples-1.0-SNAPSHOT.jar 파일이 생성됩니다.
      • packaging : 해당 프로젝트를 어떤 형태로 packaging 할 것인지 결정합니다. jar, war, ear 등이 해당됩니다.
      • version : 프로젝트의 현재 버전. 추후 살펴보겠지만 프로젝트가 개발 중일 때는 SNAPSHOT을 접미사로 사용합니다. Maven의 버전 관리 기능은 라이브러리 관리를 편하게 합니다.
      • name : 프로젝트의 이름입니다.
      • url : 프로젝트 사이트가 있다면 사이트 URL을 등록하는 것이 가능합니다.
    • Maven의 가장 큰 이점은 Dependency Management 기능이다.
    • 위 pom.xml파일에서 <dependencies/> 엘리먼트가 Dependency Management 기능의 핵심이라고 할 수 있다. 해당 엘리먼트 안에 필요한 라이브러리를 지정하게 된다.

Maven을 이용한 웹 어플리케이션 실습

핵심개념

  • pom.xml
  • project facet
  • project properties menu

실습

  1. Maven Project 생성

    • 아키타입(Archetype) 선택
    • 웹 어프리케이션을 개발하기 위해 maven-archetype-webapp을 선택

아키타입 Archetype

  • 아키타입이란 일종의 프로젝트 템플릿이라고 말할 수있다.
  • 어떤 아키타입을 선택했냐에 따라 자동으로 여러 파일들을 생성하거나 라이브러리를 셋팅해준다.
  1. Artifact Coordinates

    • Group Id는 보통 프로젝트를 진행하는 회사나 팀의 도메인 이름을 거꾸로 적는다.
    • Artifact Id는 해당 프로젝트의 이름을 적는다.
    • 버전은 보통 기본값(0.0.1-SNAPSHOT)으로 설정다한하.
    • package이름은 group id와 Artifact Id가 조합된 이름이 된다.
    • Group Id를 org.example이고 Artifact Id가 mavenPractice으로 설정했기 때문에 package이름은 org.example.mavenProject가 된다.
    • NEXT 클릭!
  2. 그대로 Finish

    • 프로젝트 디렉토리 구조
      • pom.xml : Maven 설정파일

junit

  • 테스트를 위한 라이브러리

어렵다...못하겠다...

profile
study blog

0개의 댓글