Spring Boot ์›๋ฆฌ

sseobยท2022๋…„ 6์›” 7์ผ
0

SpringBoot

๋ชฉ๋ก ๋ณด๊ธฐ
2/2
post-thumbnail

๐ŸŒˆ ์˜์กด์„ฑ ๊ด€๋ฆฌ

  • springboot์˜ pom.xml์—๋Š” 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>
  • ์œ„ properties์— ์ ํ˜€์žˆ๋Š” ์„ค์ •๊ฐ’๋“ค๊ณผ, resource, plugin๋“ฑ springboot ํ”„๋กœ์ ํŠธ์— ์ตœ์ ํ™” ๋˜์–ด์žˆ๋Š” ์ˆ˜๋งŽ์€ ์„ค์ •๋“ค์ด ์ถ”๊ฐ€๋œ๋‹ค.


@SpringBootApplication annotation

  • @SpringBootApplication ์–ด๋…ธํ…Œ์ด์…˜์€ ์•„๋ž˜ 3๊ฐ€์ง€ ์–ด๋…ธํ…Œ์ด์…˜์ด ํ˜ผํ•ฉ๋˜์–ด ์žˆ๋‹ค.
  • @Configuration + @EnableAutoCofiguration + @ComponentScan
  • ์ด ์–ด๋…ธํ…Œ์ด์…˜์ด ์ ์šฉ ๋˜์–ด์žˆ๋Š” Class์˜ package๋ถ€ํ„ฐ ComponentScan ํ•œ๋‹ค.
๐Ÿ’ก **@ComponentScan ์–ด๋…ธํ…Œ์ด์…˜์— base package๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ•ด๋‹น Class๊ฐ€ ์กด์žฌํ•˜๋Š” package๋ถ€ํ„ฐ Bean์„ Scanํ•œ๋‹ค.**

โœจ Springboot์—์„œ Bean์ด ์ฝ์–ด์ง€๋Š” ๋ฐฉ๋ฒ•

  • Bean์€ ๋‘๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์ฝ์–ด์ง„๋‹ค.
    1. @ComponentScan์„ ํ†ตํ•ด์„œ.
    2. @EnableAutoConfiguration์„ ํ†ตํ•ด์„œ.

@EnableAutoConfiguration

  • Auto configuration์„ ํ™œ์„ฑํ™” ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.
  • @EnableAutoConfiguration ์–ด๋…ธํ…Œ์ด์…˜์€ Springboot์— ๋ฏธ๋ฆฌ ์ž‘์„ฑ ๋˜์–ด์žˆ๋Š” meta file์„ ์ฝ์–ด ์ž๋™์„ค์ •์„ ํ•˜๊ฒŒ ํ•œ๋‹ค.
  • spring-boot-autoconfigure.jar์˜ 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์œผ๋กœ ๋“ฑ๋กํ• ์ง€ ๋ง์ง€ ์ •ํ•ด์ง„๋‹ค.


โšก๏ธ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ JAR !

Java๋Š” ์ค‘์ฒฉ๋œ jarํŒŒ์ผ. ์ฆ‰, jarํŒŒ์ผ ๋‚ด์— ํฌํ•จ๋œ jarํŒŒ์ผ์„ ๋กœ๋“œํ•˜๋Š” ํ‘œ์ค€ ๋ฐฉ๋ฒ•์ด ์—†๋‹ค. ์ด์ „์— 'uber jar'๋กœ ํŒจํ‚ค์ง•์„ ํ•˜์—ฌ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์—ˆ์ง€๋งŒ,
jar ํŒŒ์ผ์„ class์˜ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด ํŒจํ‚ค์ง• ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋– ํ•œ library๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.
springboot๋Š” ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ jar ์ค‘์ฒฉ ๊ตฌ์กฐ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

  • $ mvn package ๋ฅผ ํ†ตํ•ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ JARํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค.
  • ์ƒ์„ฑ๋œ JARํŒŒ์ผ์„ java ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด ์‹คํ–‰ํ•˜๋ฉด Web application์ด ์‹คํ–‰๋œ๋‹ค.

Packaging plugin

springboot ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋นŒ๋“œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ packagingํ•  ๋•Œ jar, warํŒŒ์ผ์„ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์ง€๋„๋ก ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค.

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

Packaging๋œ Jar ํŒŒ์ผ ๊ตฌ์กฐ

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

war ํŒŒ์ผ๋กœ packaging ํ–ˆ์„ ๋•Œ์˜ ๊ตฌ์กฐ

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

JarํŒŒ์ผ์„ ์–ด๋–ป๊ฒŒ ์ฝ๊ณ  ์‹คํ–‰ํ• ๊นŒ ?

  • org.springframework.boot.loader.jar.JarFile์„ ์‚ฌ์šฉํ•ด์„œ ๋‚ด์žฅ JAR๋ฅผ ์ฝ๋Š”๋‹ค.
  • org.springframework.boot.loader.Launcher๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‹คํ–‰ํ•œ๋‹ค.
    • jar file์ผ ๊ฒฝ์šฐ JarLauncher class๋ฅผ ํ†ตํ•ด์„œ, war file์ผ ๊ฒฝ์šฐย WarLauncher class๋ฅผ ํ†ตํ•ด application์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.
    • @SpringBootApplication ์–ด๋…ธํ…Œ์ด์…˜์ด ์ ์šฉ๋œ Start-Class์˜ main method๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
profile
๊ธฐ๋ก์ด๋ž€ ๊ณผ๊ฑฐ ๋‚ด๊ฐ€ ํ–ˆ๋˜ ์ƒ๊ฐ์ด๋‚˜ ์‚ฌ๊ณ ๋ฐฉ์‹์„ ์—ฟ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€