본문 바로가기

Programming!

Spring Boot 1.4.1 -> 1.5.6 로 올리면서 트러블

신규개발이 있어서 spring boot 1.4.1기반으로 플젝 생성 후, 그냥 jar로 배포할 겸해서 web resource파일들을 


src/main/resources/META-INF/resources/WEB-INF에 넣는 것으로 마무리 하고 운영에 들어갔다.


어느날 회사 전체 플젝의 spring boot 버전을 1.5.6으로 올리는 작업이 진행되었고, 운영에 올리기전 마지막 뷰(jsp)테스트 호출에서 404가 떨어지는 현상을 발견 했다.


문서를 찾아보니 1.4.3 이후 버전부터는 war와 jar의 구분을 좀 더 명확하게 하려는 것인지 spring 지들 뷰에 대한 처리를 강화하려고 하는건지 몰라도 src/main/resources/META-INF 하위의 뷰를 허용하지 않는 것으로 변경되어 있었다.


급하게 대안을 찾아보았으나 대체적으로 src/main/webapp를 사용하라는 얘기도 많고해서, 기존 뷰 페이지 폴더 내용을 /src/main/webapp로  이동 후, gradle build를 수정 배포를 했으나 몇몇 문제가 있었다. 최종적으로는 아래와 같이 해결되었다.


apply plugin: 'war' 추가후 build xxxx.war가 생성되면 기본적으로 standalone형태가 되지 않는다.


spring-boot-starter-tomcat 추가와 함께 아래 내용을 추가해준다.

war {

    archiveName = 'my-web-application.war'

}


springBoot {

    mainClass = 'com.tistory.eclipse4j.XXXApplication'

    executable = true   

}


위에서 꼼수를 부리겠다고 archiveName을 jar로 바꾸면 런처가 제대로 지정되지 않고 jar런처로 변경된다.

아래와 같이 WarLauncher로 지정되어 있어야 한다.

Manifest-Version: 1.0

Start-Class: com.tistory.eclipse4j.XXXApplication

Spring-Boot-Classes: WEB-INF/classes/

Spring-Boot-Lib: WEB-INF/lib/

Spring-Boot-Version: 1.5.6.RELEASE

Main-Class: org.springframework.boot.loader.WarLauncher



여튼, 애초에 src/main/webapp에 view를 놔두지 않은 것이 화근이였다...줸장.!