Avatar
πŸ˜‰

Organizations

  • Spring μ—μ„œ (boot 포함) component와 bean의 μ°¨μ΄λŠ”?

    Spring Boot (μ •ν™•νžˆλŠ” Spring Framework)μ—μ„œ @Component와 @Bean은 λͺ¨λ‘ Spring μ»¨ν…Œμ΄λ„ˆμ— 객체(빈, Bean)λ₯Ό λ“±λ‘ν•˜λŠ” 데 μ‚¬μš©λ˜μ§€λ§Œ, μ‚¬μš©ν•˜λŠ” 방식과 λͺ©μ μ΄ 쑰금 λ‹€λ¦…λ‹ˆλ‹€.


    πŸ”Ή 1. @Component

    • ν΄λž˜μŠ€μ— λΆ™μ΄λŠ” μ–΄λ…Έν…Œμ΄μ…˜
    • Spring이 μžλ™μœΌλ‘œ ν•΄λ‹Ή 클래슀λ₯Ό 빈으둜 등둝
    • @ComponentScan에 μ˜ν•΄ νƒμ§€λ˜μ–΄ 등둝됨
    @Component
    public class MyComponent {
        public void doSomething() {
            System.out.println("Component is working");
        }
    }
    

    βœ… νŠΉμ§•

    • μžλ™ 등둝
    • @Service, @Repository, @Controller도 사싀 @Component의 νŠΉμˆ˜ν™” 버전
    • νŒ¨ν‚€μ§€ μŠ€μΊ” 경둜 μ•ˆμ— μžˆμ–΄μ•Ό 함

    πŸ”Ή 2. @Bean

    • λ©”μ„œλ“œμ— λΆ™μ΄λŠ” μ–΄λ…Έν…Œμ΄μ…˜
    • 주둜 @Configuration 클래슀 μ•ˆμ—μ„œ μ‚¬μš©
    • κ°œλ°œμžκ°€ 직접 객체λ₯Ό μƒμ„±ν•˜κ³  κ·Έ κ²°κ³Όλ₯Ό Spring μ»¨ν…Œμ΄λ„ˆμ— 등둝
    @Configuration
    public class AppConfig {
        @Bean
        public MyComponent myComponent() {
            return new MyComponent(); // μˆ˜λ™ 등둝
        }
    }
    

    βœ… νŠΉμ§•

    • μˆ˜λ™ 등둝
    • μ™ΈλΆ€ 라이브러리 객체, 섀정값이 ν•„μš”ν•œ 경우 λ“± μœ μ—°ν•œ 객체 생성 κ°€λŠ₯
    • λ©”μ„œλ“œ 이름이 빈 이름이 됨 (ν•„μš”μ‹œ @Bean(name = "beanName")으둜 μ§€μ • κ°€λŠ₯)

    πŸ“Œ 정리

    ν•­λͺ© @Component @Bean
    λΆ™μ΄λŠ” μœ„μΉ˜ 클래슀 λ©”μ„œλ“œ
    등둝 방식 μžλ™ 등둝 (μ»΄ν¬λ„ŒνŠΈ μŠ€μΊ”) μˆ˜λ™ 등둝 (κ°œλ°œμžκ°€ λͺ…μ‹œμ μœΌλ‘œ 생성)
    μ‚¬μš© μš©λ„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‚΄λΆ€ 클래슀 μ™ΈλΆ€ 라이브러리, λ³΅μž‘ν•œ μ΄ˆκΈ°ν™”
    μ„€μ • 클래슀 ν•„μš” μ—¬λΆ€ ν•„μš” μ—†μŒ @Configuration ν•„μš”

    πŸ™‹ μ–Έμ œ 써야 ν• κΉŒ?

    • λ‚΄κ°€ λ§Œλ“  클래슀λ₯Ό 빈으둜 λ“±λ‘ν•˜κ³  μ‹Άλ‹€λ©΄ β†’ @Component
    • μ™ΈλΆ€ 라이브러리 κ°μ²΄λ‚˜ 쑰건에 따라 λ‹¬λΌμ§€λŠ” 객체 생성이 ν•„μš”ν•  λ•Œ β†’ @Bean
    Created Sat, 21 Dec 2024 17:14:05 +0900
  • @Value 의 값이 바인딩 λ˜μ§€ μ•ŠμœΌμ‹ κ°€μš”?

    • Spring Boot μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰μ‹œν‚¬ λ–„ @Value둜 (org.springframework.beans.factory.annotation.Value) 값을 μ£Όμž…ν•˜λ €κ³  ν• λ–„ μƒκ°κ³ΌλŠ” λ‹€λ₯΄κ²Œ @Value둜 μ£Όμž…ν•œ 값이 μ œλŒ€λ‘œ λ°”μΈλ”©λ˜μ§€ μ•ŠλŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€.

    • μ΄λŸ¬ν•œ ν˜„μƒμ€ μ™œ 생기며, μ–΄λ–»κ²Œ ν•΄κ²°ν•  수 μžˆλŠ”μ§€ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

    • μš°μ„  Spring Bootλ₯Ό μ‹€ν–‰μ‹œν‚¬λ–„ loading μˆœμ„œλŠ” μ–΄λ–»κ²Œ λ˜λŠ”μ§€ λ¨Όμ € μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

    • Spring Boot μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 싀행될 λ•Œμ˜ λ‘œλ”© μˆœμ„œλŠ” 크게 λ‹€μŒκ³Ό 같은 λ‹¨κ³„λ‘œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€. 이 μˆœμ„œλŠ” Spring Framework의 λ™μž‘ 원리에 κΈ°λ°˜ν•˜λ©°, Spring Boot 특유의 κΈ°λŠ₯듀이 μΆ”κ°€μ μœΌλ‘œ ν¬ν•¨λ©λ‹ˆλ‹€.

    Created Wed, 27 Nov 2024 17:14:05 +0900
  • GoDoc GoDoc

    Clean Code μ„œλ‘ 

    Abstract

    μ£Όλ‹ˆμ–΄ 개발자일수둝 일단 κΈ°λŠ₯ κ΅¬ν˜„μ„ μš°μ„ μœΌλ‘œ μƒκ°ν•œλ‹€. λ‹€μ‹œ λ§ν•΄μ„œ λŒ€μ²΄λ‘œ μ½”λ“œμ˜ ν€„λ¦¬ν‹°λŠ” 뒷전이고 μƒκ°ν•œ κΈ°λŠ₯λŒ€λ‘œ λŒμ•„κ°€λŠ” μ½”λ“œλ‘œ μž‘μ„±ν•˜λ©΄ ν•  일을 λ‹€ν–ˆλ‹€κ³  μƒκ°ν•œλ‹€. μ•„λ‹ˆ, 비단 μ£Όλ‹ˆμ–΄ 개발자만의 λ¬Έμ œλŠ” 아닐 μˆ˜λ„ μžˆλ‹€. 업계에 μžˆμœΌλ©΄μ„œ λ³΄μ•„μ˜¨ λ§Žμ€ κ°œλ°œμžλ“€μ„ λŒμ•„λ΄€μ„ λ•Œ, μ½”λ“œ ν’ˆμ§ˆμ„ μƒκ°ν•˜λŠ” κ°œλ°œμžλŠ” 그리 λ§Žμ§€ μ•Šμ•˜λ‹€. 심지어 Clean Codeκ°€ λ­”μ§€ λͺ¨λ₯΄λŠ” μ‚¬λžŒλ„ λ§Žλ‹€. ν•˜μ§€λ§Œ μ½”λ“œμ—λ„ ν’ˆμ§ˆμ΄λΌλŠ” 것은 λΆ„λͺ…νžˆ μ‘΄μž¬ν•˜λ©°, κ°œλ°œμžκ°€ μž‘μ„±ν•œ μ½”λ“œκ°€ μ–΄λŠ μ •λ„μ˜ ν’ˆμ§ˆ μˆ˜μ€€μ„ κ°–μΆ”μ—ˆλŠ”κ°€λŠ” κ°κ΄€μ μœΌλ‘œ ν‰κ°€λ˜λŠ” 것이 μ’‹λ‹€. λͺ¨λ“  κ°œλ°œμžλŠ” dirty ν•˜μ§€ μ•Šμ€ cleanν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κΈ° μœ„ν•΄ 계속 λ…Έλ ₯ν•΄μ•Ό ν•œλ‹€.

    Created Wed, 27 Nov 2024 17:14:05 +0900
Previous