[Spring] 메이븐 웹 어플리케이션 생성하기
IDE : Spring Tool Suite 4( 개발환경 )
WAS : Apache Tomcat 8.0.9
STEP#01. 메이븐 웹 어플리케이션 프로젝트 생성하기
메이븐 프로젝트는 이클립스에서 생성하거나, 도스 명령행에서 mvn 명령어를 사용하여 생성하는 방법이 있다.
이클립스에서 메이븐을 편리하게 사용하기 위한 플러그인으로 m2eclipse를 사용할 수 있다.
표준프레임워크 개발 환경에는 m2eclipse 플러그인이 포함되어 있다.
표준 프레임워크에서는 두 가지 방식으로 메이븐 프로젝트를 생성할 수 있다.
① 개발 환경에서 제공하는 eGovFrame Perspective( 퍼스펙티브 )를 이용한 메이븐 프로젝트 생성
② 메이븐 아키타입( archetype ) 플러그인을 이용한 메이븐 프로젝트 생성
해당 포스팅에서는 개발 환경에서 제공하는 eGovFrame Perspective( 퍼스펙티브 )를 이용하여 메이븐 프로젝트를 생성할 것이다.
m2eclipse를 사용하면 이클립스 안에서 메이븐의
- 디펜더시 설정
- 플러그인 설정
- pom.xml의 편집
- 리포팅 설정
등을 간편하게 실행할 수 있다.
개발환경 : [ New ] → [ Other ] → [ Maven ] → [ Maven Project ] 를 선택한다.
Select a wizard 팝업창에서 Maven Project를 선택해준다.
Next 버튼을 클릭하여 다음으로 넘어간다.
Group Id | org.apache.maven.archetypes |
Artifact Id | maven-archetype-webapp |
위와 같이 선택하고 Next 버튼을 클릭한다.
Group Id | com.maven.project |
Artifact Id | spring_web |
Version | 0.0.1-SNAPSHOT |
Package | com.maven.project.spring_web |
위와같이 입력및 선택하고 Finish 버튼을 클릭하면 메이븐 프로젝트가 생성된다.
생성된 pom.xml 파일 상단을 살펴보면
위에서 입력한 코디네이트 정보가 입력되어 있는것을 확인 할 수 있다.
# @File pom.xml <modelVersion>4.0.0</modelVersion> <groupId>com.maven.project</groupId> <artifactId>spring_web</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>spring_weba Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> |
STEP#02. 톰캣 디플로이어 사용
톰캣 디플로이어는 웹 브라우저를 통해 서버에 웹 어플리케이션을 쉽게배포( deploy )할 수 있는 배포 관리자라고 보면 된다.
#01. tomcat-users.xml 설정하기
개발환경 : [ Servers ] → [ v8.0 Server at localhost-config ] → [ tomcat-users.xml ]
tomcat-users.xml은 역할과 유저를 등록하는 부분이다.
롤( role )은 tomcat, manager-gui, manager-script, admin-gui 4가지를 등록한다.
rolename은 정해져 있는 값들인데, manager를 웹 화면에서 사용( manager-gui )하기 위한 역할과
메이븐 등의 스크립트에서 접근( manager-script )하기 위한 역할등을 의미한다.
# @File tomcat-users.xml
<!-- 코드 중략 -->
<!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
-->
<role rolename="tomcat"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="admin-gui"/>
<user
username="saakmiso"
password="1q2w3e"
roles="tomcat, manager-gui, admin-gui, manager-script"
/>
</tomcat-users>
user의 username과 password는 자유롭게 설정하면 된다.
그리고 설정했던 4개의 롤( role )을 부여한다.
#02. server.xml 설정하기
개발환경 : [ Servers ] → [ v8.0 Server at localhost-config ] → [ server.xml ]
서버 설정 파일에는 웹 어플리케이션 하나당 하나의 Context 태그를 사용하여 위치와 URL 패스정보를 저장할 수 있다.
# @File server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 코드 중략 -->
<!-- port 변경 -->
<Connector connectionTimeout="20000" port="8181" protocol="HTTP/1.1" redirectPort="8443"/>
<!-- 코드 중략 -->
<!-- 톰캣 매니저 디플로이어 URL 지정 -->
<Context path="/manager" privileged="true" docBase="${catalina.home}/webapps/manager"/>
</Host>
</Engine>
</Service>
</Server>
path 부분에 지정된 값은 브라우저에서 요청을 보내는 URL경로 http://127.0.0.1:8181/manager가 될 것이다.
개발환경 : [ Servers ] → [ v8.0 Server at localhost-config ]을 실행한다.
브라우저를 열고 http://127.0.0.1:8181/manager 호출하고
tomcat-users.xml에서 지정한 사용자 이름과 비밀번를 입력하여 로그인 한다.
이로써 톰캣 서버의 디플로이어( deployer )를 사용할 수 있게 되었다.
STEP#03. 메이븐 톰캣 플러그인 설정
메이븐 프로젝트를 톰캣 서버에 배포하기 위해서는 톰캣 플러그인을 추가한다.
생성한 프로젝트를 선택하고 마우스 오른쪽 클릭 후 [ Maven ] → [ Add Plugin ] 을 선택한다.
Add Plugin 창이 오픈되면 다음과 같이 입력한다.
Group Id | org.apache.tomcat.maven |
Artifact Id | tomcat7-maven-plugin |
Version | 2.2 |
이렇게 하면 pom.xml 파일에 톰캣 플러그인이 추가된 것을 볼 수 있다.
# @File pom.xml
<build>
<finalName>spring_webapp</finalName>
<!-- 코드 중략 -->
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
</project>
tomcat7-maven-plugin 플러그인 태그 <version> 밑에 configuration, url, username, password 등을 추가하여 작성한다.
작성한 user와 password 정보는 tomcat-users.xml 파일에 반드시 기술된 값을 사용해야 한다.
최종적인 플러그인 태그는 아래와같다.
# @File pom.xml
<build>
<finalName>spring_webapp</finalName>
<!-- 코드 중략 -->
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<!-- configuration, url, username, password 추가 -->
<configuration>
<url>http://localhost:8181/manager/text</url>
<username>saakmiso</username>
<password>1q2w3e</password>
</configuration>
</plugin>
</plugins>
</build>
</project>
이제 Tomcat 8.0 서버를 구동한다.
개발환경 : [ Servers ] → [ v8.0 Server at localhost-config ] → [ 실행 ]
서버가 정상적으로 구동되면, 웹 어플리케이션에서 [ Run As ] → [ Maven Build ] 를 작업을 수행한다.
Maven build가 실행되면 실행할 플러그인 값을 입력해 준다.
Goals | tomcat7:deploy |
위와같이 입력해주고 빌드를 실행시켜 보면 콘솔 뷰에서 BUILD SUCCESS 메시지를 확인할 수 있다.
[INFO] --- tomcat7-maven-plugin:2.2:deploy (default-cli) @ spring_web --- [INFO] Deploying war to http://localhost:8181/spring_web Uploading: http://localhost:8181/manager/text/deploy?path=%2Fspring_web Uploaded: http://localhost:8181/manager/text/deploy?path=%2Fspring_web (3 KB) [INFO] tomcatManager status code:200, ReasonPhrase:OK [INFO] OK - Deployed application at context path /spring_web [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.462 s [INFO] Finished at: 2020-12-15T21:45:19+09:00 [INFO] ------------------------------------------------------------------------ |
빌드가 성공했다면 브라우저를 통해 http://127.0.0.1:8181/메이븐_프로젝트명에 접속해보면
Hello World! 가 출력되는 것을 확인 할 수 있다.
설정이 완료되면 어떤 점들이 변경되는지 살펴보자.
- Server Locations 부분이 비활성화되어 있어 변경이 불가능하다.
- Use workspace metadata는 톰캣 서버가 인스톨된 디렉터리를 변경하지 않고, 이클립스의 워크스페이스 복베존을 따로 가지는 것을 의미한다.
- Use Tomcat installation은 톰캣 서버가 인스톨된 디렉터리와 동기화하여 변경 사항이 그대로 반영되는것을 의미한다.
- Use custom location은 톰캣 서버가 인스톨된 디렉터리를 변경하지 않고, 사용자가 사용할 디렉터리를 따로 지정하는 것이다.
변경을 원한다면 새롭게 서버를 등록해야 한다.
최초에 등록될 때 선택할 수 있고, 서버를 실행하고 어플리케이션을 배포하기 시작하면 변경이 불가능한 상태로 바뀐다.
그 아래 나오는 Server path 부분의 디렉터리를 찾아가면된다.
이클립스의 워크스페이스 아래에 .metadata\.plugins\org.eclipse.wst.server.core\tmp0\webapps 디렉터리를 찾아보면
개속해서 tomcat7:undeploy나 tomcat7:redeploy 등을 수행해보고,
위 디렉토리의 변화등을 살펴보자.
① tomcat7 : undeploy 실행
② tomcat7 : redeploy 실행
tomcat7:redeploy는 동일한 어플리케이션이 존재해도, 에러 없이 배포해주는 골( goal )이다.
지금은 로컬 작업 환경에서 테스트 하고 있지만, 원격 서버에도 바로 배포할 수 있다.
웹 어플리케이션을 제작하고 나면 실제 웹 서버에 배포한 이 후,
클라이언트 브라우저에서 접속이 가능하다.
플러그인 configuration 정보를 실제 연결하고자 하는 웹 서버의 주소와 사용자 이름, 패스워드 등을 입력하면 된다.
포트 번호는 서버가 80포트를 사용하는 경우 생략할 수 있다.
# @File pom.xml <!-- 코드 중략 --> <configuration> <url>http://웹_서버의_주소/manager/text</url> <username>사용자 이름</username> <password>비밀번호</password> </configuration> |
메이븐 톰캣 플러그인은 톰캣 서버의 manager 기능을 사용한다.
이를 통해 웹 어플리케이션의 deploy 및 undepoy 등을 수행한다.
앞서 이를 위한 톰캣 manager 설정을 마치고, 메이븐의 pom.xml 파일을 수정하였다.
메이븐 톰캣 플러그인의 사용법은 http://tomcat.apache.org/maven-plugin.html에서 정보를 찾아 볼 수 있다.
Version 2.2를 선택하여 골( goal )들을 확인한다.
참고로 이클립스에서 컴파일하고 실행시키는 것이 아니므로 에러는 상관 없이 실행되지만, 에러를 없애고 싶다면,
[ properties ] → [ Target Runtime ] → [ Apache Tomcat v8.0 ]을 체크하면 된다.
이렇게 하면 웹 어플리케이션을 실행시키기 위해 필요한 라이브러리 패스가 추가된다.
STEP#04. 메이븐 디펜던시 설정
메이븐 프로젝트 디렉터리 구조를 살펴보면 다음과 같다.
src/main/java | · 자바 코드가 생성된다. |
src/main/resources | · 각종 설정 파일들이 위치한다. |
src/test/java | · JUnit 등의 테스트 코드들이 위치한다. |
src/test/resources | · 테스트 코드에서 참조하게 될 설정 파일들이 위치한다. |
pom.xml | · pom.xml 파일에 기술된 디펜던시 Maven Dependencies에 포함하고 있다. |
그렇지만 위에서 생성한 프로젝트의 구조에서는 pom.xml을 제외한 다른 디렉터리는 생성되어 있지 않다.
pom.xml은 이미 생성되어 있기에 src/main/java, src/main/resources, src/test/java, src/test/resources를
각각 하나씩 생성해 주면 되는데 그전에 먼저 작업할 내용이 있다.
생성한 메이븐 프로젝트를 우클릭하고 [ Properties ] 를 선택한다.
[ Properties ] → [ Java Build Path ] → [ Source ] 경로로 이동해 준다.
src/main/java( missing ), src/test/java( missing )를 삭제해준다.
이제 생성한 메이븐 프로젝트에 디렉터리를 생성해 주면된다.
개발환경 : [ New ] → [ Other ] → [ Java ] → [ Source Folder ] 를 선택한다.
① src/mian/java
② src/main/resources
③ src/test/java
④ src/test/resources
위 순서대로 디렉토리를 하나씩 생성해 주면 된다.
Contains test sources:Yes로 변경을 해야하는데 되질 않는다.
이 이유는 추후 좀더 찾아볼 계획이다.