Skip to content

Instantly share code, notes, and snippets.

@benelog
Last active May 12, 2021 09:04
Show Gist options
  • Star 12 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save benelog/aee89ac5b6ff896b2e0f to your computer and use it in GitHub Desktop.
Save benelog/aee89ac5b6ff896b2e0f to your computer and use it in GitHub Desktop.
springloaded

springloaded는 개발환경에서 .java클래스를 수정했을 때 변경된 클래스파일만을 재로딩하는 도구입니다. Local PC에서 수정과 Tomcat재시작을 줄이는데 도움이 됩니다.

다만 JRebel도 그러하듯이 모든 경우 완벽한 리로딩이 되지는 않습니다. 메서드추가,수정시에는 잘 반영됩니다. 그러나 아래와 같은 경우에는 자동반영이 되지 않습니다.

  • 상속구조의 변경
  • Reflection정보가 Cache된 것
  • XML설정 수정 (이 부분은 프레임워크 특화된 구현이 들어가지 않으면 당연히 어렵습니다.)

그래도 많은 경우 Tomcat재시작없이 개발을 이어갈 수 있다면 없는것보다는 생산성에 도움이 되리라 생각합니다.

이를 tomcat-maven plugin과 함께 사용하는 방법을 정리해봅니다.

Linux 명령어를 기준으로 했지만, 윈도우를 쓰시는 분들도 역할을 하는 작업을 수행하시면 됩니다.

다운로드

참조할 디렉토리에 다운로드 (Tomat maven-plugin을 사용할 예정이면 pom.xml이 있는 디렉토리에 다운로드를 권장합니다.)

wget -O springloaded-1.2.1.jar http://search.maven.org/remotecontent?filepath=org/springframework/springloaded/1.2.1.RELEASE/springloaded-1.2.1.RELEASE.jar

springloaded의 Github에서 최신 버전을 확인한후 다운로드하는 것이 좋습니다.

Tomcat-maven-plugin으로 실행

1. 환경변수 설정

export MAVEN_OPTS="-javaagent:springloaded-1.2.1.jar -noverify"

2. pom.xml에 Tomcat7 plugin등을 추가

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <path>/</path>
    </configuration>
</plugin>

3. 실행

mvn tomcat7:run

Jetty이나 Tomcat6을 쓰고 싶다면 Local 개발환경에서 WAS를 띄우는 여러가지 방법을 참고합니다.

Eclipse WTP에서 실행

1. java-agent 설정

Eclipse 메뉴에서 Run-Run Configurations에서 Tomcat 실행설정을 찾은 다음 Arguments탭에서 VM arguments란에 javagent를 추가해줍니다. (1번이라도 Tomcat을 WTP로 실행해야지 해당 설정이 생깁니다.)

vm-arguments

-javaagent:/다운로드경로/springloaded-1.2.1.jar -noverify

2. 기본 reload 설정 제거

servers에서 Tomcat을 선택하고 Overview탭의 Server-optinons란의 'Modules reload by default'를 선택해제합니다.

disable default reload option1

'Modules'탭에서 해당 모듈의 설정에서도 해제가 되어 있는지 확인을 합니다.

disable reload option in module

main 메서드를 직접 실행하는 경우

Spring-boot나 Embeded Tomcat, Jetty를 이용해서 직접 main를 통해 WAS를 띄우는 경우도 있습니다. 이때와 Run- Run Configuration의 Arguments탭에서 VM arguments란에 javagent를 추가해줍니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment