티스토리 뷰

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

 

case1. 두개의 springboot app이 각각 실행되고 동작하는 경우

case2. app2가 app1에 dependency로 들어가서 하나의 app으로 동작해야 하는 경우

app2를 app1에 dependency 추가를 해주면 간단하게 끝날것 같았는데 그렇지 않았다. 인생은 실전이다. 혹시 IDE에서는 그냥 참조를 해도 된다고 해도 build를 해서 IDE가 아닌 환경에서 돌려보면 안될것이다. 

 

일단 기능이 거의 없는 springboot app2를 빌드해 본다. 

springboot app build

자체적으로도 실행 가능한 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(실행가능한파일생성 옵션)도 설정을 해준다. 이렇게 하면 무슨 변화가 일어날까?

springboot maven build

이렇게 두개의 파일이 생성이 된다. 하나씩 열어서 비교를 해본다. 

springboot maven repackage build

좌측은 우리가 일반적으로 보던 library의 모습을 가지고 있다. 그리고 우측의 exec jar는 아까 위에서 봤던 실행 가능한 springboot app의 모습이다. app2를 app1에서 참조하여 사용이 되게 하려면 왼쪽의 모습과 같은 형태의 jar여야 한다.

 

이렇게 repackage를 통해 build를 하면 실행 가능한 jar도 추출할 수 있고 다른 app에 참조되어서 사용할 수 있는 jar도 추출을 할 수 있다. 

 

끝!

댓글
최근에 올라온 글
최근에 달린 댓글
«   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