티스토리 뷰
다음과 같은 요구사항이 있다. 두개의 springboot 어플리케이션이 있는데 이 두개의 app은 각각 실행도 되어야 하고 app2는 app1에 참조되어서 동작도 되어야 한다. 간단하게 그림으로 나타내보겠다.
case1. 두개의 springboot app이 각각 실행되고 동작하는 경우
case2. app2가 app1에 dependency로 들어가서 하나의 app으로 동작해야 하는 경우
app2를 app1에 dependency 추가를 해주면 간단하게 끝날것 같았는데 그렇지 않았다. 인생은 실전이다. 혹시 IDE에서는 그냥 참조를 해도 된다고 해도 build를 해서 IDE가 아닌 환경에서 돌려보면 안될것이다.
일단 기능이 거의 없는 springboot app2를 빌드해 본다.
자체적으로도 실행 가능한 springboot app2의 빌드된 모습은 위와 같다. BOOT-INF 라는 폴더가 생성이 되었고 이것은 실행 가능한 springboot 프로젝트를 빌드했을때 나타나는 구조이다. 이런 모습으로 jar 파일이 생성이 되었기에 app2를 app1에 바로 dependency를 추가했을때 app2의 기능은 활용을 할 수 없다. 그러면 어떻게 해야 할까?
해결책
pom.xml
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<id>repackage</id>
<configuration>
<classifier>exec</classifier>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
위와 같이 repackage를 해주도록 하자. 그리고 exec(실행가능한파일생성 옵션)도 설정을 해준다. 이렇게 하면 무슨 변화가 일어날까?
이렇게 두개의 파일이 생성이 된다. 하나씩 열어서 비교를 해본다.
좌측은 우리가 일반적으로 보던 library의 모습을 가지고 있다. 그리고 우측의 exec jar는 아까 위에서 봤던 실행 가능한 springboot app의 모습이다. app2를 app1에서 참조하여 사용이 되게 하려면 왼쪽의 모습과 같은 형태의 jar여야 한다.
이렇게 repackage를 통해 build를 하면 실행 가능한 jar도 추출할 수 있고 다른 app에 참조되어서 사용할 수 있는 jar도 추출을 할 수 있다.
끝!
'Framework > Spring' 카테고리의 다른 글
Springboot META-INF의 war source directory로 설정하기 (0) | 2021.12.03 |
---|---|
Springboot + JSP 프로젝트 jar로 배포하는 방법 (1) | 2021.12.03 |
Spring Bean 개수 확인 및 등록정보 확인하는 방법 (0) | 2021.11.29 |
Springboot Laze Init (Lazy Loading) 사용방법 (0) | 2021.11.19 |
Springboot Connection Pool 설정방법 (0) | 2021.11.11 |