eta_kyung.blog

스프링 핵심 원리 (13) - List, Map으로 전략 패턴 구현하기와 자동/수동 등록 기준

1. 개요 앞 글에서는 같은 타입의 빈이 여러 개일 때 그중 하나만 골라서 주입받는 방법을 다뤘다. 그런데 반대로 같은 타입의 빈을 하나만 고르는 게 아니라 전부 다 받아서 써야 하는 경우도 있다. 스프링은 이럴 때 List나 Map으로 한 번에 주입받는 방법을 지원한다. 이번 글에서는 이 기능으로 전략 패턴을 얼마나 간단하게 구현할 수 있는지 살펴...

스프링 핵심 원리 (12) - 조회 빈이 2개 이상일 때, @Qualifier와 @Primary

1. 개요 @Autowired는 타입을 기준으로 스프링 빈을 찾아서 주입한다. 지금까지 예제에서는 인터페이스를 구현한 빈이 하나뿐이었기 때문에 문제가 없었지만, 실무에서는 같은 인터페이스를 구현한 빈이 여러 개 등록되는 경우가 흔하다. 이번 글에서는 타입으로 조회했을 때 빈이 두 개 이상 걸리면 왜 오류가 나는지, 그리고 이를 해결하는 세 가지 방법...

스프링 핵심 원리 (11) - 롬복과 최신 트렌드

1. 개요 앞 글에서 생성자 주입을 기본으로 써야 하는 이유를 정리했다. 그런데 막상 실무 코드를 짜보면 대부분의 의존관계가 final 필드이고, 그 필드들을 그대로 받아 대입해주는 생성자를 매번 손으로 채워 넣어야 한다. 필드가 늘어나면 생성자 파라미터도, 대입 코드도 같이 늘어나는 반복 작업이다. 이번 글에서는 이 반복을 롬복(Lombok)으로 ...

스프링 핵심 원리 (10) - 다양한 의존관계 주입 방법과 생성자 주입

1. 개요 앞 글까지는 @Autowired를 생성자에 붙여서 의존관계를 주입하는 방식만 사용해왔다. 그런데 스프링이 의존관계를 주입하는 방법은 생성자뿐만이 아니다. 크게 네 가지 방법이 있고, 각각 동작 시점과 용도가 다르다. 이번 글에서는 네 가지 주입 방법을 비교하고, 그중에서도 왜 생성자 주입이 권장되는지, 그리고 주입 대상이 없어도 동작해야 ...

스프링 핵심 원리 (9) - 컴포넌트 스캔 필터와 빈 중복 등록

1. 개요 앞 글에서는 @Component가 붙은 클래스를 자동으로 찾아 빈으로 등록하는 컴포넌트 스캔의 기본 동작을 정리했다. 이번에는 스캔 대상을 원하는 대로 걸러내는 필터 옵션과, 스캔하다 보면 반드시 한 번은 마주치는 빈 이름 충돌 문제를 정리한다. 2. includeFilters / excludeFilters includeFil...

스프링 핵심 원리 (8) - 컴포넌트 스캔과 의존관계 자동 주입

1. 개요 지금까지는 @Bean이 붙은 메서드를 하나하나 작성해서 스프링 빈을 등록했다. 등록할 빈이 몇 개 안 될 때는 문제가 없지만, 빈이 수십~수백 개로 늘어나면 이야기가 다르다. 설정 클래스가 끝없이 길어지고, 등록을 깜빡하는 실수도 생긴다. 스프링은 이 문제를 설정 정보 없이도 빈을 자동으로 찾아 등록하는 컴포넌트 스캔과, 의존관계를 자동으...

스프링 핵심 원리 (7) - @Configuration과 바이트코드 조작

1. 개요 AppConfig의 자바 코드를 그대로 읽어보면 이상한 부분이 있다. 여러 @Bean 메서드가 서로를 코드로 직접 호출하고 있는데, 그렇다면 의존 객체가 여러 번 new 되어야 하는 것이어야 하지 않나 라고 생각할 수 있다. @Configuration이 바이트코드 조작을 통해 싱글톤을 보장하는 원리를 정리한다. 2. 의심스러운 지점 ...

스프링 핵심 원리 (6) - 싱글톤 컨테이너

1. 개요 스프링은 대부분 여러 사용자가 동시에 요청을 보내는 웹 애플리케이션에서 사용된다. 그런데 지금까지 만들어 온 순수 자바 DI 컨테이너(AppConfig)는 빈을 요청할 때마다 new로 객체를 새로 만든다. 트래픽이 많아지면 그만큼 객체가 계속 생성·소멸되므로 메모리 낭비가 심해진다. 이 문제를 어떻게 해결하는지, 그리고 그 해결책이 어떤 ...

스프링 핵심 원리 (5) - 스프링 빈 조회와 BeanFactory

1. 개요 앞선 글에서 스프링 컨테이너를 만들고 그 안에 빈이 등록되는 과정을 살펴봤다. 이번에는 컨테이너에 등록된 빈을 확인하고 실제로 꺼내 쓰는 다양한 방법을 정리한다. 등록된 빈을 전체 조회하는 방법부터, 이름으로 찾는 가장 단순한 방법, 같은 타입의 빈이 여러 개일 때, 상속 관계에 있는 빈을 조회할 때 각각 어떻게 동작하는지 확인하고, 마지...