본문 바로가기

디버깅/Spring mvc (Maven, Mybatis)

[Spring mvc] Spring-Loaded를 이용해 핫플러그 개발환경 구축(톰캣 재시작 없이 개발)

반응형

서론

잠시 자바와 스프링을 외도하는 사이에 JS로 웹을 만들며 놀았는데.. 이때 가장 놀랍고도 유용 했던것이 Auto Reload였다.

별거 아닌듯 한데 단순히 Reload 되는 걸 넘어서 상당한 생산성 차이를 주었기에 다시 스프링을 하며 이것이 꼭 있었으면 했었다.

사실 이클립스를 쓰면서 IDE플러그인에 이 기능이 있었지만 유료 였다.. 그러다가.. 해외에선 대부분 Spring-boot을 사용하면서.. 이와 관련된 내용이 분명히 있을거라.. 생각했는데 역시나 있었다. 


안타깝게도 아직 국내에는 Spring 포스팅이 훨신 많은데.. (나또한 아직 쓰고 있지만) 익숙함 외에는 Spring mvc + Maven 은 더이상 Spring-boot과 Gradle 대비 장점이 없다고 단언해서 말 할 정도가 된 것 같다.

Spring 를 작별 하면서 입에서 입으로 구전되어 전해지는 개발 환경의 문제점들을 해결한 포스팅을 정리하고.. 나부터도 Spring-boot을 쓰고자 한다. (이는 현재 진행형)


본론

서론이 매우 길었다. 여튼.. 스프링 개발 환경은 너무 낡고 구식이라.. 그 자체로는 문제점이 너무 많다. 이를 해결한 방법들을 공유하고자 한다. 그리고 더이상은 난 Spring mvc 안쓸 생각.

사실 이 포스팅의 내용은 그다지 어려운게 아니지만.. 구버전인 Spring 에 적용해서 썼다는 이야기나.. 설정법에 대해서는 언급이 잘 없어서.. 나도 몇번 이리저리 해보다가 성공했다.

일단 내 개발환경은 다음과 같은데..

Java 1.8 + Spring mvc + Maven + Tomcat 8.5 이다.

IDE는 IntelliJ다. 이클립스도 적당히 따라 할 수 있다.

우선 Spring-loaded라는 라이브러리를 사용하기 위해서는 pom.xml에 맨 하단에 build 태그에 plugin태그를 추가 해야한다.

<!-- spring-boot (springloaded Test) -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.0.RELEASE</version>
</dependency>
</dependencies>
</plugin>

내용은 위와 같은데 릴리즈 버전이라 1.2.0를 사용했다. 이 프레임 워크는 오픈 소스 이며 무료이다. 매일 밤 잠자기전에 개발, 공개, 배포 하시는 개발자님께 감사함을 전하자. 

Spring-loaded의 배포 README에 대략적인 사용 방법이 나와있긴 하다. 이제 사용하기 위해 몇가지 세팅을 해야한다.

이 라이브러리 자체가 약간의 편법을 이용한 것으로 보이는데.. 웹 서버를 구동할 때.. 각각 빌드와 웹 서버(톰캣)을 따로따로 켜줘야 하는게 약간 귀찮다.

그치만 한번 키면 내가 일부로 끄지 않는 한 자동으로 변경 사항이 반영되니 그냥 난 이대로 쓸거다.


위에 적은 것처럼 빌드와 웹서버 구동을 따로 해야하므로 설정을 각각 해준다.

인텔리J 기준으로 우측 상단에 Edit Configuration 이라고 있다. 모듈? 명령을 편집 할 수 있다.

Maven을 고르고 Command line 란에 tomcat7:run 이라고 적어주자.

다음은 웹서버 명령이다.

Tomcat Server - Local 고르고 서버 경로 잡아주고.. 여기서는 VM options에

-javaagent:${HOME}/.m2/repository/org/springframework/springloaded/1.2.0.RELEASE/springloaded-1.2.0.RELEASE.jar -noverify

를 복사해서 붙여넣어주자. 


대략 pom.xml에 springloaded를 추가하면 VM options에 지정해준 경로에 다운받아지고 프로젝트에서 의존하여 빌드가 될 것이다. 그때 라이브러리 jar파일을 -noverify 파라미터로 실행해준다는 것.

내 경우 맥 + IntelliJ 환경에선 -noverify 만 넣고 잘 작동된다.


여튼 이렇게 두개의 명령을 추가했으면.. Maven으로 빌드하고.. Tomcat으로 실행하면 된다.

빌드시에 Success 확인 여부.. Tomcat으로 구동시 에러 없이 구동되는지 잘 확인하자.

여담으로.. 기본 tomcat 포트는 8080이지만.. Maven으로 run 할때는 war파일로 구동되는데.. 이때 포트는 9999 일 것이다.

사람마다 다를 수도 있지만.. 기본적으로 따로 건드리지 않았다면 이럴 것이다.


그래서 실제 웹서버 구동은 http://localhost:9999를 통해 접속이 될 것이다.

그리고 이 라이브러리는 Auto reload는 되지 않는다. 즉 내가 화면을 변경하고 저장해도 새로 고침은 알아서 되지 않는다.

하지만 변경 사항은 서버 재구동 없이 반영이 될 것이다. 물론 새로 고침이 되진 않으므로 바로바로 변경되는 걸 볼 순 없지만.

웹 서버 재구동 + 빌드 시간이 없이 새로고침만 하면 되서.. 상당히 시간 절약을 할 수 있다.


하지만 기존에 작성된 파일을 변경 했을때만 확인해보았고. 새로운 클래스 생성과 자원.. CSS, View파일 생성시에는 반영되는지 아직 확인 해보지 않았다.

다음 포스팅은 큰 이변이 없다면.. Maven -> Gradle로 프로젝트 변환이 될 것이다. 이 부분은 현재 테스트 중인데.. 그 전에 좋은 일이 있었으면........



참고 출처 : https://github.com/spring-projects/spring-loaded

http://hmjkor.tistory.com/438

https://andromedarabbit.net/spring-loaded%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-%ED%95%AB%EC%8A%A4%EC%99%91-%EC%A7%80%EC%9B%90%ED%95%98%EA%B8%B0/

https://www.holaxprogramming.com/2015/05/29/spring-boot-and-loaded/


반응형