티스토리 뷰
Template Engine으로 JSP를 사용한 springboot 프로젝트가 있다. springboot에서 공식으로 지원을 하지 않는 Template Engine이다보니 JSP를 사용할때 여러가지 불편한 점들이 있다. 하지만 SI에서는 쉽게 기술을 휙휙 바꾸기 힘든 점들이 많다. SI는 참 힘들다... Springboot + JSP 프로젝트가 여러개 있고 이것을 각각 띄워서 사용을 할수도 있어야 하고 경우에 따라서는 여러개의 프로젝트가 main project에 dependency 형태로 붙을수도 있어야 한다. dependency 형태로 붙으려면 war가 아닌 jar 형식의 파일로 빌드가 되어야 한다. 이 방법에 대해 기술해보고자 한다.
어떻게 JSP 프로젝트를 war가 아닌 jar로 배포할 수 있을까?
일단 그냥 Springboot + JSP 프로젝트를 war로도 빌드해보고 jar로도 빌드를 해보자. package 형식을 바꾸는건 pom.xml에서 다음과 같이 한다.
...
<name>testproject</name>
<description>Demo project for Spring Boot</description>
<packaging>jar</packaging>
<properties>
<java.version>11</java.version>
...
<packaging> 이라는 tag를 이용하여 jar or war 로 빌드할 수 있다. 이 두개가 뭐가 다른가? 한번 빌드를 해보자. 물론 JSP가 포함된 프로젝트이다.
보다시피 jar, war 의 차이는 명확하게 확인할 수 있다. jar로 packaging을 하면 아예 WEB-INF라는 폴더가 생성이 되지 않고 이에 따라 작성한 jsp도 build가 되지 않는것을 확인할 수 있다. JSP를 사용할때 일반적으로 사용하는 src>main>webapp>WEB-INF>~~ 이런 구조는 jar로 빌드하면 JSP를 전혀 가지고 오지 못한다는것을 알 수 있다.
그럼 이런 식으로 application이 구성되면 sub application에 있는 JSP는 전혀 사용하지 못하는 것일까? 다행히도 방법은 있었다. META-INF 를 이용하면 된다. META-INF는 Springboot에서 빌드 시 추가적으로 필요한 resource들을 담아주는 역할도 한다. 그 추가적인 resource로 바로 JSP를 넣어주는 방법이다. 방법은 다음과 같다.
webapp 하위에 있던 WEB-INF를 복사해서 src/main/resources/META-INF/resources/WEB-INF 에 붙여 넣는다. 그리고선 webapp 하위에 있는 WEB-INF를 지워준다.
그리고 sub application을 dependency로 활용할수 있도록 변경을 해줘야 할점이 있다.
이 글을 읽고 spring-boot-maven-plugin을 변경해주도록 하자. 그리고서는 빌드를 해보자.
jar로 빌드를 했을때 jsp를 포함하고 있는 모습을 확인할 수 있다. main 프로젝트에서 sub 프로젝트의 기능을 정상적으로 사용할 수 있는 구조가 바로 위의 구조이다. 이 모습이 아니라면 404 에러를 포함해서 많은 에러를 맛볼 수 있다. (필자의 경험..)
단! 이렇게 빌드한 jar는 main 프로젝트에 dependency로 들어가기 위한 용도이지 이것을 가지고 독자적으로 실행시키거나 하면 동작하지 않는다. (IDE에서는 되어도 jar파일 실행으로 동작시키면 안됨)
독자적으로 실행을 하기 위해서는 war로 빌드가 되어야 한다. 또한 아래 글을 참조해서 war source directory를 설정하도록 하자.
끝!
'Framework > Spring' 카테고리의 다른 글
Springboot에서 jar 안의 Tiles 적용하는 방법 (0) | 2021.12.07 |
---|---|
Springboot META-INF의 war source directory로 설정하기 (0) | 2021.12.03 |
실행가능한 Springboot 프로젝트를 다른 프로젝트에서 참조하는 방법 (0) | 2021.12.03 |
Spring Bean 개수 확인 및 등록정보 확인하는 방법 (0) | 2021.11.29 |
Springboot Laze Init (Lazy Loading) 사용방법 (0) | 2021.11.19 |