Post

๐Ÿ“‘ JAVA 05 - Spring์€ ๊ฐ์ฒด๋ฅผ ์–ด๋–ป๊ฒŒ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š”๊ฐ€

๐Ÿ“‘ JAVA 05 - Spring์€ ๊ฐ์ฒด๋ฅผ ์–ด๋–ป๊ฒŒ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š”๊ฐ€

Spring Bean Lifecycle Deep Dive

ํ•™์Šต ๋ชฉํ‘œ

์ด๋ฒˆ ์ฃผ์ œ์˜ ํ•ต์‹ฌ์€ ๋‹จ์ˆœํžˆ:

โ€œSpring์ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹คโ€

์ˆ˜์ค€์ด ์•„๋‹ˆ๋‹ค.

์‹ค๋ฌด์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์•„๋ž˜๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  • Spring Container๋Š” ์ •ํ™•ํžˆ ๋ฌด์—‡์ธ๊ฐ€?

  • Bean์€ ์–ด๋–ป๊ฒŒ ์ƒ์„ฑ๋˜๋Š”๊ฐ€?

  • DI๋Š” ์–ธ์ œ ์ˆ˜ํ–‰๋˜๋Š”๊ฐ€?

  • @PostConstruct๋Š” ์™œ ํ•„์š”ํ•œ๊ฐ€?

  • Proxy๋Š” ์–ธ์ œ ์ƒ์„ฑ๋˜๋Š”๊ฐ€?

  • @Transactional์€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๊ฐ€?

  • Singleton Bean์€ ์™œ ์œ„ํ—˜ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

  • Spring Boot startup์ด ์™œ ๋А๋ ค์ง€๋Š”๊ฐ€?

์ฆ‰:

Spring์ด ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ „์ฒด ํ๋ฆ„

์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค.


๋จผ์ € ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋…

Spring ํ•ต์‹ฌ ์ฒ ํ•™์€:

โ€œ๊ฐ์ฒด ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹คโ€

์ด๋‹ค.

์ผ๋ฐ˜ Java์—์„œ๋Š”:

1
2
UserService service =
    new UserService();

์ง์ ‘ ์ƒ์„ฑํ•œ๋‹ค.

ํ•˜์ง€๋งŒ Spring์—์„œ๋Š”:

1
2
3
@Service
public class UserService {
}

๋งŒ ์ž‘์„ฑํ•˜๋ฉด:

  • ๊ฐ์ฒด ์ƒ์„ฑ

  • ์˜์กด์„ฑ ์—ฐ๊ฒฐ

  • ์ดˆ๊ธฐํ™”

  • Proxy ์ƒ์„ฑ

  • ์ข…๋ฃŒ ๊ด€๋ฆฌ

๋ฅผ Spring์ด ๋Œ€์‹  ์ˆ˜ํ–‰ํ•œ๋‹ค.


Spring Container๋ž€?

Spring Container๋Š”:

Bean ๊ฐ์ฒด๋“ค์„ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„

์ด๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด:

1
๊ฐ์ฒด ๊ด€๋ฆฌ์ž

๋‹ค.


ํ๋ฆ„์œผ๋กœ ๋ณด๋ฉด

graph TD

    A[Spring Boot Start]
        --> B[Component Scan]

    B --> C[Bean Definition ๋“ฑ๋ก]

    C --> D[๊ฐ์ฒด ์ƒ์„ฑ]

    D --> E[DI ์ˆ˜ํ–‰]

    E --> F[Proxy ์ƒ์„ฑ]

    F --> G[์ดˆ๊ธฐํ™”]

    G --> H[Application Ready]

์™œ ์ด๋Ÿฐ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์—ˆ์„๊นŒ?

ํ•ต์‹ฌ ์ด์œ ๋Š”:

  • ๊ฐ์ฒด ์ƒ์„ฑ ๊ด€๋ฆฌ ์ž๋™ํ™”

  • ์˜์กด์„ฑ ๊ด€๋ฆฌ ์ž๋™ํ™”

  • ๊ณตํ†ต ๊ธฐ๋Šฅ ๋ถ„๋ฆฌ

  • ์œ ์ง€๋ณด์ˆ˜ ํ–ฅ์ƒ

์ด๋‹ค.


Bean์ด๋ž€?

Spring์ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด.

์˜ˆ:

1
2
3
@Service
public class UserService {
}

์ด ๊ฐ์ฒด๋Š”:

1
new UserService()

๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

Spring์ด ๋Œ€์‹  ์ƒ์„ฑํ•œ๋‹ค.


Bean ์ƒ์„ฑ ์ „์ฒด ํ๋ฆ„

graph TD

    A[Bean Definition]
        --> B[Reflection ๊ฐ์ฒด ์ƒ์„ฑ]

    B --> C[์˜์กด์„ฑ ์ฃผ์ž…]

    C --> D[์ดˆ๊ธฐํ™”]

    D --> E[Proxy ์ ์šฉ ๊ฐ€๋Šฅ]

    E --> F[Bean ์‚ฌ์šฉ]

1. Component Scan

Spring Boot ์‹œ์ž‘ ์‹œ:

1
@SpringBootApplication

๊ธฐ์ค€์œผ๋กœ ํŒจํ‚ค์ง€ ์Šค์บ” ์ˆ˜ํ–‰.


์ฐพ๋Š” ๋Œ€์ƒ

๋Œ€ํ‘œ์ ์œผ๋กœ:

  • @Component

  • @Service

  • @Repository

  • @Controller

  • @Configuration


์™œ scanํ•˜๋Š”๊ฐ€?

๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ์ฒด ๋“ฑ๋ก์„ ์ผ์ผ์ด ์•ˆ ํ•ด๋„ ๋˜๊ฒŒ ํ•˜๋ ค๊ณ .

์ฆ‰:

1
์ž๋™ ๊ฐ์ฒด ๋“ฑ๋ก

์ด๋‹ค.


2. Bean Definition ์ƒ์„ฑ

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฑด:

์•„์ง ๊ฐ์ฒด ์ƒ์„ฑ์ด ์•„๋‹ˆ๋‹ค.

Bean Definition์€:

1
๊ฐ์ฒด ์ƒ์„ฑ ์„ค๊ณ„๋„

๋‹ค.

ํฌํ•จ ์ •๋ณด:

  • ํด๋ž˜์Šค ํƒ€์ž…

  • ์ƒ์„ฑ์ž ์ •๋ณด

  • Scope

  • ์˜์กด์„ฑ ์ •๋ณด


๋น„์œ ํ•˜๋ฉด

1
2
Bean Definition = ๊ฑด์ถ• ์„ค๊ณ„๋„
Bean Instance = ์‹ค์ œ ๊ฑด๋ฌผ

์ด๋‹ค.


3. ๊ฐ์ฒด ์ƒ์„ฑ (Instantiate)

Spring์€ Reflection ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ์ฒด ์ƒ์„ฑํ•œ๋‹ค.

์˜ˆ:

1
new UserService();

๋ฅผ ๋‚ด๋ถ€์ ์œผ๋กœ ์ˆ˜ํ–‰.


์™œ Reflection์„ ์‚ฌ์šฉํ• ๊นŒ?

Spring์€ ๋Ÿฐํƒ€์ž„์—:

  • Annotation ๋ถ„์„

  • ๋™์  ์ƒ์„ฑ

  • Proxy ์ƒ์„ฑ

ํ•ด์•ผ ํ•œ๋‹ค.

์ฆ‰:

๋Ÿฐํƒ€์ž„ ์œ ์—ฐ์„ฑ ํ™•๋ณด

๋ฅผ ์œ„ํ•ด Reflection ์‚ฌ์šฉ.


Reflection์ด ๋А๋ฆฌ๋‹ค๋Š” ๋ง์€?

์ผ๋ฐ˜ ํ˜ธ์ถœ๋ณด๋‹ค ๋А๋ฆฐ ๊ฑด ๋งž๋‹ค.

ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„ startup ๊ตฌ๊ฐ„์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

์‹ค์ œ ์šด์˜ ๋ณ‘๋ชฉ์€ ๋ณดํ†ต:

  • DB

  • Network

๋‹ค.


4. DI (Dependency Injection)

์˜์กด ๊ฐ์ฒด ์ฃผ์ž… ๋‹จ๊ณ„.

์˜ˆ:

1
2
3
4
5
6
7
8
9
10
11
@Service
public class OrderService {

    private final UserService userService;

    public OrderService(
        UserService userService
    ) {
        this.userService = userService;
    }
}

๋‚ด๋ถ€ ํ๋ฆ„

graph TD

    A[OrderService ์ƒ์„ฑ ์š”์ฒญ]
        --> B[UserService Bean ์กฐํšŒ]

    B --> C[์ƒ์„ฑ์ž ์ฃผ์ž…]

