페이지

2014년 2월 28일 금요일

메이븐을 이용하여 톰캣에 배포하기

메이븐을 이용하여 톰캣에 자동배포하는 방법을 정리해 봅니다.


1.
우선 톰캣의 tomcat-users.xml 파일에 다음 내용을 추가합니다.
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="user1" password="pass1" roles="manager-gui,manager-script"/>

1-1.
<role rolename="manager-gui"/> 
Tomcat Web Application Manager 사용권한을 활성화 합니다.
http://localhost:8080/manager/

1-2.
<role rolename="manager-script"/>
스크립트로 관리하는 인터페이스를 활성화 합니다.
http://localhost:8080/manager/text

1-3.
<user username="user1" password="pass1" roles="manager-gui,manager-script"/>
user1 의 암호를 pass1으로 하고 위의 두가지 권한을 부여합니다.

2.
메이븐 pom.xml에 플러그인을 등록합니다.
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/</path>
<url>http://localhost:8080/manager/text</url>
<username>user1</username>
<password>pass1</password>
</configuration>
</plugin>

2-1.
<path>/</path> 
배포될 경로를 설정합니다. 현재는 루트 경로를 지정하였습니다.  http://localhost:8080/
http://localhost:8080/abc/ 로 배포하고 싶다면 <path>/abc</path> 로 설정하면됩니다.

2-2.
<url>http://localhost:8080/manager/text</url>
톰캣관리자의 스크립트 모드 경로를 지정합니다.

2-3.
<username>user1</username>
<password>pass1</password>
위의 톰캣에서 설정한 유저를 적어줍니다.

3.
이제 웹어플리케이션을 빌드하고 톰캣에 배포하는 명령입니다.
mvn tomcat7:redeploy

4.
아래의 명령으로 톰캣에서 제거할 수도 있습니다.
mvn tomcat7:undeploy
5.
참고


2014년 2월 26일 수요일

Spring Guide - Securing a Web Application 학습정리

https://spring.io/guides/gs/gradle/ Building Java Projects with Gradle
https://spring.io/guides/gs/securing-web/ Securing a Web Application
https://spring.io/guides/gs/convert-jar-to-war/ Converting a Spring Boot JAR Application to a WAR

학습내용 정리

1.
gradle 설치 혹은 업그레이드
http://www.gradle.org/downloads
파일 다운로드 받고 압축해제 후 원하는 위치로 이동 해줍니다.
예: D:\gradle-1.11
기존 gradle 폴더는 지워버리고
환경변수에서 GRADLE_HOME=D:\gradle-1.11 로 설정합니다.
PATH 에 %GRADLE_HOME%\bin 를 추가합니다.

gradle -version
: 버전 출력
gradle
: welcome message 출력
gradle tasks
: 사용가능한 태스크 목록 출력. gradle taskname 형태로 실행
gradle wrapper
: gradlew.bat 파일을 생성 시켜줍니다. 이 파일은 시스템내에 gradle이 설치되어있지 않아도 알아서 다운로드하고 빌드해줍니다. 이렇게 wrapper를 생성하고 프로젝트를 공유하면 그래들이 설치되어있지 않은 유저도 바로 빌드 할 수 있게됩니다.


2.
가이드에서
build.gradle
MvcConfig.java
home.html
hello.html
까지만 작성하고 실행해보면 ( gradlew clean build )

다음과 같은 에러가 발생하는데
Execution failed for task ':bootRepackage'.

public static void main(String[] args)
메소드를 가진 설정 클래스가 없어서 그런것입니다.

가이드에선 Application.java 파일을 만들어 주면 제대로 컴파일됩니다.

3.
java -jar build/libs/gs-securing-web-0.1.0.jar
앱을 실행해보면 로그인 창이 나타나는데

build.gradle 에서

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    // compile("org.springframework.boot:spring-boot-starter-security")
    compile("org.thymeleaf:thymeleaf-spring4")
    testCompile("junit:junit")
}

compile("org.springframework.boot:spring-boot-starter-security")
를 주석처리하고 다시 빌드하고 실행해보면 로그인 창이 나타나지 않습니다.

4.
WebSecurityConfig.java : security 설정 클래스

5.
로그아웃 처리
http://localhost:8080/login?logout

6.
war 파일 만들기
build.gradle 파일에 아래 내용 추가
apply plugin: 'war'
war {
    baseName = 'gs-securing-web'
    version =  '0.1.0'
src/main/java/hello/HelloWebXml.java 파일 생성

톰캣에 넣고 돌려보면
java.lang.ClassNotFoundException: org.apache.tomcat.websocket.server.WsSci
와 같은 에러가 발생하는 경우가 있는데
이경우 가장 편한방법은 에러메시지에 나오는 톰캣버전과 같은 버전의 톰캣에서 돌리면 에러가 발생하지 않습니다.

참고
http://stackoverflow.com/questions/20922958/crash-deploying-spring-boot-war-in-tomcat