스프링 빈(Spring Bean)
정의
- 스프링 빈은 스프링 IoC(Inversion of Control) 컨테이너가 관리하는 자바 객체입니다.
- 빈은 인스턴스화된 객체를 의미하며, 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다.
IoC (Inversion of Control)가 무엇이냐?
객체 지향 프로그래밍에서 객체의 의존성 관리를 프레임워크나 컨테이너에 위임하는 설계 원칙입니다. IoC의 핵심 개념은 객체 생성 및 의존성 주입을 개발자가 직접 하지 않고, 외부에서 제어권을 갖고 관리한다는 것입니다.
생성 및 관리
- 스프링 빈은 스프링 컨테이너에 의해 생성되고, 필요한 의존성을 주입받습니다.
- 빈의 라이프사이클은 컨테이너가 관리하며, 생성, 초기화, 소멸 등의 과정을 거칩니다.
- 빈은 @Component, @Service, @Repository, @Controller 등의 어노테이션을 사용하여 정의할 수 있습니다.
사용 이유
- 의존성 주입: 스프링 빈은 의존성 주입(DI, Dependency Injection)을 통해 객체 간의 결합도를 낮추고, 유연하고 테스트 가능한 코드를 작성할 수 있게 해줍니다.
- 객체 관리: 스프링 컨테이너는 빈의 생명주기를 관리하여, 객체의 생성과 소멸, 그리고 의존성 주입을 자동으로 처리합니다.
- AOP(Aspect-Oriented Programming): 스프링 빈은 AOP를 통해 횡단 관심사(로깅, 트랜잭션 관리 등)를 모듈화하여 코드의 분리를 도와줍니다.
AOP ( 관점 지향 프로그래밍 )
AOP는 객체 지향 프로그래밍의 한계를 극복하고자 나온 패러다임으로, 프로그램의 핵심 기능과 부가 기능을 분리하여 코드의 모듈성을 향상시키는 기법입니다. AOP를 통해 핵심 비즈니스 로직과 공통적으로 사용되는 로직(예: 로깅, 보안, 트랜잭션 관리 등)을 분리하여 각각을 독립적으로 관리할 수 있습니다.
주요 개념
- Aspect (관점): 특정 횡단 관심사를 모듈화한 것입니다. 횡단 관심사란 여러 모듈에서 공통적으로 사용되는 로직을 말합니다.
- Join Point (조인 포인트): AOP에서 횡단 관심사를 적용할 수 있는 지점을 말합니다. 이는 메서드 호출, 객체 생성 등 다양한 지점이 될 수 있습니다.
- Advice (어드바이스): 실제로 실행되는 코드로, 횡단 관심사가 구현된 부분입니다. 이는 특정 Join Point에서 실행됩니다.
- Pointcut (포인트컷): Join Point를 지정하는 표현식입니다. 어떤 Join Point에서 Advice를 실행할지 정의합니다.
- Weaving (위빙): 애플리케이션 코드와 횡단 관심사(Advice)를 결합하는 과정입니다. 이는 컴파일 타임, 로드 타임, 런타임 중에 이루어질 수 있습니다.
장점
- 유지보수성 향상: 공통 로직을 한 곳에서 관리하여 유지보수를 쉽게 할 수 있습니다.
- 코드 중복 감소: 여러 모듈에서 공통적으로 사용되는 로직을 분리하여 코드 중복을 줄입니다.
애플리케이션 컨텍스트(Application Context)
정의
- 애플리케이션 컨텍스트는 스프링 프레임워크의 중앙 인터페이스로, 빈의 생성, 설정 및 관리 등의 역할을 담당합니다.
- ApplicationContext는 BeanFactory를 확장한 것으로, 더 많은 기능을 제공합니다.
기능:
- 빈의 관리: 빈의 생성, 설정 및 관리 기능을 제공합니다.
- 국제화: 메시지 소스(MessageSource)를 통해 국제화를 지원합니다.
- 이벤트 발행: 애플리케이션 이벤트를 발행하고 리스너를 관리합니다.
- 리소스 로딩: 파일, URL 등의 다양한 형태의 리소스를 로딩할 수 있습니다.
사용 이유:
- 중앙 관리: 애플리케이션의 모든 빈을 중앙에서 관리하여 코드의 일관성과 관리 편의성을 높입니다.
- 다양한 기능 제공: 단순한 빈 관리 외에도 국제화, 이벤트 발행, 리소스 로딩 등 다양한 기능을 제공합니다.
- 확장성: 애플리케이션의 요구에 따라 컨텍스트를 쉽게 확장하고 맞춤화할 수 있습니다.
스프링 빈과 애플리케이션 컨텍스트의 상호작용
스프링 애플리케이션이 시작될 때, 애플리케이션 컨텍스트는 설정 파일이나 어노테이션을 기반으로 빈을 스캔하고 인스턴스화합니다. 이 과정에서 의존성 주입이 이루어지고, 필요한 설정이 적용됩니다. 빈은 애플리케이션 컨텍스트에 의해 관리되며, 애플리케이션의 요구에 따라 사용됩니다.
참고 자료
https://ittrue.tistory.com/221 [IT is True:티스토리]
'Backend Programming' 카테고리의 다른 글
RESTful API란? (0) | 2024.07.03 |
---|---|
서블릿이란 무엇일까? (0) | 2024.06.30 |
MVC 패턴이란 무엇일까? (0) | 2024.06.28 |
스프링의 컨트롤러, 서비스, 레포지토리가 무엇인가? (0) | 2024.06.27 |
JDBC, JPA가 무엇이냐? (0) | 2024.06.26 |