- 현실적으로 한국 기업에서 많이 활용되고 있음
- 스프링 생태계의 편의성과 안정성: ORM, Cloud, Security, Batch 등 엔터프라이즈에 필요한 기능들을 모두 직접 제공해줌
- AOP를 지향하고 DI를 지원해줌으로써, 개발자가 핵심 비즈니스 로직에만 집중할 수 있도록 해줌
- 객체가 사용하는 의존 객체를 직접 만드는 대신 주입 받아서 사용하게 하는 방식
- 스프링 IoC 컨테이너
- 컨테이너의 의존성 주입 기능을 통해 객체 간 결합도를 줄이고, 코드 중복도 줄일 수 있음
- 컨테이너는 객체를 Bean으로 관리하며, 객체 생성 및 소멸 관련 작업 자동 수행
- DI 활용 방식: Setter 방식, 생성자 방식, 메서드 방식
- "제어의 주체를 역전시킨다"는 설계 원칙
- 객체가 직접 의존성을 생성하거나 관리하지 않고, 외부(컨테이너)가 이를 대신하도록 해서 제어를 역전시키는 구조
- DI는 IoC를 구현하는 대표적인 방법
- 스프링에서는
BeanFactory,ApplicationContext로 구현되어 있음 - 이를 활용해서 컴포넌트 간 결합도를 줄이고, 코드의 모듈화, 테스트 용이성을 높일 수 있음
- 공통 관심사를 핵심적인 비즈니스 로직으로부터 분리하고 모듈화를 해줌
- 프록시 기반의 runtime weaving
- 프록시 객체를 생성해두는 방식으로, 컴파일 단계가 아닌 런타임에 모듈화된 부가기능을 적용할 수 있음
적용 사례
- 로깅 / 감사(auditing)
- 트랜잭션 관리
- 보안 검사
- 성능 측정 / 메트릭
- 예외 처리