spring-boot-starter-parent
์์กด์ฑ์ด ์กด์ฌํ๋ค.<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.5.6</version>
</parent>
spring-boot-starter-parent
pom์ ์๋ด๋ฅผ ๋ค์ฌ๋ค๋ณด๋ฉด spring-boot-dependencies
๋ผ๋ parent pom์ด ๋ณด์ด๋๋ฐ ์ด๊ณณ์ ์๋ง์ ์์กด์ฑ๋ค์ version๊ณผ ์ธ๋ถ ์์กด์ฑ๋ค์ด ๋ช
์๋์ด ์๋ค. ๊ทธ๋์ spring-boot-starter-web
์ด๋ผ๋ ์์กด์ฑ์ ์ถ๊ฐํ๋ฉด spring-boot-dependencies
pom์ ์ ์ ๋์ด์๋ version๊ณผ ์ธ๋ถ ์์กด์ฑ๋ค์ด ์ถ๊ฐ๋๋ค.spring-boot-dependencies
์์ ๊ด๋ฆฌํ์ง ์๋ ์์กด์ฑ๋ค์ version์ ๋ช
์ ํด์ผํ๋ค.spring-boot-starter-parent
๋ฅผ parent๋ก ๋๋ ์ด์ ๋ ์์กด์ฑ ๊ด๋ฆฌ์ ํธ์์ฑ์ ์ํด์๋ง์ด ์๋๋ค.<properties>
<java.version>1.8</java.version>
<resource.delimiter>@</resource.delimiter>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
@SpringBootApplication
์ด๋
ธํ
์ด์
์ ์๋ 3๊ฐ์ง ์ด๋
ธํ
์ด์
์ด ํผํฉ๋์ด ์๋ค.@ComponentScan
์ ํตํด์.@EnableAutoConfiguration
์ ํตํด์.@EnableAutoConfiguration
์ด๋
ธํ
์ด์
์ Springboot์ ๋ฏธ๋ฆฌ ์์ฑ ๋์ด์๋ meta file์ ์ฝ์ด ์๋์ค์ ์ ํ๊ฒ ํ๋ค.spring.factories
file์ key๊ฐ์ ํด๋นํ๋ ํ์ผ๋ค์ ์ฝ์ด๋ค์ธ๋ค.# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
@Conditional~~
๋ก ์์ํ๋ Conditional ์ด๋
ธํ
์ด์
๋ค์ ์กฐ๊ฑด์ ๋ฐ๋ผ Bean์ผ๋ก ๋ฑ๋กํ ์ง ๋ง์ง ์ ํด์ง๋ค.Java๋ ์ค์ฒฉ๋ jarํ์ผ. ์ฆ, jarํ์ผ ๋ด์ ํฌํจ๋ jarํ์ผ์ ๋ก๋ํ๋ ํ์ค ๋ฐฉ๋ฒ์ด ์๋ค. ์ด์ ์ 'uber jar'๋ก ํจํค์ง์ ํ์ฌ ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์์ง๋ง,
jar ํ์ผ์ class์ ํํ๋ก ๋ง๋ค์ด ํจํค์ง ํ๊ธฐ ๋๋ฌธ์ ์ด๋ ํ library๊ฐ ์๋์ง ํ์ธํ๊ธฐ ์ด๋ ต๋ค๋ ๋ฌธ์ ๊ฐ ์๋ค.
springboot๋ ์ด ๋ฌธ์ ๋ฅผ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ jar ์ค์ฒฉ ๊ตฌ์กฐ๋ฅผ ํด๊ฒฐํ์๋ค.
$ mvn package
๋ฅผ ํตํด ์คํ ๊ฐ๋ฅํ JARํ์ผ์ด ์์ฑ๋๋ค.springboot ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ฉด ์๋์ ๊ฐ์ ๋น๋ ํ๋ฌ๊ทธ์ธ์ด ์กด์ฌํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด ํ๋ฌ๊ทธ์ธ์ packagingํ ๋ jar, warํ์ผ์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ ๊ฐ๋ฅํ ํ์ผ๋ก ๋ง๋ค์ด์ง๋๋ก ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํด์ค๋ค.
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
packaging๋ jarํ์ผ์ ์์ถ ํด์ ํ์์ ๋์ ๊ตฌ์กฐ์ด๋ค.
๋ชจ๋ ์์กด์ฑ์ BOOT-INF/lib์ ์์นํ๊ฒ ๋๋ค.
example.jar
|
+-META-INF
| +-MANIFEST.MF
+-org
| +-springframework
| +-boot
| +-loader
| +-<spring boot loader classes>
+-BOOT-INF
+-classes
| +-mycompany
| +-project
| +-YourClasses.class
+-lib
+-dependency1.jar
+-dependency2.jar
example.war
|
+-META-INF
| +-MANIFEST.MF
+-org
| +-springframework
| +-boot
| +-loader
| +-<spring boot loader classes>
+-WEB-INF
+-classes
| +-com
| +-mycompany
| +-project
| +-YourClasses.class
+-lib
| +-dependency1.jar
| +-dependency2.jar
+-lib-provided
+-servlet-api.jar
+-dependency3.jar
org.springframework.boot.loader.jar.JarFile
์ ์ฌ์ฉํด์ ๋ด์ฅ JAR๋ฅผ ์ฝ๋๋ค.org.springframework.boot.loader.Launcher
๋ฅผ ์ฌ์ฉํด์ ์คํํ๋ค.JarLauncher
class๋ฅผ ํตํด์, war file์ผ ๊ฒฝ์ฐย WarLauncher
class๋ฅผ ํตํด application์ ์คํํ๊ฒ ๋๋ค.@SpringBootApplication
์ด๋
ธํ
์ด์
์ด ์ ์ฉ๋ Start-Class
์ main method๋ฅผ ํธ์ถํ๋ ์ญํ ์ ํ๋ค.