본문 바로가기

Spring/기본9

9. 빈 스코프 1. 빈 스코프 지금까지 공부한 스프링 빈은, 스프링 컨테이너의 시작과 함께 생성되어서 스프링 컨테이너가 종료될 때까지 유지된다고 학습했다. 이것은 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. (scope : 빈이 존재할 수 있는 범위) 싱글톤 : 기본 스코프 프로토타입 : 스프링 컨테이너가 빈의 생성과 의존관계 주입까지만 관여하고, 더는 관리하지 않는 것 웹 관련 스코프 - request : 웹 요청이 들어오고 나갈 때까지 유지되는 스코프 - session : 웹 세션이 생성되고 종료될 때까지 유지되는 스코프 - application : 웹 서블릿 컨텍스트와 같은 범위로 유지되는 스코프 2. 프로토타입 스코프 - 프로토타입 스코프의 빈을 조회하면, 스프링 컨테이너는 항상 새로운 인스턴스를.. 2023. 8. 10.
8. 빈 생명주기 콜백 1. 빈 생명주기 콜백 시작 애플리케이션에서 데이터베이스 커넥션 풀이나 네트워크 소켓과 같은 리소스를 애플리케이션의 생명주기에 맞춰서 초기화 및 종료 작업을 수행해야 할 경우 사용한다. 스프링 프레임워크는 빈의 라이프사이클 관리를 제공하여 이러한 작업을 간편하게 처리할 수 있게 도와준다. 스프링 빈의 라이프사이클 객체 생성 → 의존관계 주입 스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 다음에, 필요한 데이터를 사용할 수 있는 준비가 완료된다. 따라서 초기화 작업(객체 메서드 호출, 외부 커넥션 연결)은 의존관계 주입이 모두 완료되고 난 다음에 호출해야 한다. Q. 그런데 개발자가 의존관계 주입이 모두 완료된 시점을 어떻게 알 수 있을까?? A. 스프링은 의존관계 주입이 완료되면 스프링 빈에게 .. 2023. 8. 10.
7. 의존관계 자동 주입 1. 의존관계 주입 방법 3가지 1) 생성자 주입 - 생성자를 통해서 의존관계를 주입하는 방법 - 특징 - 생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다. - 불변, 필수 의존관계에 사용 *중요! 생성자가 딱 1개만 있으면 @Autowired를 생략해도 (스프링 컨테이너에 등록된 빈 객체가) 자동 주입된다. 2) 수정자 주입 (setter) - setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입하는 방법 - 특징 - 선택, 변경 가능성이 있는 의존관계에 사용 cf) @Autowired의 기본 동작은 주입할 대상이 없으면 오류가 발생한다. 주입할 대상이 없어도 동작하게 하려면 @Autowired(required=false) 로 지정하면 된다. 3) 필드 주입 - 외부에.. 2023. 8. 10.
6. 컴포넌트 스캔 1. 스프링 빈 등록, AppConfig의 변화 지금까지 스프링 빈 등록은 AppConfig.class 에서의 @Bean / XML 에서의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다. 그러나, 이와 같은 설정 정보 없이도 스프링에서 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능을 제공한다. basePackages : 탐색할 패키지의 시작 위치를 지정한다. 이 패키지를 포함해서 하위 패키지를 모두 탐색한다. basePackageClasses : 지정한 클래스의 패키지를 탐색 시작 위치로 지정한다. - 만약 지정하지 않으면 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다. 권장하는 방법 - 패키지 위치를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트 .. 2023. 8. 4.
5. 싱글톤 컨테이너 1. 싱글톤 패턴 1) 정의 - 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 - 따라서, 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. 2) 문제점 - 싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다. → 적용할 모든 클래스를, 위와 같은 형식으로 만들어야 한다. - 의존관계상 클라이언트가 구체 클래스에 의존한다. → new() 할 때, 각 구체 클래스로 만듦 → DIP·OCP 위반 - 테스트하기 어렵다. - private 생성자로 자식 클래스를 만들기 어렵다. → 상속을 통한 새로운 동작을 추가 및 변경이 어려움 - 결론적으로, 유연성이 떨어진다. → 언제나 동일한 객체를 사용해야 하기 때문에 다른 구현을 하는 것이 어려움 2. 스프링에서의 해결방법 (Annotati.. 2023. 8. 4.
4. 스프링 컨테이너와 스프링 빈 1. 스프링 컨테이너 생성 1) 개념 - ApplicationContext 를 "스프링 컨테이너" 라 한다. - ApplicationContext 는 인터페이스다. - 스프링 컨테이너는 XML 기반으로도 (new GenericXmlApplicationContext("appConfig.xml")), 애노테이션 기반의 자바 설정 클래스 (new AnnotationConfigApplicationContext(AppConfig.class))로 만들 수 있다. * 정확히는 스프링 컨테이너를 BeanFactory, ApplicationContext로 구분하지만, BeanFactory를 직접 사용하는 경우는 거의 없으므로 일반적으로 ApplicationContext를 스프링 컨테이너라 한다. 2) 내부 동작 - Ap.. 2023. 8. 3.