Skip to main content

Command Palette

Search for a command to run...

Spring Bean

๋นˆ ๋น™ ๋Œ์•„๊ฐ€๋Š” ํšŒ์ „ ๋ชฉ๋งˆ์ฒ˜๋Ÿผ

Updated
โ€ข2 min read
Spring Bean
O

SW์—”์ง€๋‹ˆ์–ด ํ˜ธ์†Œ์ธ

์ •์˜

๐Ÿ’ก
์Šคํ”„๋ง IoC์—์„œ ์ธ์Šคํ„ด์Šคํ™” ํ•˜๊ณ  ์กฐ๋ฆฝ ๋ฐ ๊ตฌ์„ฑ, ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด ์ฆ‰, ์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ์ž๋ฐ” ๊ฐ์ฒด

Spring IoC Container

๐Ÿ’ก
ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํ๋ฆ„์ด๋‚˜ ๊ฐ์ฒด์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์™ธ๋ถ€์—์„œ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ

Container๋Š” ์•„๋ž˜์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Œ

  1. XML

  2. Java Config

  3. Componenet Scan

XML

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="demoService" class="com.example.demo.BookService">
        <property name="repository" ref="bookRepository"/>
        <property name="count" value="42"/>
    </bean>
    <bean id="bookRepository" class="com.example.demo.BookRepository"/>
</beans>

Java Config

@Configuration
public class AppConfig {

    @Bean
    public BookServiceImpl BookService() {
        return new BookServiceImpl();
    }
}

Componenet Scan

@Component()
public class BookRepository {}

@Component("bookService")
public class BookService {}

@Configuration
@ComponentScan(basePackages="book") // ํ•ด๋‹น ํŒจํ‚ค์ง€์— ์†ํ•œ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”. type-safe X
@ComponentScan(basePackagesClasses=BookService.class) // ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์†ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์Šค์บ”
public class JavaBasicConfig{}

Bean Scope

๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์˜ค์ง 1๊ฐœ๋งŒ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด

์ข…๋ฅ˜

  • request

    • HTTP ์š”์ฒญ์ด ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐˆ ๋•Œ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ์Šค์ฝ”ํ”„๋กœ ๊ฐ๊ฐ์˜ HTTP ์š”์ฒญ๋งˆ๋‹ค ๋ณ„๋„์˜ ๋นˆ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๊ด€๋ฆฌ๋จ
  • session

    • HTTP ์„ธ์…˜๊ณผ ๋™์ผํ•œ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” ์Šค์ฝ”ํ”„
  • application

    • ์„œ๋ธ”๋ฆฟ ์ปจํ…์ŠคํŠธ์™€ ๋™์ผํ•œ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” ์Šค์ฝ”ํ”„
  • websocket

    • ์›น ์†Œ์ผ“๊ณผ ๋™์ผํ•œ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” ์Šค์ฝ”ํ”„

Bean Scope

๋”ฐ๋กœ ์„ค์ •ํ•ด ๋‘” ๊ฒƒ์ด ์—†์œผ๋ฉด ๋นˆ์ด ์‹ฑ๊ธ€ํ†ค์˜ ๋ฒ”์œ„๋กœ ๋“ฑ๋ก

์ฃผ์˜์ 

  • ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ฒŒ ์„ค๊ณ„ํ•˜๋ฉด ์•ˆ๋จ. โ†’ stateless ํ•ด์•ผ ํ•จ

  • ํŠน์ • ํด๋ผ์ด์–ธํŠธ์— ์˜์กด์ ์ด๊ฑฐ๋‚˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ํ•„๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ์•ˆ๋จ

  • ๊ฐ€๊ธ‰์  ์ฝ๊ธฐ๋งŒ ํ—ˆ์šฉ

Prototype Scope

statefulํ•œ ๋นˆ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Œ

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์Šคํ”„๋ง ๋นˆ์„ ์š”๊ตฌํ•  ๋•Œ๋งˆ๋‹ค ๋นˆ ์ƒ์„ฑ, ์˜์กด์„ฑ ์ฃผ์ž…, ๋ฐ˜ํ™˜์„ ์ˆ˜ํ–‰ํ•จ


Life-Cycle


์žฅ๋‹จ์ 

