Skip to content

Maven + Spring framework (Eclipse + eGov) #
Find similar titles

Structured data

Category
Programming

메이븐(Maven)은 개발자로 하여금 자바용 프로젝트 관리를 쉽게 도와주는 빌드 툴로 여기선 이클립스(Eclipse) IDE(Integrated Development Environment)에서 메이븐을 이용한 스프링 기반의 프로젝트 생성방법을 예제로 확인하고자 한다.

이클립스는 이클립스 재단(http://www.eclipse.org/)에서 제공하는 오픈소스 통합 개발환경으로 자바 프로그램에 최적화되어 있다. 여기서는 이클립스를 국내 공공부분 프로젝트에 최적화 해놓은 전자정부프레임워크(eGov)용 이클립스 개발환경에서 웹기반 프로젝트를 생성하도록 한다.

전자정부프레임워크(eGov)는 한국정보화진흥원(https://www.nia.or.kr/)에서 만든 웹 기반 어플리케이션 프레임워크로 정부, 공기업, 공공기관 등의 웹사이트에 자주 사용되는 공통 기능들을 Java의 스프링(Spring) 프레임워크 기반으로 미리 만들어 놓은 표준프레임워크이다. 스프링 프레임워크를 그냥 사용하면 편할텐데 구태여 비슷한 걸 왜 또 만들었을까 의문을 가질 수 있을텐데, 확장성이 좋은 스프링 프레임워크를 사용하면 사용자마다 검증되지 않은 플러그인 들을 적용하다 보면 예상치 못한 오류가 발생할 수 있기 때문에 검증된 코드로 구성되어 신뢰성이 있는 전자정부프레임워크를 사용하는 것이 스프링에 익숙하지 않은 사용자에게는 큰 도움이 될 것이다.

메이븐 프로젝트 생성 #

전자정부프레임워크는 이클립스(Eclipse) IDE에서 플러그인 방식으로 설치가 가능하고 전자정부프레임워크 개발환경에 최적화된 이클립스는 표준프레임워크 포털(http://www.egovframe.go.kr) 에서 내려받을 수도 있다. 2018년 기준 배포되는 전자정부프레임워크 최신 버전은 3.7 버전으로 스프링 프레임워크는 4.2.4을 기본으로 사용하고 있다. 개발환경이 되는 이클립스는 4.6(Neon) 버전을 사용하고 있다.

전자정부프레임워크 기반 프로젝트 개발환경 구성은 다음과 같다.

  • JDK 1.8+ BR
  • Eclipse 4.6 (Neon)
  • eGove 3.7
  • spring framework 4.2.4 RELEASE
  • MAVEN 4.0
  • Tomcat 8.+

여기서는 이클립스(Eclipse)에서 전자정부프레임워크(eGov) 기반 메이븐 웹 프로젝트를 생성하고 메이븐 설정과 테스트 방법을 알아보고, 아파치 그룹에서 제공하는 Tomcat 웹 어플리케이션 서버를 이클립스에서 실행하고 메이븐 프로젝트가 어떻게 서비스 되는지를 예제를 통해 알아보도록 하겠다.

1. 전자정부프레임워크 프로젝트 생성 #

이클립스를 실행한 후 "Package Explorer" 뷰에서 마우스 오른쪽 버튼을 클릭해 팝업메뉴에서 "New"를 선택하고 "Project.."를 클릭하면 다음과 같이 프로젝트 생성 팝업창이 활성화된다. 여기서는 전자정부프레임워크의 웹 프로젝트를 생성할 것이기 때문에 "eGovFrame > eGovFrame Web Project"를 선택한 후 "Next" 버튼을 클릭해 다음 단계로 이동한다.

프로젝트 생성 팝업창-1

선택한 전자정부프레임워크 웹 프로젝트 생성화면으로 이동하면 "Project name"에 프로젝트 이름을 입력한다. 톰캣 8에서 지원하는 서블릿 모듈은 3.1까지 가능하기 때문에 "Dynamic Web Module version"을 3.1로 변경한다 전자정부프레임워크는 기본적으로 메이븐을 통한 프로젝트 관리가 이루어지기 때문에 하단의 "Maven Setting" 영역에 메이븐 필수 설정 정보를 입력하도록 한다.

참고사항으로 "Group Id" 는 프로젝트를 다른 프로젝트와 구분하기 위한 이름으로 자바의 패키지 명명 규칙을 따른다. 일반적으로 도메인 주소를 거꾸로 입력하고는 한다. 예를 들어 도메인 주소가 "insilicogen.com" 라고 하면 그룹 ID를 "com.insilicogen"를 사용한다. "Artifact Id"는 현재 프로젝트를 빌드(build)했을 때 버전을 제외한 배포 파일의 이름으로 이름은 아무거나 입력이 가능하고, 소문자만 사용하고 특수문자는 사용하지 않는 것을 권장하고 있다. 모든 내용을 입력한 후에 "Finish" 버튼을 클릭하면 웹 프로젝트 생성이 완료된다.

프로젝트 생성 팝업창-2

다음은 이클립스에서 메이븐 기반의 웹 프로젝트가 생성되었을 때의 초기 화면이다.

프로젝트 생성 완료

프로젝트 생성이 완료된 후 "Problems" 뷰를 보면 web.xml 파일이 없어서 프로젝트 오류가 발생하는데 이는 예제 코드를 포함하지 않았기 때문에 "src > main > webapps > WEB-INF" 폴더에 web.xml 파일이 생성되지 않았기 때문에 발생한 것으로 WEB-INF 폴더에 web.xml 파일을 생성하고 다음과 같이 내용을 입력하면 프로젝트 오류는 더 이상 발생하지 않게 된다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
         http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd">
    <display-name>Maven Example Application</display-name>         
</web-app>

2. 메이븐 테스트 실행 #

메이븐 프로젝트는 "pom.xml" 파일에서 라이브러리 의존성과 테스트와 빌드 설정을 할 수 있는데, 메이븐 설정에 대한 자세한 설명은 Maven 페이지를 참고하도록 한다. 여기서는 프로젝트가 생성되면 포함되는 "pom.xml" 을 메이븐 테스트를 통해 입력내용을 검증하는 방법을 알아보도록 하겠다. 전자정부프레임워크 웹 프로젝트는 spring framework 기반의 웹 어플리케이션을 위한 필요한 의존성 정보들이 pom.xml 파일에 포함되어 있기 때문에 예제 프로젝트에선 별도로 설정을 추가할 필요가 없다.

"Package Explorer" 뷰에서 생성한 "example" 프로젝트의 "pom.xml" 파일을 선택하고 마우스 오른쪽 버튼을 클릭하면 팝업 메뉴의 "Run As"를 선택하면 다음과 같이 하위 메뉴를 확인할 수 있다.

메이븐 테스트 실행

[INFO] Scanning for projects...
[WARNING] Some problems were encountered while building the effective model for example:example:war:1.0.0
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-surefire-plugin is missing. @ line 157, column 21
[WARNING] The expression ${artifactId} is deprecated. Please use ${project.artifactId} instead.
[WARNING] The expression ${version} is deprecated. Please use ${project.version} instead.
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[INFO] ------------------------------------------------------------------------
[INFO] Building example 1.0.0
[INFO] ------------------------------------------------------------------------
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ example ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ example ---
[INFO] Nothing to compile - all classes are up to date
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ example ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ example ---
[INFO] Nothing to compile - all classes are up to date
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ example ---
[INFO] Tests are skipped.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.079 s
[INFO] Finished at: 2018-12-07T13:43:32+09:00
[INFO] Final Memory: 11M/491M
[INFO] ------------------------------------------------------------------------

전자정부프레임워크에서 제공되는 메이븐 설정 내용이 구버전의 메이븐에 맞게 되어 있어 경고(WARNING) 이력이 발생한다. 해당 경고 내용은 현재 버전의 메이븐에서는 문제가 되지 않지만 향후 문제가 될 수 있기 때문에 되도록이면 최대한 조치하는 것이 좋다.

경고1) [WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-surefire-plugin is missing. @ line 157, column 21 pom.xml 파일의 157번째 줄을 내용을 확인하면 다음과 같이 되어 있을 것이다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <skipTests>true</skipTests>
        <forkMode>once</forkMode>
        <reportFormat>xml</reportFormat>
        <excludes>
            <exclude>**/Abstract*.java</exclude>
            <exclude>**/*Suite.java</exclude>
        </excludes>
        <includes>
            <include>**/*Test.java</include>
        </includes>
    </configuration>
</plugin>

경고 내용을 보면 설정 요소(element) 중에 "build > plugins > plugin > version" 가 누락되었다고 말하고 있다. 메이븐 레포지토리 사이트에서 " maven-surefire-plugin" 을 검색해 제공되는 버전을 확인한 후에 다음과 같이 버전 정보를 추가해 준다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.1</version>
    <configuration>....</configuration>
</plugin>

경고2)[WARNING] The expression ${version} is deprecated. Please use ${project.version} instead. [WARNING] The expression ${version} is deprecated. Please use ${project.version} instead.

위의 내용은 메이븐 4 버전에서의 expression 체계가 변경되어 발생하는 문제로 pom.xml 파일을 열어 "${version}"이 설정된 부분을 찾아보면 다음과 같이 되어 있을 것이다.

<build>
    <defaultGoal>install</defaultGoal>
    <directory>${basedir}/target</directory>
    <finalName>${artifactId}-${version}</finalName>
    <pluginManagement>
    ........

위의 내용은 다음과 같이 변경하면 해결이 된다.

<build>
    <defaultGoal>install</defaultGoal>
    <directory>${basedir}/target</directory>
    <finalName>${project.artifactId}-${project.version}</finalName>
    <pluginManagement>
    ........

경고3) [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! 위의 경고 내용은 메이븐 프로젝트 빌드를 위한 인코딩 코드가 "UTF-8"로 되어 있지 않아 발생하는 문제로 pom.xml 파일을 열어 "properties" 요소에 다음과 같이 두 가지 설정을 추가하면 해결이 된다.

<properties>
    <spring.maven.artifact.version>4.2.4.RELEASE</spring.maven.artifact.version>
    <egovframework.rte.version>3.7.0</egovframework.rte.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

경고 조치가 완료된 후 다시 메이븐 테스트를 실행하면 다음과 같이 경고가 사라지고 다운로드 받지 않은 의존성 라이브러리들을 메이븐 저장소에서 자동으로 다운로드 받는 것을 확인할 수 있다.

[INFO] Scanning for projects...                                  
[INFO] ------------------------------------------------------------------------
[INFO] Building example 1.0.0
[INFO] ------------------------------------------------------------------------
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ example ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ example ---
[INFO] Nothing to compile - all classes are up to date
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ example ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ example ---
[INFO] Nothing to compile - all classes are up to date
[INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ example ---
[INFO] Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/maven-surefire-common/2.22.1/maven-surefire-common-2.22.1.pom
........
[INFO] Tests are skipped.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.438 s
[INFO] Finished at: 2018-12-07T14:04:00+09:00
[INFO] Final Memory: 14M/373M
[INFO] ------------------------------------------------------------------------

3. 톰캣 서버 구동 및 서비스 확인 #

메이븐 테스트가 무사히 통과되면 웹 어플리케이션을 빌드하고 배포할 수 있는 기본 상태가 완성된 것이다. 웹 어플리케이션이 톰캣 서버에서 정상적으로 서비스 되는지 확인하기 위해 "src > main > webapps" 폴더에 index.html 파일을 추가한다. 프로젝트에 파일 추가는 Ctrl+N 단축키를 실행하면 추가할 파일 종류를 html 로 선택한 후 HTML 생성 팝업창에 파일 이름을 "File name" 에 입력한 후 "Finish" 버튼을 클릭하면 해당 폴더에 추가 된 것을 확인할 수 있다.

인덱스 페이지 추가

index.html 파일을 편집창에서 열어 다음과 같이 내용을 입력한다.

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

예제 파일 작성이 완료되면 톰캣 서버를 실행해 웹 브라우저에서 서비스 상태를 확인할 수 있다. 이클립스에서 톰캣 서버를 실행하기 위해선 톰캣 서버가 미리 설치되어 있어야 하며 이클립스의 "Windows > Preferences > Server > Runtime Environment" 에서 설정할 수 있다. 톰캣 서버 등록되어 있다면 "Project Explorer" 뷰에서 해당 프로젝트를 선택한 후 마우스 오른쪽 마우스를 클릭해 팝업 메뉴에서 "Run As > Run on Server" 를 선택해 톰캣 실행을 진행한다.

톰캣서버실행

"Run on Server" 메뉴를 클릭하면 실행할 서버를 선택하는 팝업창이 뜨고 등록된 Tomcat 서버를 선택하고 "Next" 버튼을 클릭한다.

톰캣서버선택

톰캣 서버에서 실행할 웹 어플리케이션에 "example(example-1.0.0)" 이라는 이름으로 해당 프로젝트가 톰캣 컨텍스트(Context)로 추가된 것을 확인할 수 있다.

서블릿 컨텍스트 추가

"Finish" 버튼을 클릭하면 콘솔 뷰에서 톰캣 서버의 실행 로그를 통해 서버 구동 상태를 확인할 수 있다. 톰캣 서버 구동이 완료되면 웹 브라우저에서 다음과 같이 결과를 확인할 수 있다.

톰캣서버 실행결과

4. 메이븐 의존성 확인과 추가 #

이클립스에선 메이븐 설정을 위한 전용 에디터를 제공해 주기 때문에 pom.xml 파일을 쉽게 설정하고 의존성을 확인할 수 있다. 다음은 전용 편집기에서 의존성 관계 설정을 확인하는 화면으로, 중복되거나 충돌나는 것들을 한 눈에 확인할 수 있다.

메이븐 의존성 추가

Suggested Pages #

0.0.1_20140628_0