본문 바로가기

스프링5

[스프링] 스프링 핵심원리 - 빈 생명주기 콜백 스프링 빈의 시작이나 끝에 함수를 호출하여 작업을 해야될 수도 있다. 빈 생명주기 콜백으로 이를 수행할 수 있다. 스프링 빈의 이벤트 라이프 사이클 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료 빈 생명주기 콜백의 방법 1. 인터페이스 (InitializingBean, DisposableBean) 2. 설정정보에 초기화 메서드, 종료 메서드 지정 @Bean(initMethod="", destroyMethod="") 3. @PostConstruct, @PreDestroy 어노테이션 3번 방법을 기본으로 사용하고, 코드를 고칠 수 없는 외부 라이브러리를 초기화, 종료해야 하면 2번 방법을 사용한다. 인터페이스 (Initializ.. 2021. 12. 10.
[스프링] 스프링 핵심원리 - 의존관계 자동주입 의존관계 주입 방법 4 가지 생성자 주입 수정자 주입 (setter 주입) 필드 주입 일반 메서드 주입 기본적으로 생성자 주입을 사용하고, 가끔 옵션이 필요하면 수정자 주입을 선택한다. 생성자 주입 생성자에 @Autowired를 붙여 사용 생성자가 딱 1개 있을 경우 @Autowired를 생략해도 됨 생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용 (필수는 null 값이 들어가면 안되는 걸 의미) 생성자 주입을 사용하면 필드에 final 키워드를 사용할 수 있다. -> 값이 설정되지 않으면 오류를 컴파일 시점에서 막아줌 롬복 @RequiredArgsConstructor를 사용하여 간단하게 생성자 주입을 설정할 수 있음 수정자 주입 (setter 주입) setter에 @.. 2021. 12. 6.
[스프링] 스프링 핵심원리 - 싱글톤 컨테이너 싱글톤 패턴 웹 애플리케이션은 여러 사용자가 요청을 하기 때문에, 이 요청 시 마다 새로운 객체를 생성해서 주게 되면 메모리 낭비가 심하다. 일반적인 DI 컨테이너를 사용하면 항상 새로운 객체를 주게 된다. 이를 싱글톤 패턴을 통해 하나의 동일한 객체를 주게끔 보장할 수 있다. 하지만, 이 싱글톤 패턴을 사용하면 문제점이 있다. 싱글톤 패턴을 구현하는 코드 자체가 많이 들어감 클라이언트가 구체 클래스에 의존하게 됨 → DIP를 위반하고, OCP를 위반할 가능성 높음 내부 속성을 변경하거나 초기화하기 어렵다 private 생성자로 자식 클래스를 만들기 어렵다 싱글톤 컨테이너 싱글톤 컨테이너는 싱글톤 패턴의 문제점을 해결하면서, 객체 인스턴스를 싱글톤으로 관리한다. 스프링 컨테이너가 바로 싱글톤 컨테이너 역.. 2021. 12. 6.
[스프링] 스프링 핵심원리 - 스프링 컨테이너와 빈 Ioc, DI, 컨테이너, 빈 IoC (Inversion of Control) 프로그램의 제어 흐름을 직접 제어하는 거이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)라 한다. 프레임워크는 내가 작성한 코드를 제어하고, 대신 실행한다. DI (Dependency Injection) 한 객체가 추상화에만 의존할 수 있도록 어떤 구현체에 의존할 지는 AppConfig 같은 외부 클래스에서 결정하고 의존관계를 주입함 의존 관계는 정적인 클래스 의존 관계와, 실행 시점에 결정되는 동적인 객체(인스턴스) 의존 관계를 구분해서 생각해야함 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 실제 의존관계가 연결 되는 것을 의존관계 주입이라 한다. 의존관계 주입을 사용하면 정적 의존 관계를 변경하지 않고, .. 2021. 12. 5.