Home > Backend Development > πŸ“š[Backend Development] @Bean에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κΈ° πŸ™Œ

πŸ“š[Backend Development] @Bean에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κΈ° πŸ™Œ
Backend Ddevelopment DI Server CS

βœ… Intro.

Java 기반의 Spring Frameworkμ—μ„œ @Bean은 μ˜μ‘΄μ„± μ£Όμž…(Dependency Injection)κ³Ό 객체 관리λ₯Ό μ΄ν•΄ν•˜λŠ” 데 핡심적인 κ°œλ…μž…λ‹ˆλ‹€.
μ•„λž˜μ—μ„œ ν•˜λ‚˜μ”© μ•Œμ•„λ΄…μ‹œλ‹€. πŸ™Œ

βœ… 1. @Bean은 λ¬΄μ—‡μΈκ°€μš”?

  • @Bean은 Spring Frameworkμ—μ„œ κ°œλ°œμžκ°€ 직접 μ •μ˜ν•œ 객체λ₯Ό Spring μ»¨ν…Œμ΄λ„ˆμ— 등둝할 λ•Œ μ‚¬μš©ν•˜λŠ” μ• λ…Έν…Œμ΄μ…˜(Annotation) μž…λ‹ˆλ‹€.
  • 이 μ• λ…Έν…Œμ΄μ…˜μ€ @Configuration 클래슀 λ‚΄μ—μ„œ μ‚¬μš©λ˜λ©°, λ©”μ„œλ“œμ— λΆ™μ–΄μ„œ ν•΄λ‹Ή λ©”μ„œλ“œκ°€ λ°˜ν™˜ν•˜λŠ” 객체λ₯Ό Bean으둜 λ“±λ‘ν•©λ‹ˆλ‹€.
@Configuration
public class AppConfig {
    
    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

βœ… 2. @Bean의 역할은 λ¬΄μ—‡μΈκ°€μš”?

  • Spring μ»¨ν…Œμ΄λ„ˆμ— 직접 Java μ½”λ“œλ‘œ 객체λ₯Ό μƒμ„±ν•˜κ³  λ“±λ‘ν•©λ‹ˆλ‹€.
  • λ“±λ‘λœ κ°μ²΄λŠ” Spring이 κ΄€λ¦¬ν•˜κ²Œ 되며, λ‹€λ₯Έ Bean에 μ˜μ‘΄μ„± μ£Όμž…(DI) 될 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 보톡 λ‹€μŒκ³Ό 같은 경우 μ‚¬μš©λ©λ‹ˆλ‹€.:
    • μ™ΈλΆ€ λΌμ΄λΈŒλŸ¬λ¦¬λ‚˜ μš°λ¦¬κ°€ 직접 κ΅¬ν˜„ν•œ 클래슀인데, Spring이 μžλ™μœΌλ‘œ 생성해주지 μ•ŠλŠ” 경우
    • XML 섀정을 λŒ€μ‹ ν•΄μ„œ Java μ½”λ“œλ‘œ 섀정을 ν•˜κ³  싢을 λ•Œ

βœ… 3. @Bean은 μ–Έμ œ μ‚¬μš©ν•˜λ‚˜μš”?

πŸ“Œ μ£Όμš” μ‚¬μš© μ‹œμ :

  • μ»΄ν¬λ„Œλ“œ μŠ€μΊ”(@Component)으둜 등둝할 수 μ—†λŠ” 객체λ₯Ό 등둝할 λ•Œ
    (예: μ™ΈλΆ€ 라이브러리 클래슀, 제3자 λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μ œκ³΅ν•˜λŠ” 클래슀 λ“±)
  • 객체 생성 둜직이 λ³΅μž‘ν•΄μ„œ μˆ˜λ™μœΌλ‘œ λ“±λ‘ν•˜κ³  싢을 λ•Œ
  • μ„€μ • 클래슀λ₯Ό 톡해 섀정값에 따라 Bean을 μ‘°κ±΄λΆ€λ‘œ 생성할 λ•Œ
  • ν…ŒμŠ€νŠΈ ν™˜κ²½μ—μ„œ νŠΉμ • 객체만 λŒ€μ²΄ν•΄μ„œ μ‚¬μš©ν•˜κ³  싢을 λ•Œ

μ˜ˆμ‹œ:

@Configuration
public class RedisConfig {
    
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        return template;
    }
}

βœ… μš”μ•½

질문 μš”μ•½ λ‹΅λ³€
@Bean은 λ¬΄μ—‡μΈκ°€μš”? κ°œλ°œμžκ°€ μˆ˜λ™μœΌλ‘œ Spring Bean을 등둝할 수 있게 ν•΄μ£ΌλŠ” μ• λ…Έν…Œμ΄μ…˜
역할은? Spring μ»¨ν…Œμ΄λ„ˆμ— λ©”μ„œλ“œκ°€ λ°˜ν™˜ν•˜λŠ” 객체λ₯Ό Bean으둜 등둝
μ–Έμ œ μ‚¬μš©ν•˜λ‚˜μš”? μ»΄ν¬λ„ŒνŠΈ μŠ€μΊ”μ΄ μ–΄λ €μš΄ μ™ΈλΆ€ λΌμ΄λΈŒλŸ¬λ¦¬λ‚˜ λ³΅μž‘ν•œ μ„€μ • 객체λ₯Ό 등둝할 λ•Œ