진이의 Developer Story
STS + Spring boot 환경에서 Hot swapping 적용하기 본문
스프링 부트가 많이 쓰임에 따라, 내장된 톰캣을 많이 사용하고 있다.
기존에는 톰캣을 따로 다운받아서, server.xml 등을 수정하여 톰캣을 사용했지만, 스프링 부트에서 제공을 하는 내장 톰캣의 경우 application.yml 이나 properties를 통하여 설정하거나 java 코드로 설정(ajp 등)하여 사용한다.
그런데 외부 톰캣을 사용할 경우, Project > Build Automatically 체크 후 server.xml 에서 reloadable만 false로 해주면
간단하게 Hot swapping이 되어, 메소드를 추가, 제거, 기타 ORM을 사용하여 쿼리를 작성하는 부분외에는 재시작없이
수정된 코드를 바로 확인해볼 수 있었다.
스프링 부트는 이번이 써보는 것이 두 번째인데, 저번에는 외부 톰캣과 연결하여 사용했기 때문에 기존과 동일하게 사용을 했었지만, 이번 프로젝트에서는 내장된 톰캣을 사용하게끔 개발환경이 구성되어 있었다.
JAVA파일을 수정하면 바로 톰캣이 재시작되는 것이 아닌가... 그리고 짧은 시간안에 파일을 여러번 수정할 경우, 톰캣이 올라가던 도중 재시작되어 이미 바인딩된 주소(서버포트가 중복)라며 시작이 안됐었다.
그래서 찾아본 해결책은 devtools를 사용하면 간단하게 해결할 수 있었다.
gradle기준으로 작성되는 점은 이해바랍니다.
1. build.gradle 에 의존성을 추가한다.
dependencies {
implementation 'org.springframework.boot:spring-boot-devtools'
}
2. applcation.yml devtools 설정을 한다.
devtools:
restart:
enabled: false (자동재시작방지)
이렇게 설정해주면 자동재시작은 방지되며, 이클립스에서 자동빌드하여 class파일을 교체해준다.
간단한 코드의 경우는 재시작이 필요없지만 메소드 생성이나 어노테이션 변경, ORM(마이바티스 등) 쿼리 수정은
재시작해야 적용됩니다. 마이바티스의 경우 Thread를 사용해서 xml변경을 체크해서 실시간으로 변경할 수는 있습니다.
이 부분은 구글링...
'Java > Spring' 카테고리의 다른 글
스프링에서 클라이언트IP 가져오기 (0) | 2018.04.30 |
---|---|
아프리카 tv 별풍선 수집기 (0) | 2018.02.12 |
Spring Quartz Autowired (0) | 2017.10.25 |
예전에 만들어두었던 롤 전적검색사이트 (2) | 2017.01.03 |
@ControllerAdvice를 이용한 커스텀 에러 처리 (0) | 2016.12.04 |