Spring/Spring Core (13) 썸네일형 리스트형 [Spring Core] request 스코프 빈 생성 문제 및 해결(Provider & 프록시) 📌 학습 목차1. 들어가기 전2-1. 웹 스코프 개념 및 특징2-2. request 스코프 빈 생성 문제3-1. ObjectProvider를 통한 문제 해결3-2. 프록시를 통한 문제 해결1. 들어가기 전•HTTP 요청이 없는 상태에서 request 스코프 빈을 의존관계로 주입받으려 할 때 발생하는 문제를 이해한 후, ObjectProvider와 프록시를 통한 해결 방법에 대해 학습하고자 함2-1. 웹 스코프 개념 및 특징•웹 환경에서 동작하는 웹 스코프에는 request, session, application, websocket 스코프가 있음•웹 스코프는 프로토타입 스코프와 달리 스프링 컨테이너에서 종료 시점까지 관리해 @PreDestroy를 사용한 종료 메서드가 호출됨•request 스코프는 H.. [Spring Core] 싱글톤 & 프로토타입 스코프 빈 동시 사용 문제 및 해결(Provider) 📌 학습 목차1. 들어가기 전2. 싱글톤 & 프로토타입 스코프 빈 동시 사용 문제3. Provider를 통한 문제 해결1. 들어가기 전•싱글톤 스코프 빈과 프로토타입 스코프 빈을 함께 사용할 때 발생하는 문제를 이해한 후, Provider를 통한 해결 방법에 대해 학습하고자 함2. 싱글톤 & 프로토타입 스코프 빈 동시 사용 문제•스프링 컨테이너에 싱글톤 스코프 빈을 요청하면 항상 같은 싱글톤 빈을 반환하는 반면, 프로토타입 스코프 빈을 요청할 경우 항상 새로운 프로토타입 빈을 생성해 반환함 단, 싱글톤 빈이 프로토타입 빈을 의존관계로 주입받아 함께 사용할 경우, 프로토타입 빈이 싱글톤 빈과 유지되어 새로운 요청에도 같은 프로토타입 빈이 사용되는 문제가 발생함 @Testvoid singl.. [Spring Core] 싱글톤 & 프로토타입 스코프 개념 및 비교 📌 학습 목차1. 들어가기 전2. 싱글톤 스코프3. 프로토타입 스코프1. 들어가기 전•스프링에서 지원하는 싱글톤 스코프와 프로토타입 스코프에 대해 학습하고자 함2. 싱글톤 스코프•스프링 컨테이너의 시작부터 종료까지 유지되는 가장 넓은 범위의 스코프에 해당하며, 스프링 빈은 기본적으로 싱글톤 스코프로 생성됨•스프링 컨테이너에 싱글톤 스코프 빈을 요청할 경우, 컨테이너는 항상 같은 싱글톤 빈을 반환함 @Testvoid singletonBeanFind() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SingletonBean.class); Object sin.. [Spring Core] 스프링 빈 생명주기 콜백(@PostConstruct & @PreDestroy) 📌 학습 목차1. 들어가기 전2. 스프링 빈 생명주기 콜백1. 들어가기 전•애플리케이션 시작 시점에 필요한 연결을 미리 맺거나, 종료 시점에 연결을 안전하게 종료하는 등의 초기화 및 종료 작업이 필요함 이에 스프링에서 지원하는 다양한 방식의 스프링 빈 생명주기 콜백에 대해 학습하고자 함2. 스프링 빈 생명주기 콜백•싱글톤 기준, 스프링 빈은 아래와 같은 이벤트 라이프 사이클을 가짐 스프링 컨테이너 생성 -> 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸 전 콜백•스프링 빈은 의존관계 주입이 완료된 후에 초기화 작업을 진행할 수 있음 이때 스프링은 다양한 방식을 통해 의존관계 주입 완료 시점을 알려주는 초기화 콜백과 스프링 컨테이너가 종료되기 전 안전하게 종료 작업을 .. [Spring Core] 조회한 스프링 빈이 다수인 경우 / 조회한 빈이 모두 필요한 경우 📌 학습 목차1. 들어가기 전2. 조회한 스프링 빈이 2개 이상인 경우3. 조회한 스프링 빈이 모두 필요한 경우1. 들어가기 전•의존관계 자동 주입 시 타입이 같은 스프링 빈이 2개 이상 조회된 경우의 해결 방법과 특정 타입의 빈이 모두 필요한 경우에 대해 학습하고자 함2. 조회한 스프링 빈이 2개 이상인 경우•@Autowired의 기본적인 조회 전략은 타입이 같은 스프링 빈을 찾아 의존관계로 주입함 이때 타입이 같은 빈이 2개 이상 조회될 경우, 빈 수동 등록 외 @Autowired 매칭과 @Qualifier 및 @Primary 사용을 통해 해결할 수 있음•@Qualifier와 @Primary를 함께 사용할 경우, @Qualifier의 우선순위가 더 높아 해당 애노테이션을 사용한 빈을 의존관.. [Spring Core] 다양한 의존관계 자동 주입 방식 / 생성자 주입 권장 이유 📌 학습 목차1. 들어가기 전2. 다양한 의존관계 자동 주입 방식3. 생성자 주입 방식을 권장하는 이유1. 들어가기 전•다양한 의존관계 자동 주입 방식을 이해한 후, 스프링을 포함한 대부분의 DI 프레임워크에서 생성자 주입 방식을 권장하는 이유에 대해 학습하고자 함 2. 다양한 의존관계 자동 주입 방식1) 생성자 주입•생성자를 통해 의존관계를 주입받는 방식으로, 객체를 생성할 때 단 1번만 호출되어 불변 및 필수 의존관계에 사용함 @Componentpublic class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy d.. [Spring Core] 컴포넌트 스캔과 의존관계 자동 주입 / 스프링 빈 중복 등록 및 충돌 📌 학습 목차1. 들어가기 전2. 컴포넌트 스캔과 의존관계 자동 주입3. 스프링 빈 중복 등록 및 충돌1. 들어가기 전•@ComponentScan과 @Autowired 기능에 대해 이해한 후, 스프링 빈을 자동 또는 수동으로 등록할 경우에 발생할 수 있는 경우 대해 학습하고자 함2. 컴포넌트 스캔과 의존관계 자동 주입•이전까지 AppConfig에 설정 정보를 직접 작성했으나, 등록할 스프링 빈이 많아질수록 누락 등의 문제가 발생할 수 있음 이에 스프링은 빈을 자동으로 등록하는 @ComponentScan과 의존관계를 자동으로 주입하는 @Autowired 기능을 제공함 1) @ComponentScan 사용•@Component가 붙은 클래스를 자동으로 스캔해 스프링 빈으로 등록하기 위해 설정 클래스에.. [Spring Core] 스프링 빈의 싱글톤 보장 / 바이트 코드의 조작(CGLIB) 📌 학습 목차1. 들어가기 전2. 스프링 빈의 싱글톤 보장3-1. @Configuration과 바이트 코드의 조작(CGLIB)3-2. @Configuration을 사용하지 않을 경우1. 들어가기 전•스프링 빈의 싱글톤을 보장하기 위한 스프링 내부 동작을 학습하고자 함2. 스프링 빈의 싱글톤 보장•스프링 컨테이너는 AppConfig의 설정 정보를 참고해 @Bean을 사용한 메서드를 모두 호출하여 반환된 객체를 스프링 빈으로 등록함 이때 싱글톤 레지스트리의 역할을 하는 스프링 컨테이너는 빈의 싱글톤을 보장해야 함 @Configurationpublic class AppConfig { @Bean public MemberService memberService() { System.out.. [Spring Core] 싱글톤 방식의 필요성과 주의점 / 싱글톤 컨테이너 📌 학습 목차1. 들어가기 전2. 싱클톤 컨테이너3. 싱글톤 방식의 주의점1. 들어가기 전•싱글톤 방식의 필요성을 이해한 후, 싱글톤 컨테이너의 개념과 싱글톤 방식에 따른 주의점에 대해 학습하고자 함2. 싱글톤 컨테이너1) 싱글톤 방식의 필요성•대부분의 스프링 애플리케이션은 웹 애플리케이션에 해당하며, 이 경우 일반적으로 여러 클라이언트가 동시에 요청을 보냄•순수 DI 컨테이너인 AppConfig의 경우, 요청이 올 때마다 새로운 객체를 생성함에 따라 상당한 메모리 낭비가 발생할 수 있음 이에 클라이언트 요청에 대해 1개의 객체만 생성한 후, 해당 객체를 공유해 사용할 수 있는 효율적인 방식이 필요함 이때 1개의 객체만 생성되는 것을 보장하는 디자인 패턴을 싱글톤 패턴(singleton patt.. [Spring Core] 스프링 방식으로 변경 / 스프링 컨테이너 & 스프링 빈(Bean) 📌 학습 목차1. 들어가기 전2. 스프링 방식으로 변경3. 스프링 컨테이너 생성 과정1. 들어가기 전•순수 Java 코드로 작성한 AppConfig를 스프링 방식으로 변경한 후, 스프링 컨테이너의 생성 과정을 통해 스프링 컨테이너와 스프링 빈(Bean)에 대해 학습하고자 함2. 스프링 방식으로 변경•기존의 경우, 순수 Java 코드로 작성한 설정 클래스를 통해 직접 객체를 생성하고 의존관계를 주입(DI)함 이제 애노테이션에 기반한 설정 클래스로 스프링 컨테이너를 생성하고, 스프링 컨테이너에 등록된 스프링 빈을 찾아 사용하는 방식으로 변경하고자 함 ···import org.springframework.context.annotation.Bean;import org.springframework.c.. [Spring Core] 제어의 역전(IoC) / 의존관계 주입(DI) / DI 컨테이너 📌 학습 목차1. 들어가기 전2. 제어의 역전(Inversion of Control, IoC)3-1. 의존관계 주입(Dependency Injection, DI)3-2. DI 컨테이너1. 들어가기 전•AppConfig 사용에 따른 제어의 역전(IoC), 의존관계 주입(DI), DI 컨테이너에 대해 학습하고자 함2. 제어의 역전(Inversion of Control, IoC)public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository = new MemoryMemberRepository(); private final DiscountPolicy discountPolicy =.. [Spring Core] AppConfig를 통한 관심사의 분리(SoC) 📌 학습 목차1. 들어가기 전2. 관심사의 분리(Separation of Concerns, SoC)3. AppConfig를 통한 관심사의 분리1. 들어가기 전•AppConfig를 통한 관심사의 분리(SoC)로 SOLID 원칙 내 OCP & DIP 위반 문제를 해결하는 과정을 학습하고자 함2. 관심사의 분리(Separation of Concerns, SoC)public class OrderServiceImpl implements OrderService { private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); @Override public Order createOrder(Long memberId, String ite.. [Spring Core] OCP & DIP 위반 문제 발생 / AppConfig의 등장 📌 학습 목차1. 들어가기 전2. OCP & DIP 위반 문제 발생3. AppConfig의 등장1. 들어가기 전•SOLID 원칙 내 OCP & DIP 위반 문제를 이해한 후, AppConfig가 등장한 배경을 학습하고자 함2. OCP & DIP 위반 문제 발생•다형성을 활용해 역할과 구현으로 분리한 도메인을 설계했으나, OCP & DIP를 위반하는 문제가 발생함 public class OrderServiceImpl implements OrderService {// private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy discountPolicy = new RateDisc.. 이전 1 다음