๐ŸƒSpring ์˜์กด์„ฑ ๊ด€๋ฆฌ

pom.xml

1 minute read

์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ๊ธฐ๋ณธ์„ค์ •

  • ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์œผ๋กœ ์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜ ๋‚ด์šฉ์ด ํ•„์š”ํ•˜๋‹ค.
<!--  
Maven ์„ค์ •์€ Hierarchy๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.  
๋ถ€๋ชจ ํ”„๋กœ์ ํŠธ๋ฅผ spring-boot-starter-parent๋กœ ์„ค์ •ํ•˜์—ฌ "์˜์กด์„ฑ ๊ด€๋ฆฌ"๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค.  
-->  
<!-- Inherit defaults from Spring Boot -->  
<parent>  
	<groupId>org.springframework.boot</groupId>  
	<artifactId>spring-boot-starter-parent</artifactId>  
	<version>2.2.4.RELEASE</version>  
</parent>  
  
<!--  
์•„๋ž˜ dependancy์—์„œ ๋ฒ„์ „์„ ๋ช…๊ธฐํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ์ด์œ ๋Š”,  
์œ„ ๋ถ€๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ํ˜ธํ™˜๋˜๋Š” ๋ฒ„์ „์ •๋ณด๊ฐ€ ์ด๋ฏธ ๋ช…์‹œ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.  
๋ฌผ๋ก  ์—ฌ๊ธฐ์„œ ์ƒˆ๋กœ ๋ช…์‹œํ•ด์„œ overrideํ•  ์ˆ˜๋„ ์žˆ๋‹ค.  
-->  
<!-- Add typical dependencies for a web application -->  
<dependencies>  
	<dependency>  
		<groupId>org.springframework.boot</groupId>  
		<artifactId>spring-boot-starter-web</artifactId>  
	</dependency>  
</dependencies>  
  
<!-- Package as an executable jar -->  
<build>  
	<plugins>  
		<plugin>  
			<groupId>org.springframework.boot</groupId>  
			<artifactId>spring-boot-maven-plugin</artifactId>  
		</plugin>  
	</plugins>  
</build>  

Parent POM(spring-boot-starter-parent)์˜ ์˜์กด์„ฑ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด?

  • <dependencyManagement>๋ฅผ ํ†ตํ•ด Scoped Dependency๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ spring-boot-starter-parent๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ์— ์ตœ์ ํ™”๋œ ๊ฐ์ • ์„ค์ •(Java ๋ฒ„์ „, ์ธ์ฝ”๋”ฉ ์„ค์ • ๋“ฑ)์ด ์ •์˜๋˜์–ด ์žˆ์–ด ๊ฐ€๊ธ‰์  parent๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
<dependencyManagement>  
    <dependencies>  
        <dependency>  
            <!-- Import dependency management from Spring Boot -->  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-dependencies</artifactId>  
            <version>2.3.1.RELEASE</version>  
            <type>pom</type>  
            <scope>import</scope>  
        </dependency>  
    </dependencies>  
</dependencyManagement>  

๋ฒ„์ „๋งŒ ๋ณ€๊ฒฝํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด?

  • <dependancies>์—์„œ ๋ฒ„์ „์„ ๋ช…๊ธฐํ•˜๋Š” ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ด๋‹ค. Parent์—์„œ์˜ ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•ด๋ณด๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด <properties>๋‚ด์—์„œ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
<properties>  
	<spring.version>5.0.6.RELEASE</spring.version>  
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
	<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>  
	<java.version>11</java.version>  
</properties>  

์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • https://mvnrepository.com/์—์„œ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • npm๊ณผ package.json๋งŒํผ ํŽธํ•˜์ง€๋Š” ์•Š์€ ๊ฒƒ ๊ฐ™๋‹ค.

์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ Jar๋กœ ๋นŒ๋“œํ–ˆ์„ ๋•Œ์˜ ์˜์กด์„ฑ

  • ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€๋œ ์˜์กด์„ฑ์— ํ•ด๋‹นํ•˜๋Š” Jar ํŒŒ์ผ๋“ค์ด ๋ชจ๋‘ ํฌํ•จ๋œ์ฑ„๋กœ Jar๋กœ ๋นŒ๋“œ๋œ๋‹ค.
  • Jar ํŒŒ์ผ์„ ์••์ถ•ํ•ด์ œํ•ด๋ณด๋ฉด target/app/BOOT_INF/lib์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด Jar ํ˜•ํƒœ๋กœ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.
  • ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ self-contained application์ด๋ผ ํ•œ๋‹ค.

Jar๋กœ ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

  • Java์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ jar ๋‚ด์˜ ํŒŒ์ผ(nested jar)๋“ค์„ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€์ ์ธ ๋ฐฉ๋ฒ•์ด ์—†๋‹ค. ํ•˜์ง€๋งŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ˆ˜๋งŽ์€ ํด๋ž˜์Šค ๋“ค์„ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ์˜ˆ์ „์—๋Š” uber jar๋ฅผ ์‚ฌ์šฉํ–ˆ์œผ๋‚˜ ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ๊ธฐ ์–ด๋ ต๊ณ , ์ด๋ฆ„ ์ถฉ๋Œ์— ์ทจ์•ฝํ–ˆ๋‹ค.
  • ๊ทธ๋ž˜์„œ ์Šคํ”„๋ง ๋ถ€ํŠธ๊ฐ€ Jar๋ฅผ ์ฝ๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” loader์™€ launcher๋ฅผ ๋นŒ๋“œ์‹œ ์ œ๊ณตํ•ด์ค€๋‹ค.

์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Jar์˜ ๊ตฌ์กฐ

example.jar  
 |  
 +-META-INF  
 |  +-MANIFEST.MF		# ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Jar์˜ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค. Main Class์™€ Start Class๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋‹ค.  
 +-org  
 |  +-springframework  
 |     +-boot  
 |        +-loader  
 |           +-Launcher		# Launcher์ด๋‹ค. ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Jar์˜ ์‹คํ–‰์ง€์ (Main Class)๋กœ ์‚ฌ์šฉ๋œ๋‹ค.  
 |           +-jar  
 |              +-JarFile	# Loader์ด๋‹ค. nested jar๋“ค์„ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ  
 +-BOOT-INF  
    +-classes  
    |  +-mycompany  
    |     +-project  
    |        +-YourClasses.class  
    +-lib			# ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์˜์กด์„ฑ)๋“ค์ด Jar ํ˜•ํƒœ๋กœ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.  
       +-dependency1.jar  
       +-dependency2.jar  

์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Jar์˜ ์˜๋ฏธ

  • ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Jar๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  • ์ด๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ์ฃผ์š” ๋ชฉํ‘œ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

[1] ๋ฐฑ๊ธฐ์„ , ์Šคํ”„๋ง ๋ถ€ํŠธ ๊ฐœ๋…๊ณผ ํ™œ์šฉ, 3๋ถ€ ์Šคํ”„๋ง ๋ถ€ํŠธ ์›๋ฆฌ