빙응의 공부 블로그
스프링 기본편 생각정리 본문
📝팩토리 패턴과 IoC
- 팩토리 패턴은 외부의 클래스가 직접 관계를 설정해주는 것이다.
- 이것을 관심사의 분리라 하며 외부에서 의존성 설계하는 것을 IoC의 한 종류이다.
- IoC는 제어의 역전 제어 흐름을 외부가 하는 것이다.
📝DI 와 IoC
- 스프링에는 AppConfig처럼 객체를 생성하고 관리하는 스프링 컨테이너가 존재한다.
- 이것은 Bean이라는 객체를 자동 생성, 관리, 주입을 하여 IoC의 기능과 의존관계(DI)를 자동 주입한다.
📝스프링 컨테이너와 빈
- 스프링 컨테이너는 생성 - 빈 등록 - 의존관계 설정 순으로 작동한다.
- BeanDefinition - 스프링은 다양한 설정 형식을 제공하며 BeanDefinition을 통해 추상화를 제공한다.
📝웹 애플리케이션과 싱글톤
- 스프링은 대부분 웹 애플리케이션이다. 그리고 웹 애플리케이션의 특성은 다중 처리이다.
- 그러므로 스프링 컨테이너는 객체에 대해 1개만 생성하는 싱글톤 패턴을 적용한다.
- 싱글톤 패턴은 무상태로 설계하는 것이 중요하다.(무조건 무상태는 아니다)
- 싱글톤의 보장은 CGLIB의 바이트 코드 조작을 통해 가상의 객체를 만들어 사용한다.
📝컴포넌트 스캔과 의존관계 자동 주입
- 스프링은 설정 정보 없이 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능을 제공한다.
- 컴포넌트 스캔을 사용하려면 먼저 @ComponentScan을 설정 정보에 붙여주어야 한다.
- 스캔 제외를 할 수 있는 기능도 존재한다.
- @Autowired는 컴포넌트 스캔 시에 의존관계 주입을 담당하는 역할이다.
- 컴포넌트 스캔은 단지 빈에만 등록하는 것이기 때문이다.
📝의존 관계 주입
- 생성자 주입 : 이름 그대로 생성자를 통해서 의존관계를 주입 받는 방법이다.
- 장점은 불변, 필수 의존 관계이다.
- 수정자 주입 : setter을 이용한 주입 방식
- 선택 변경 가능성이 잇는 의존관계에 사용한다.
- 필드 주입 : 이름 그대로 필드에 값을 넣어버림, 사용 X
- 일반 주입 : 사용안함 생략
- @Autowired의 null 값 옵션 처리 방법 들이 있다.
- @Autowired(required=false)
- org.springframework.lang.@Nullable
- Optional<>
- 결론 : 생성자 주입을 사용하라
📝의존 관계 주입2
- 조회 빈이 2개 이상인 문제
- @Autowired는 타입으로 조회하기 때문에 ac.getBean과 유사하다.
- 그래서 같은 타입을 인터페이스 받는 것에서 오류가 발생한다. NoUniqueBeanDefinitionException
- 해결방법
- @Autowired 필드 명 매칭 : @Autowired는 타입 매칭을 시도하고 이때 여러의 빈이면 필드, 파라미터로 추가 매칭
- @Quilifier : @Quilifier을 통해 하위 타입을 지정해 줄 수 있다.
- @Primary: 우선순위를 정하는 방법이다.
📝빈 생명주기 콜백
- 빈 생명주기 콜백이란 스프링을 통한 초기화 작업과 종료 작업 진행을 말한다.
- 스프링 빈의 라이플사이클
- 스프링 컨테이너 생성- 스프링 빈 생성- 의존관계 주입- 초기화 콜백 - 사용 - 소멸전 콜백- 스프링 종료
- 인터페이스 콜백 : 위 라이프사이클에는 2개의 콜백이 존재하였다. 콜백 시에 로직을 만드는 것이 가능하다.
- implements InitializingBean : 초기화 메서드 후에 일어나는 콜백이다.
- implements DisposableBean : 스프링 컨테이너 종료가 호출되면 호출된다.
- 초기화, 소멸 메소드 지정
- @Bean -> @Bean(initMethod = "init", destroyMethod = "close")
- @Bean 애노테이션을 통해 메소드를 지정할 수 있다.
- @Bean -> @Bean(initMethod = "init", destroyMethod = "close")
- 애노테이션으로 지정
- @PostConstruct
- @PreDestory
📝빈 스코프
- 빈 스코프는 말 그대로 빈이 존재할 수 있는 범위를 뜻한다.
- 스프링의 스코프
- 싱글톤
- 프로토타입
- request, session, application
- 프로토타입 스코프는 인스턴스의 생성+ DI 만 책임진다.
- ObjectProvider
- 지정한 빈을 컨테이너에서 대신 찾아주는 DL 서비스를 제공한다.
- 웹 스코프 : 웹 환경에서 동작하는 스코프
- request 스코프 : HTTP 요청 하나가 들어가고 나갈 때까지 유지되는 스코프이다.
- 웹 스코프 지연 생성 방식을 통한 문제 해결에 대한 것은 자세한 포스팅에서 봐야한다.
[Spring]스프링 핵심 원리 - 빈 스코프 (tistory.com)
[Spring]스프링 핵심 원리 - 빈 스코프
📝빈 스코프 지금까지 학습에서 스프링 빈이 스프링 컨테이너가 생성될 때 함께 생성되어 스프링 컨테이너가 종료될 때 같이 종료된다고 학습하였다. 이것은 스프링 빈이 기본적으로 싱글톤
quddnd.tistory.com
'정리' 카테고리의 다른 글
[Spring]스프링 참고 정리 (0) | 2024.02.12 |
---|