Web/Java+Spring

Maven

WakaraNai 2021. 5. 13. 22:52
728x90
반응형

Maven

 

빌드, 패키징, 문서화, 테스트, 테스트리포팅, git, 의존성 관리(Dependency Management), 배포, 형상관리 서버와의 연동(SCMs) 작업 등을 손쉽게 해주는 도구

 

CoC (Convention over Configuration) : 관습. 예로 소스파일의 위치와 소스가 컴파일된 파일의 위치를 미리 지정하는 것

 

 

장점

  • Maven을 사용하면 의존성 라이브러리를 관리하기 편리함. - JSTL처럼 lib 폴더에 복붙X
  • 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>

 

위 pom.xml 파일에서 <dependencies/> 엘리먼트가 Dependency Management 기능의 핵심이라고 할 수 있습니다.

해당 엘리먼트 안에 필요한 라이브러리를 지정하게 됩니다.

  • 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을 등록하는 것이 가능합니다.

 

실습

1. 이클립스에서 Maven Project 생성 시작

 File - New - Project -  Maven Project- Next - Next

 

2. Archetype(아키타입) 선택하기

일종의 프로젝트 템플릿. 어떤 아키타입을 선택했느냐에 따라서 자동으로 여러 파일을 생성 및 라이브러리 셋팅해줌.

Maven으로 웹 어플리케이션을 개발하려면 maven-archetype-webaap 으로 선택 후 NEXT

 

 

3. Group Id와 Artifact id 지정  후 Finish

Group id : 보통 회사나 팀의 도메인 이름을 거꾸로 적음

Artifact id : 해당 프로젝트의 이름

package : group id와 artifact id 조합

 

 

 

4. Maven의 플러그인을 잘 사용할 수 있도록 설정하기

 

  • JDK 1.8 버전으로 설정하기
    • pom.xml에서
    • maven compiler .source와 .target을 1.8로 수정 후 저장
    • <properties>
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
          <maven.compiler.source>1.8</maven.compiler.source>
          <maven.compiler.target>1.8</maven.compiler.target>
        </properties>

 

  • WAS Runtime을 Tomcat으로 설정하기
    • index.jsp 파일에서 발생하는 에러를 해결해줌
    • web.xml 파일 삭제 -> 이 파일이 존재하면 아무리 3.1로 바꾸어도 2.3으로 돌아감.
    • pom.xml의 <dependencies>에 아래 코드 추가 후 저장
    • <dependency>
              <groupId>javax.servlet</groupId>
              <artifactId>javax.servlet-api</artifactId>
              <version>3.1.0</version>
              <scope>provided</scope>
          </dependency>
      •  pom.xml 에서의 scope 설명
        • compile(기본값) : 컴파일 시 필요. 테스트 및 런타임에도 클래스 패스에 포함됨. 
        • runtime : 런타임 시 필요. ex-JDBC드라이버. 컴파일 시 필요 없지만 실행 시 필요함
        • provided : 컴파일 시 필요함. 배포 시 제외됨. 의미는 런타임 때 컨테이너 등에서 제공된 모듈. ex - servlet, jsp api 등
        • test : 테스트 코드를 컴파일 할 때 필요. 테스트 시 클래스 패스에 포함되며, 배포 시 제외됨.
    • 프로젝트 우클릭 -> Properties -> Project Facets -> Runtimes -> Apache Tomecat 체크하기
    • 이전에 Dynamic Web Application에서는 WAS Runtime 설정을 Tomcat으로 지정했기에 tomcat 라이브러리를 이클립스에서 사용할 수 있었음. Maven에선 미리 지정하지 않았기에 Servlet 라이브러리를 찾지 못해서 발생한 에러
    • Apply and Close

JSTL은 Tomcat이 기본으로 제공하지 않기에 컴파일 할 때도, 배포할 때도 사용돼야 함

그래서 scope를 아예 삭제함 (provided가 아님)

  • JSTL 라이브러리 추가
    • JSTL은 Tomcat이 기본 제공X. 그래서 컴파일, 배포 시에도 사용돼야 함 (그래서 scope 아예 삭제. provided아님)
    • pom.xml 에 아래 코드 추가 후 저장 
    •  
    • <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>​
  • Dynamic Web Module버전을 3.1로 설정
    • 2.3 버전에서는 EL 표기법의 결과가 출력되지 않기에 버전을 높여줘야 함.
    • /WEB-INF에 web.xml 파일을 아래 내용으로 덮은 후 저장
    • <?xml version="1.0" encoding="UTF-8"?>
      <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
               xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
        <display-name>Archetype Created Web Application</display-name>
      </web-app>
    • 프로젝트 우클릭 -> Properties -> Project Facets -> Dynamic Web Module -> Version -> 3.1 선택
  • Update 해줌으로써 모든 설정이 완료되었는지 재점검
    • 프로젝트 우클릭 -> Maven -> Update Project -> OK

 

  • 확인
    • 아래 사진처럼 되었다면 apply and close

  • 모든 설정 이후 디렉토리를 확인했을 때, 1.8도 보여야 함

 

 

 

 

4. pom.xml 및 대략적인 디렉터리 구조 확인

java 코드를 담아둘 폴더 생성하기

 

 

 

 

 

 

 

 

 

 

 

5. JSTL 적용한 JSP 파일로 테스트

jstl03.jsp 를 /src/main/webapp에 생성 후 Run on Server

B학점 입니다. 가 정확히 떠야 함

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>   
<% request.setAttribute("score", 83); %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<c:choose>
	<c:when test="${score >= 90}">
	A학점입니다.
	</c:when>
	<c:when test="${score >= 80}">
	B학점입니다.
	<c:otherwise>
	F학점입니다.
	</c:otherwise>
</c:choose>

</body>
</html>

 

 

728x90
반응형

'Web > Java+Spring' 카테고리의 다른 글

JDBC - 입력/수정/조회/삭제  (0) 2021.05.14
JDBC 준비  (0) 2021.05.14
JSTL (JSP Standard Tag Library)  (0) 2021.05.10
EL (Expression Language) for JSP  (0) 2021.05.10
Scope  (0) 2021.05.10