์™œ DI๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?

ํ•ต์‹ฌ:

๊ฐ์ฒด ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด

๋‹ค.


์ง์ ‘ ์ƒ์„ฑ ๋ฌธ์ œ

1
2
UserService userService =
    new UserService();

๋ฌธ์ œ:

  • ํ…Œ์ŠคํŠธ ์–ด๋ ค์›€

  • ๊ต์ฒด ์–ด๋ ค์›€

  • ๊ฐ•ํ•œ ๊ฒฐํ•ฉ


DI ์žฅ์ 

  • ํ…Œ์ŠคํŠธ ์‰ฌ์›€

  • Mock ๊ฐ€๋Šฅ

  • ์œ ์ง€๋ณด์ˆ˜ ํ–ฅ์ƒ

  • ์œ ์—ฐ์„ฑ ์ฆ๊ฐ€


5. BeanPostProcessor

์—„์ฒญ ์ค‘์š”ํ•˜๋‹ค.

Spring ํ•ต์‹ฌ ํ™•์žฅ ํฌ์ธํŠธ๋‹ค.


์—ฌ๊ธฐ์„œ ํ•˜๋Š” ์ผ

๋Œ€ํ‘œ์ ์œผ๋กœ:

  • Proxy ์ƒ์„ฑ

  • AOP ์ ์šฉ

  • @Transactional ์ฒ˜๋ฆฌ

  • Validation ์ฒ˜๋ฆฌ


ํ๋ฆ„

graph TD

    A[Bean ์ƒ์„ฑ ์™„๋ฃŒ]
        --> B[BeanPostProcessor]

    B --> C[Proxy ์ƒ์„ฑ ๊ฐ€๋Šฅ]

Proxy๋ž€?

์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด:

์ค‘๊ฐ„์—์„œ ๋Œ€์‹  ํ˜ธ์ถœํ•˜๋Š” ๊ฐ์ฒด

๋‹ค.


์›๋ž˜ ํ˜ธ์ถœ ๊ตฌ์กฐ

graph TD

    A[Client]
        --> B[Service]

Proxy ์ ์šฉ ํ›„

graph TD

    A[Client]
        --> B[Proxy]
        --> C[Real Service]

์™œ Proxy๋ฅผ ์“ฐ๋Š”๊ฐ€?

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜์ • ์—†์ด:

  • ๋กœ๊ทธ

  • ํŠธ๋žœ์žญ์…˜

  • ๋ณด์•ˆ

  • ์บ์‹œ

๊ฐ™์€ ๊ณตํ†ต ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ.


@Transactional ์‹ค์ œ ๊ตฌ์กฐ

1
2
3
@Transactional
public void order() {
}

์‹ค์ œ๋ก :

sequenceDiagram

    Client->>Transaction Proxy: order()

    Transaction Proxy->>Transaction Manager: begin()

    Transaction Proxy->>Real Service: order()

    Transaction Proxy->>Transaction Manager: commit()

ํ•ต์‹ฌ

ํŠธ๋žœ์žญ์…˜ ๋กœ์ง์„ ์„œ๋น„์Šค ์ฝ”๋“œ์— ์•ˆ ๋„ฃ๊ณ  Proxy๊ฐ€ ์ฒ˜๋ฆฌ

ํ•œ๋‹ค.


6. @PostConstruct

์ดˆ๊ธฐํ™” ๋กœ์ง ์ˆ˜ํ–‰ ์‹œ์ .

1
2
3
@PostConstruct
public void init() {
}

์–ธ์ œ ํ˜ธ์ถœ๋˜๋‚˜?

DI ์™„๋ฃŒ ์ดํ›„.

์ฆ‰:

1
์˜์กด ๊ฐ์ฒด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ

์—์„œ ํ˜ธ์ถœ๋œ๋‹ค.


์‹ค๋ฌด ์‚ฌ์šฉ ์‚ฌ๋ก€

๋Œ€ํ‘œ์ ์œผ๋กœ:

  • Cache preload

  • ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ

  • ์„ค์ • ๊ฒ€์ฆ

  • ์™ธ๋ถ€ ์—ฐ๊ฒฐ ํ™•์ธ


์œ„ํ—˜ํ•œ ์‹ค์ˆ˜

@PostConstruct ๋‚ด๋ถ€์—์„œ:

  • ๋Œ€๋Ÿ‰ DB ์กฐํšŒ

  • ์™ธ๋ถ€ API ํ˜ธ์ถœ

