객체 지향 설계와 스프링
스프링을 배우기에 앞서 다형성과 역할-구현 분리, SOLID 5원칙이 왜 좋은 객체 지향 설계의 토대가 되는지 정리합니다.
스프링을 배우기에 앞서 다형성과 역할-구현 분리, SOLID 5원칙이 왜 좋은 객체 지향 설계의 토대가 되는지 정리합니다.
회원 조회와 주문 할인 정책 예제를 구현하며 DIP 위반 문제를 발견하고, AppConfig로 관심사를 분리하는 과정을 정리합니다.
중복이 있던 AppConfig를 리팩터링해 역할과 구현이 한눈에 드러나도록 정리하고, 그 과정에서 지켜지는 SOLID 원칙을 살펴봅니다.
순수 자바 코드로 작성했던 AppConfig를 @Configuration과 @Bean으로 전환해 스프링 컨테이너에 빈을 등록하는 과정을 정리합니다.
스프링 컨테이너의 최상위 인터페이스인 BeanFactory와, 이를 상속해 다양한 부가 기능을 제공하는 ApplicationContext의 역할을 정리합니다.
자바 코드 대신 XML로 스프링 빈을 설정하는 방법과, 다양한 설정 형식을 가능하게 하는 BeanDefinition 추상화를 정리합니다.
매번 new로 객체를 생성하던 AppConfig의 문제를 직접 구현한 싱글톤 패턴과 스프링 컨테이너로 각각 해결해 봅니다.
싱글톤 빈은 상태를 공유하기 때문에 무상태로 설계해야 한다는 점을 StatefulService 예제로 확인합니다.
AppConfig가 여러 번 호출되어도 싱글톤이 보장되는 이유를 @Configuration과 CGLIB 바이트코드 조작을 통해 분석합니다.
설정 정보 없이 스프링 빈을 자동으로 등록하는 컴포넌트 스캔과 @Autowired 의존관계 자동 주입의 동작 방식을 정리합니다.
수정자 주입 대신 생성자 주입을 권장하는 이유와, 롬복의 @RequiredArgsConstructor로 생성자 코드를 줄이는 방법을 정리합니다.
스프링에서 @Autowired로 조회한 빈이 2개 이상일 때 발생하는 충돌을 필드명 매칭, @Qualifier, @Primary로 해결하는 방법을 정리합니다.
문자열 기반 @Qualifier의 오타 위험을 없애기 위해 전용 애노테이션을 직접 만들어 타입 안전하게 의존관계를 주입하는 방법을 정리합니다.
스프링 빈을 자동 등록과 수동 등록 중 어떤 기준으로 선택해야 하는지, 업무 로직과 기술 지원 로직을 나누어 정리합니다.
스프링 빈의 생명주기와 초기화·소멸 콜백을 인터페이스, 설정 정보, @PostConstruct/@PreDestroy 세 가지 방식으로 비교해 정리합니다.
싱글톤과 프로토타입 빈 스코프의 차이를 살펴보고, 싱글톤 빈이 프로토타입 빈을 주입받을 때 발생하는 문제를 예제로 정리합니다.
싱글톤 빈이 프로토타입 빈을 매번 새로 받아 쓰지 못하는 문제를 ObjectProvider로 해결하는 방법을 정리합니다.
웹 스코프와 request 스코프의 동작 방식을 살펴보고, ObjectProvider와 CGLIB 프록시로 스코프 문제를 해결하는 방법을 정리합니다.