스프링 핵심 원리 (10) - 다양한 의존관계 주입 방법과 생성자 주입
1. 개요 앞 글까지는 @Autowired 를 생성자에 붙여서 의존관계를 주입하는 방식만 사용해왔다. 그런데 스프링이 의존관계를 주입하는 방법은 생성자뿐만이 아니다. 크게 네 가지 방법이 있고, 각각 동작 시점과 용도가 다르다. 이번 글에서는 네 가지 주입 방법을 비교…
1. 개요 앞 글까지는 @Autowired 를 생성자에 붙여서 의존관계를 주입하는 방식만 사용해왔다. 그런데 스프링이 의존관계를 주입하는 방법은 생성자뿐만이 아니다. 크게 네 가지 방법이 있고, 각각 동작 시점과 용도가 다르다. 이번 글에서는 네 가지 주입 방법을 비교…
1. 개요 앞 글에서는 @Component 가 붙은 클래스를 자동으로 찾아 빈으로 등록하는 컴포넌트 스캔의 기본 동작을 정리했다. 이번에는 스캔 대상을 원하는 대로 걸러내는 필터 옵션과, 스캔하다 보면 반드시 한 번은 마주치는 빈 이름 충돌 문제를 정리한다. 2. in…
1. 개요 지금까지는 @Bean 이 붙은 메서드를 하나하나 작성해서 스프링 빈을 등록했다. 등록할 빈이 몇 개 안 될 때는 문제가 없지만, 빈이 수십 수백 개로 늘어나면 이야기가 다르다. 설정 클래스가 끝없이 길어지고, 등록을 깜빡하는 실수도 생긴다. 스프링은 이 문제…
1. 개요 AppConfig 의 자바 코드를 그대로 읽어보면 이상한 부분이 있다. 여러 @Bean 메서드가 서로를 코드로 직접 호출하고 있는데, 그렇다면 의존 객체가 여러 번 new 되어야 하는 것이어야 하지 않나 라고 생각할 수 있다. @Configuration 이…
1. 개요 스프링은 대부분 여러 사용자가 동시에 요청을 보내는 웹 애플리케이션에서 사용된다. 그런데 지금까지 만들어 온 순수 자바 DI 컨테이너( AppConfig )는 빈을 요청할 때마다 new 로 객체를 새로 만든다. 트래픽이 많아지면 그만큼 객체가 계속 생성·소멸…
1. 개요 앞선 글에서 스프링 컨테이너를 만들고 그 안에 빈이 등록되는 과정을 살펴봤다. 이번에는 컨테이너에 등록된 빈을 확인하고 실제로 꺼내 쓰는 다양한 방법을 정리한다. 등록된 빈을 전체 조회하는 방법부터, 이름으로 찾는 가장 단순한 방법, 같은 타입의 빈이 여러…
1. 개요 여러 애플리케이션이 서로 직접 데이터를 주고받는 구조에서는 파이프라인 개수가 늘어날수록 소스 코드와 버전 관리가 복잡해지고, 타깃 애플리케이션 하나에 장애가 나면 그 영향이 소스 애플리케이션까지 그대로 전파되는 문제가 생긴다. Kafka는 이런 문제를 해결하…
1. 개요 CQRS(Command and Query Responsibility Segregation) 는 데이터 저장소로부터 읽기와 업데이트 작업을 분리하는 아키텍처 패턴이다. 이름 그대로 상태를 변경하는 Command 와 상태를 조회하는 Query 의 책임을 나눠서,…
1. 개요 앞선 글에서 CQRS의 개념과 Kafka의 기초를 정리했으니, 이번 글에서는 Spring Boot로 실제 쓰기(Command)/읽기(Query) 서비스를 나눠 만들고 Kafka로 두 서비스를 연결하는 예제를 구현한다. 쓰기 서비스( cqrs write )는…
1. 개요 이전 글에서 AppConfig 를 만들어 구현 객체를 생성·연결하는 책임을 클라이언트로부터 분리했다. 이번 글에서는 이 변화를 좀 더 일반적인 용어로 정리해본다. AppConfig 가 등장하면서 프로그램의 제어 흐름이 어떻게 바뀌었는지를 제어의 역전(IoC)…