티스토리 뷰

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가 포함된 프로젝트이다. 

springboot + jsp jar build / war build

보다시피 jar, war 의 차이는 명확하게 확인할 수 있다. jar로 packaging을 하면 아예 WEB-INF라는 폴더가 생성이 되지 않고 이에 따라 작성한 jsp도 build가 되지 않는것을 확인할 수 있다. JSP를 사용할때 일반적으로 사용하는 src>main>webapp>WEB-INF>~~ 이런 구조는 jar로 빌드하면 JSP를 전혀 가지고 오지 못한다는것을 알 수 있다.

jsp project dependency

그럼 이런 식으로 application이 구성되면 sub application에 있는 JSP는 전혀 사용하지 못하는 것일까? 다행히도 방법은 있었다. META-INF 를 이용하면 된다. META-INF는 Springboot에서 빌드 시 추가적으로 필요한 resource들을 담아주는 역할도 한다. 그 추가적인 resource로 바로 JSP를 넣어주는 방법이다. 방법은 다음과 같다. 

META-INF&gt;resources&gt;WEB-INF

webapp 하위에 있던 WEB-INF를 복사해서 src/main/resources/META-INF/resources/WEB-INF 에 붙여 넣는다. 그리고선 webapp 하위에 있는 WEB-INF를 지워준다. 

그리고 sub application을 dependency로 활용할수 있도록 변경을 해줘야 할점이 있다. 

 

실행가능한 Springboot 프로젝트를 다른 프로젝트에서 참조하는 방법

다음과 같은 요구사항이 있다. 두개의 springboot 어플리케이션이 있는데 이 두개의 app은 각각 실행도 되어야 하고 app2는 app1에 참조되어서 동작도 되어야 한다. 간단하게 그림으로 나타내보겠다. c

oingdaddy.tistory.com

이 글을 읽고 spring-boot-maven-plugin을 변경해주도록 하자. 그리고서는 빌드를 해보자. 

springboot + jsp jar build

jar로 빌드를 했을때 jsp를 포함하고 있는 모습을 확인할 수 있다. main 프로젝트에서 sub 프로젝트의 기능을 정상적으로 사용할 수 있는 구조가 바로 위의 구조이다. 이 모습이 아니라면 404 에러를 포함해서 많은 에러를 맛볼 수 있다. (필자의 경험..) 

단! 이렇게 빌드한 jar는 main 프로젝트에 dependency로 들어가기 위한 용도이지 이것을 가지고 독자적으로 실행시키거나 하면 동작하지 않는다. (IDE에서는 되어도 jar파일 실행으로 동작시키면 안됨)

독자적으로 실행을 하기 위해서는 war로 빌드가 되어야 한다. 또한 아래 글을 참조해서 war source directory를 설정하도록 하자. 

 

Springboot META-INF의 war source directory로 설정하기

앞서 Springboot + JSP 프로젝트를 jar로 배포하기 를 하며 META-INF를 사용하는 방법에 대해 알아보았다. 이번 글의 목적은 src>main>webapp>WEB-INF 이런 구조 대신 src/main/resources/META-INF/resources/WEB-..

oingdaddy.tistory.com

 

끝!

댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31