ํ•˜๋ฉด startup ๋А๋ ค์งˆ ์ˆ˜ ์žˆ๋‹ค.


์‹ค์ œ ์šด์˜ ์žฅ์•  ์‚ฌ๋ก€

1
MSA ์„œ๋น„์Šค startup 3๋ถ„ ์ด์ƒ

์›์ธ:

1
@PostConstruct ๋‚ด๋ถ€ ๋ฌด๊ฑฐ์šด ์ž‘์—…

7. Bean ์‚ฌ์šฉ

์ดํ›„ ์‹ค์ œ ์„œ๋น„์Šค ์ฒ˜๋ฆฌ ์ˆ˜ํ–‰.


8. Bean ์ข…๋ฃŒ

Spring ์ข…๋ฃŒ ์‹œ:

1
2
3
@PreDestroy
public void destroy() {
}

ํ˜ธ์ถœ.


์™œ ์ค‘์š”ํ•˜๋ƒ?

์ •๋ฆฌ ์•ˆ ํ•˜๋ฉด:

  • DB Connection Leak

  • Thread Leak

  • Resource Leak

๊ฐ€๋Šฅ.


Singleton Bean

Spring ๊ธฐ๋ณธ Scope๋Š” Singleton์ด๋‹ค.

์ฆ‰:

1
Application ์ „์ฒด์—์„œ ๊ฐ์ฒด 1๊ฐœ

์‚ฌ์šฉ.


์™œ Singleton ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?

์žฅ์ :

  • ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ

  • ์ƒ์„ฑ ๋น„์šฉ ๊ฐ์†Œ

  • ๊ด€๋ฆฌ ํšจ์œจ


์œ„ํ—˜ํ•œ ์ด์œ 

Singleton Bean ๋‚ด๋ถ€ mutable ์ƒํƒœ ์ €์žฅ ์‹œ:

1
private int count;

๋ฉ€ํ‹ฐ Thread ํ™˜๊ฒฝ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ.


์‹ค๋ฌด ๋‹จ๊ณจ ์žฅ์• 

1
2
3
๋™์‹œ ์š”์ฒญ
โ†’ count ๊ผฌ์ž„
โ†’ race condition

Spring Boot startup์ด ๋А๋ฆฐ ์ด์œ 

๋Œ€ํ‘œ ์›์ธ:

  • Reflection

  • Classpath Scan

  • Proxy ์ƒ์„ฑ

  • Annotation ๋ถ„์„

  • Bean ์ดˆ๊ธฐํ™”


Startup ์ „์ฒด ํ๋ฆ„

graph TD

    A[Classpath Scan]
        --> B[Bean Definition]

    B --> C[Reflection ๊ฐ์ฒด ์ƒ์„ฑ]

    C --> D[DI ์ˆ˜ํ–‰]

    D --> E[Proxy ์ƒ์„ฑ]

    E --> F[์ดˆ๊ธฐํ™”]

    F --> G[Application Ready]

Trade-off

์žฅ์ 

  • ๊ฐ์ฒด ๊ด€๋ฆฌ ์ž๋™ํ™”

  • ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ

  • AOP ๊ฐ€๋Šฅ

  • ํ™•์žฅ์„ฑ ์šฐ์ˆ˜


๋‹จ์ 

  • startup ๋น„์šฉ ์ฆ๊ฐ€

  • ๋‚ด๋ถ€ ๊ตฌ์กฐ ๋ณต์žก

  • ๋””๋ฒ„๊น… ์–ด๋ ค์›€

  • reflection overhead


์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์‹ค์ˆ˜

1. Singleton Bean ์ƒํƒœ ์ €์žฅ

๋ฉ€ํ‹ฐ Thread ๋ฌธ์ œ ๋ฐœ์ƒ.


2. @PostConstruct ๋ฌด๊ฑฐ์šด ์ž‘์—…

startup latency ์ฆ๊ฐ€.


3. self invocation

@Transactional ๋‚ด๋ถ€ ํ˜ธ์ถœ ๋ฌธ์ œ.


4. ์ˆœํ™˜ ์ฐธ์กฐ

์„ค๊ณ„ ๋ฌธ์ œ ๊ฐ€๋Šฅ์„ฑ ๋†’์Œ.


๋ฉด์ ‘ ๊ผฌ๋ฆฌ ์งˆ๋ฌธ