์žฅ์ 

  • ์˜์กด์„ฑ ์ฃผ์ž… ๊ฐ€๋Šฅํ•จ:
    ์Šคํ”„๋ง์€ ์˜์กด์„ฑ ์ฃผ์ž…์„ ์ง€์›ํ•˜์—ฌ ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Œ.

  • ๊ฐ์ฒด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•จ:
    ์Šคํ”„๋ง ๋นˆ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ํ†ค ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ, ํ•œ ๋ฒˆ ์ƒ์„ฑ๋œ ๋นˆ ๊ฐ์ฒด๋Š” ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

  • ํ…Œ์ŠคํŠธ ์šฉ์ดํ•จ:
    ์Šคํ”„๋ง์€ ์˜์กด์„ฑ ์ฃผ์ž…๊ณผ AOP๋ฅผ ํ†ตํ•ด ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ค์šด ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ , ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Œ.

๋‹จ์ 

  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์ข…์†์ ์ž„:
    ์Šคํ”„๋ง ๋นˆ์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋ฏ€๋กœ, ์Šคํ”„๋ง ์—†์ด๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์›€.

  • ์„ค์ • ๋ณต์žกํ•จ:
    ์Šคํ”„๋ง์€ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๊ทธ๋งŒํผ ์„ค์ •์ด ๋ณต์žกํ•˜๊ณ  ํ•™์Šต ๊ณก์„ ์ด ๊ฐ€ํŒŒ๋ฆ„.

Techtalk

Part 2 of 15

์ฃผ๊ฐ„ ํ…Œํฌ ์˜์ƒ์„ ๋ณด๊ณ  ๋…ผ์˜ ํ›„ ์ •๋ฆฌํ•˜์—ฌ ํฌ์ŠคํŒ…ํ•˜๋Š” ๊ณต๊ฐ„

Up next

Spring AOP

AOP Aspect Oriented Programming์˜ ์•ฝ์ž๋กœ ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋žจ์„ ์˜๋ฏธํ•œ๋‹ค. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฝ”๋“œ๊ฐ€ ์ค‘๋ณต๋˜๊ณ , ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด ์žˆ์–ด ๋‹ค๋ฅธ ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ๋กœ์ง์ธ โ€˜ํšก๋‹จ ๊ด€์‹ฌ์‚ฌโ€™์™€ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœ ๋‘”๋‹ค. ์˜ˆ์‹œ๋กœ ๋ฉ”์„œ๋“œ์˜ ์‹คํ–‰ ์‹œ๊ฐ„์„ ๊ตฌํ•˜๋Š” ๊ธฐ๋Šฅ, ํŠธ๋žœ์žญ์…˜ ๋“ฑ์ด์žˆ๋‹ค. ์žฅ์  ์ „์ฒด ์ฝ”๋“œ ๊ธฐ๋ฐ˜์— ํฉ์–ด์ ธ ์žˆ๋Š” ๊ด€ใ……๋ฏธ ์‚ฌํ•ญ์ด ํ•˜๋‚˜์˜ ์žฅ์†Œ๋กœ ์‘์ง‘ํ•œ๋‹ค. ์ž์‹ ์˜ ์ฃผ์š” ๊ด€์‹ฌ์‚ฌ์— ๋Œ€ํ•œ ์ฝ”๋“œ๋งŒ ํฌ...

More from this blog

Reflection

Refleaction ์ด๋ž€? ์ž๋ฐ”์˜ ๋ฆฌํ”Œ๋ ‰์…˜(Reflection)์€ ํด๋ž˜์Šค๋‚˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ, ์ƒ์„ฑ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๊ณ , ๋Ÿฐํƒ€์ž„ ์‹œ์— ๋™์ ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ž๋ฐ” API์ด๋‹ค. Spring ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” ๋ฆฌํ”Œ๋ ‰์…˜์„ ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection)๊ฐ™์€ ๊ณณ์—์„œ ๋ฆฌํ”Œ๋ ‰์…˜ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•œ๋‹ค. Spring ์ปจํ…Œ์ด๋„ˆ๋Š” Bean ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ...

Oct 31, 20233 min read
T

Team Cook's Blog

51 posts

์•ผ๋†€์ž ํ…Œํฌ ์Šค์ฟจ 7์กฐ ์Šคํ„ฐ๋”” ํ™œ๋™์„ ๊ธฐ๋กํ•˜๋Š” ํŒ€ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.