배너 이미지

Spring Boot의 Bean과 어노테이션

2025. 4. 23. 23:16·CS공부/Java & Spring

Spring Boot에서 애플리케이션을 구성할 때 가장 핵심적인 개념 중 하나는 바로 Bean이다.
Spring은 애플리케이션을 구성하는 객체들을 Bean으로 관리하며, 이 Bean들을 생성하고 주입하는 데 사용하는 것이 바로 다양한 어노테이션(Annotation)이다.


✅ Bean이란?

Bean의 정의

  • Spring 컨테이너가 관리하는 객체를 Bean이라고 부른다.
  • 개발자가 직접 객체를 생성하는 대신, Spring이 객체의 생명주기와 의존성을 관리한다.

Bean의 역할

  • 애플리케이션의 핵심 구성 요소로, Service, Repository, Controller 등이 모두 Bean으로 관리된다.
  • Bean은 DI(의존성 주입)의 대상이 된다.

✅ Bean 등록 방식

1. 어노테이션 기반 자동 등록

@Component
public class MyComponent { }

@Service
public class MyService { }

@Repository
public class MyRepository { }

@Controller
public class MyController { }

설명:

  • @Component: 가장 일반적인 Bean 등록 어노테이션
  • @Service: 비즈니스 로직을 처리하는 클래스에 사용
  • @Repository: 데이터 접근 계층(DAO)에 사용
  • @Controller: 웹 요청을 처리하는 컨트롤러에 사용 (MVC 구조에서 사용됨)

모든 어노테이션은 결국 @Component를 포함하고 있으며, 스캔 대상이 되어 컨테이너에 등록된다.


2. 수동 등록 (Java Config)

@Configuration
public class AppConfig {

    @Bean
    public MyService myService() {
        return new MyService();
    }
}

설명:

  • @Configuration: 해당 클래스가 설정 클래스임을 나타낸다.
  • @Bean: 개발자가 직접 객체를 생성해서 반환 → Spring이 이 객체를 Bean으로 등록한다.

✅ 의존성 주입(DI) 어노테이션

@Autowired

@Service
public class OrderService {

    @Autowired
    private OrderRepository orderRepository;
}
  • Spring이 자동으로 OrderRepository 타입의 Bean을 찾아서 주입한다.
  • 생성자, 필드, 세터 등 다양한 방식으로 주입 가능하다.

생성자 주입을 권장하는 이유: 불변성, 테스트 편의성


@Qualifier

@Autowired
@Qualifier("memoryOrderRepository")
private OrderRepository orderRepository;
  • 같은 타입의 Bean이 여러 개 있을 경우, 특정 이름을 지정해 주입할 수 있다.

@Primary

@Primary
@Repository
public class MemoryOrderRepository implements OrderRepository { }
  • 동일한 타입의 Bean이 여러 개일 경우, 기본 우선순위를 부여한다.

✅ 스프링부트의 컴포넌트 스캔

  • Spring Boot는 기본적으로 @SpringBootApplication이 선언된 패키지를 기준으로 하위 패키지 전체를 스캔한다.
  • 이 범위 내의 클래스에 @Component, @Service, @Repository, @Controller 등이 붙어 있다면 자동으로 Bean으로 등록된다.
@SpringBootApplication  // = @ComponentScan + @Configuration + @EnableAutoConfiguration
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

✅ 결론

  • Spring Boot에서는 어노테이션 기반 Bean 등록이 기본이다.
  • 객체를 직접 생성하지 않고, Spring이 관리하도록 맡기면 의존성 주입이 자동으로 처리된다.
  • 컴포넌트 스캔과 다양한 어노테이션(@Component, @Service, @Autowired, @Bean)을 조합하여 유연하고 구조화된 애플리케이션을 만들 수 있다.

'CS공부 > Java & Spring' 카테고리의 다른 글

JWT 인증 및 토큰 기반 인증 시스템 정리  (0) 2025.04.28
즉시 로딩(Eager Loading)과 지연 로딩(Lazy Loading)  (0) 2025.04.23
MVC 모델이란 무엇인가?  (0) 2025.04.23
자바 컴파일 과정  (0) 2025.04.23
Call by Reference와 Call by Value  (0) 2025.04.23
'CS공부/Java & Spring' 카테고리의 다른 글
  • JWT 인증 및 토큰 기반 인증 시스템 정리
  • 즉시 로딩(Eager Loading)과 지연 로딩(Lazy Loading)
  • MVC 모델이란 무엇인가?
  • 자바 컴파일 과정
quokkaST
quokkaST
  • quokkaST
    stquokka
    quokkaST
    • 개발자 (77)
      • n8n (2)
      • CS공부 (46)
        • Java & Spring (15)
        • 인프라 (7)
        • 운영체제 & 시스템 (9)
        • 기타 CS지식 (7)
        • 네트워크 (6)
        • 데이터베이스 (2)
      • 알고리즘 (16)
      • 프로젝트 (8)
        • 감정&금융챗봇 (8)
      • 리팩토링 (5)
        • horong (5)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
상단으로

티스토리툴바