인프런, 스프링 프레임워크 핵심 기술 강좌 (백기선님)
IoC(Inversion of Control), AOP(Aspect Oriented Programming) 처럼 추상 API에 다루는 강좌.
스프링의 역사
- JavaEE와는 호환 관계이며 적대적 관계에 있는 것이 아니다.
- 최근까지는 서블릿 기반 애플리케이션을 만들 때 사용, 하지만 Spring 5부터는 WebFlux 지원으로 서블릿 기반이 아닌 서버 애플리케이션도 개발할 수 있게 됨.
디자인 철학
- 모든 선택은 개발자의 몫.
- 다양한 관점을 지향.
- 하위 호환선을 지킴.
- API를 신중하게 설계.
- 높은 수준의 코드 지향.
1부: 스프링 IoC 컨테이너와 빈
@Service
public class SomeService {
private SomeRepository someRepository;
public SomeService(SomeRepository someRepository) {
this.someRepository = someRepository;
}
}
위 소스코드처럼 BookRepository 객체를 new를 사용해 생성하는 것이 아닌 생성자를 사용해 등록하는 것을 IoC(제어의 역전)이라고 한다.
빈(스프링 IoC 컨테이너가 관리하는 객체)들을 담고 있기 때문에 컨테이너라고 부름.
xml 기반의 빈 주입을 사용하다가 현재는 애노테이션(@)을 사용한 빈 주입을 하고 있음.
IoC 주입의 가장 핵심이되는 인터페이스는 아래의 BeanFactory.
빈
- 스프링 IoC 컨테이너가 관리하는 객체.
- 스코프 (싱글톤, 프로토타입)
- 의존성 관리
- 라이프사이클 인터페이스 (@PostConstruct)
ApplicationContext (자주 사용하게 될 IoC 컨테이너)
- BeanFactory
- 메시지소스 처리기능
- 이벤트 발행 기능
- 리소스 로딩 기능
- ...
ApplicationContext
스프링 IoC 컨테이너의 역할
- 빈 인스턴스 생성
- 의존 관계 설정
- 빈 제공
ApplicationContext
- ClassPathXmlApplictaionContext(XML)
- AnnotaionConfigApplicationContext(Java)
ApplicationContext 컨테이너 설정은 역사에 따라 달라져 왔다.
- xml 기반 직접 설정
ClassPathXmlApplictaionContext 직접 bean 설정
<bean id="bean1" class="packageName.Class">
- xml 기반 스캔
ClassPathXmlApplictaionContext 패키지 component-scan
<context:component-scan base-package="packageName"/>
- Java Configuration 직접 설정
AnnotaionConfigApplicationContext를 사용하고 Config 파일에서 @Configuration과 @Bean 어노테이션으로 직접 Bean들을 추가하는 방법@Configuration public class ApplicationConfig { @Bean public SomeRepository someRepository() { return new SomeRepository(); } @Bean public SomeService someService(SomeRepository someRepository) { SomeService someService = new SomeService(); someService.setSomeRepository(someRepository); return new SomeService(); } }
- Java ComponentScan 설정
AnnotaionConfigApplicationContext를 사용하고 Config 파일에서 @ComponentScan 사용@ComponentScan(basePackageClasses = DemoApplication.class) public class ApplicationConfig { @Bean public SomeRepository someRepository() { return new SomeRepository(); } @Bean public SomeService someService() { return new SomeService(); } }
- Spring Boot
@SpringBootApplication을 사용하여 각 빈에서 어노테이션 기반으로 설정.
'노력 > Spring Boot' 카테고리의 다른 글
스프링 프레임워크 핵심 기술 - (3) (0) | 2021.11.28 |
---|---|
스프링 프레임워크 핵심 기술 - (2) (0) | 2021.11.20 |
IntelliJ에서의 Spring boot 테스트 프로젝트 - (1) (0) | 2021.05.29 |
Spring Boot와 Spring의 디렉터리 구조 차이점 그리고 Entity (0) | 2020.01.25 |