Q1. Spring Bean Lifecycle ํ๋ฆ„์„ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

ํ•ต์‹ฌ:

  • scan

  • definition

  • instantiate

  • DI

  • proxy

  • init

  • destroy


Q2. Proxy๋Š” ์–ธ์ œ ์ƒ์„ฑ๋˜๋‚˜์š”?

ํ•ต์‹ฌ:

  • BeanPostProcessor ๋‹จ๊ณ„

Q3. Spring์ด Reflection์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š”?

ํ•ต์‹ฌ:

  • ๋Ÿฐํƒ€์ž„ ์œ ์—ฐ์„ฑ ํ™•๋ณด

Q4. Singleton Bean์ด ์™œ ์œ„ํ—˜ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

ํ•ต์‹ฌ:

  • mutable state

  • race condition


Q5. Spring Boot startup์ด ๋А๋ฆฐ ์ด์œ ๋Š”?

ํ•ต์‹ฌ:

  • scan

  • reflection

  • proxy ์ƒ์„ฑ


์ข‹์€ ๋‹ต๋ณ€ ์˜ˆ์‹œ

Spring์€ Bean Lifecycle์„ ํ†ตํ•ด ๊ฐ์ฒด ์ƒ์„ฑ๋ถ€ํ„ฐ ์˜์กด์„ฑ ์ฃผ์ž…, ์ดˆ๊ธฐํ™”, Proxy ์ƒ์„ฑ, ์ข…๋ฃŒ๊นŒ์ง€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
Spring์€ Reflection ๊ธฐ๋ฐ˜์œผ๋กœ ๋Ÿฐํƒ€์ž„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ BeanPostProcessor ๋‹จ๊ณ„์—์„œ AOP์™€ Transaction Proxy ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ Singleton Bean ๊ธฐ๋ฐ˜์ด๊ธฐ ๋•Œ๋ฌธ์— mutable ์ƒํƒœ ๊ด€๋ฆฌ์— ์ฃผ์˜ํ•ด์•ผ ํ•˜๋ฉฐ startup ๊ณผ์ •์—์„œ scan๊ณผ proxy ์ƒ์„ฑ ๋น„์šฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๊ด€๋ จ CS ๊ฐœ๋… ์—ฐ๊ฒฐ

  • Dependency Injection

  • Inversion of Control

  • Reflection

  • Proxy Pattern

  • Singleton Pattern

  • Runtime Dynamic Loading

  • Lifecycle Management


ํ˜„์—…์—์„œ ํŠนํžˆ ์ค‘์š”ํ•œ ํฌ์ธํŠธ

1. Spring์€ Proxy ๊ธฐ๋ฐ˜ Framework๋‹ค

@Transactional ์ดํ•ด ํ•ต์‹ฌ.


2. startup latency ์ค‘์š”

MSA ํ™˜๊ฒฝ์—์„œ ๋งค์šฐ ์ค‘์š”.


3. Singleton ์ƒํƒœ ๊ด€๋ฆฌ ์ค‘์š”

์‹ค๋ฌด ์žฅ์•  ์›์ธ ์ž์ฃผ ๋จ.


4. BeanPostProcessor ์ดํ•ด ์ค‘์š”

Spring ๋‚ด๋ถ€ ๊ตฌ์กฐ ํ•ต์‹ฌ.


ํ•ต์‹ฌ ์š”์•ฝ

  • Spring์€ ๊ฐ์ฒด ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ Container๊ฐ€ ๊ด€๋ฆฌํ•œ๋‹ค

  • Bean Definition โ†’ ์ƒ์„ฑ โ†’ DI โ†’ Proxy โ†’ ์ดˆ๊ธฐํ™” ํ๋ฆ„์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค

  • Spring ๋‚ด๋ถ€๋Š” Reflection ๊ธฐ๋ฐ˜์ด๋‹ค

  • Proxy๋ฅผ ํ†ตํ•ด Transaction/AOP๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค

  • Singleton Bean ์ƒํƒœ ๊ด€๋ฆฌ๋Š” ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค

  • startup latency๋Š” ์‹ค์ œ ์šด์˜ ์ด์Šˆ๋‹ค

  • Bean Lifecycle ์ดํ•ด๋Š” Spring ๋‚ด๋ถ€ ๊ตฌ์กฐ ์ดํ•ด์˜ ํ•ต์‹ฌ์ด๋‹ค

This post is licensed under CC BY 4.0 by the author.