서론
잠시 자바와 스프링을 외도하는 사이에 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/
'디버깅 > Spring mvc (Maven, Mybatis)' 카테고리의 다른 글
[Spring-boot] CRUD 예제 이해하기 [Spring boot + Gradle + JPA + Hibernate] (0) | 2018.07.16 |
---|---|
[오픈소스] 스프링 3 기반 커뮤니티 사이트 오픈소스 소개 (0) | 2018.07.05 |
[Mybatis] insert, update 후 row의 column 값 return받기 (0) | 2018.03.30 |
[Spring] Mybatis SQL Log 출력 모듈 추가하기 (0) | 2018.03.01 |
스프링 프레임 워크(Spring Framework) - 5. 프로젝트 살펴보기, 뼈대 만들기 등등 (0) | 2017.12.13 |