JAVA/Spring(111)
-
빈 생명주기 콜백
1. 빈 생명주기 콜백 빈 생명주기 콜백이란 무엇인가? 스프링 빈 생명주기 콜백은 스프링 컨테이너가 스프링 빈 인스턴스를 초기화, 소멸하는 과정에서 일어나는 콜백 메소드 호출을 의미합니다. 빈 생명주기 콜백의 필요성 콜백은 콜백 함수를 부를 때 사용되는 용어입니다. 콜백 함수란 특정 이벤트가 발생했을때 호출되는 함수를 콜백함수라고 합니다. 콜백 함수는 이벤트 조건에 따라 발생할수도 발생하지 않을수도 있는 함수입니다. 콜백이 필요한 이유는 데이터베이스 커넥션 풀(Connection Pool)이나 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요합니다. 이때 객체의 초기화와 종료 작업시 ..
2023.05.10 -
@Qualifier, @Primary를 사용하여 스프링 빈 조회
1. @Qualifier, @Primary의 필요성 @Autowired나 스프링 컨테이너의 getBean()과 같은 메소드를 이용하여 스프링 컨테이너의 스프링 빈을 타입으로 조회하는 경우가 있습니다. 그런데 스프링 컨테이너에 동일한 타입의 스프링 빈이 2개 이상 있는 경우 타입으로 조회시 NoUniqueBeanDefinitionException 에러가 발생할 수 있습니다. 예를 들어 DiscountPolicy라는 인터페이스의 구현체가 2개가 있고 두 구현체 모두 스프링 컨테이너에 스프링 빈으로 등록되어 있는 상태입니다. 위와 같은 상황에서 @Autowired를 사용하여 자동 주입을 수행할때 스프링 빈의 타입으로 조회합니다. 위 그림과 같이 자동 주입시 DiscountPolicy 인터페이스 타입으로 등록되..
2023.05.06 -
컴포넌트 스캔의 스프링 빈 중복 등록과 충돌
스프링 빈 중복 등록 컴포넌트 스캔시 @Component, @Service와 같은 애노테이션이 적용된 클래스를 대상으로 자동으로 스프링 빈으로 등록할수도 있지만 @Configuration과 @Bean을 통해서 수동적으로 빈을 등록할 수 있습니다. 스프링 빈이 중복 등록되는 경우 어떻게 되는지 알아봅니다. 1. 자동 빈 등록 vs 자동 빈 등록 NoUniqueBeanDefinitionException 예외 발생 동일한 인터페이스를 구현한 구현체가 2개 있고 두 구현체 모두 @Component를 적용하였다고 가정합니다. @Component public class MemoryMemberRepository implements MemberRepository { // ... } @Component public cl..
2023.05.03 -
컴포넌트 스캔의 필터(Filter) 생성
필터 필터의 필요성 컴포넌트 스캔시 옵션으로 includeFilter 또는 excludeFilter를 통해서 특정한 범위의 대상은 스프링 빈으로 등록하거나 제외할 수 있습니다. 이때 includeFilter 또는 excludeFilter 옵션값으로 필터를 설정합니다. 필터(Filter)의 종류 includeFilter : 컴포넌트 스캔에 스프링 빈으로 등록할 탐색 범위를 추가합니다. excludeFilter : 컴포넌트 스캔에 스프링 빈으로 등록 제외할 탐색 범위를 추가합니다. 필터 등록 방법 1. includeFilter에 설정할 커스텀 애노테이션 정의 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @in..
2023.05.03 -
컴포넌트 스캔(ComponentScan)
목차 컴포넌트 스캔의 필요성 컨포넌트 스캔 예시 excludeFilters basePackages basePackageClasses 컴포넌트 스캔(ComponentScan) 컴포넌트 스캔은 클래스를 탐색하며 @Component 애노테이션이 붙은 클래스를 스프링 빈으로 등록하는 기능입니다. 컴포넌트 스캔의 필요성 컴포넌트 스캔이 필요한 이유는 기존 @Bean을 통해서 수동적으로 스프링 빈을 등록하였지만, 등록할 빈 개수가 증가할수록 관리가 어려워집니다. 따라서 이러한 빈 등록을 자동적으로 해야할 필요성이 있습니다. 컴포넌트 스캔을 사용하지 않고 기존 스프링 빈을 등록하는 대표적인 방법은 @Bean 애노테이션을 사용하는 것입니다. 다음 코드와 같이 @Configuration 애노테이션이 적용된 클래스의 메소..
2023.05.03 -
SRP(Single Responsility Principle, 단일 책임 원칙)
SRP(Single Responsility Principle, 단일 책임 원칙) 단일 책임 원칙은 어떤 원칙인가? 어떤 한 객체는 하나의 책임만을 가져야 한다는 원칙입니다. 여기서 책임이란 어떤 객체가 그 객체에 맞는 역할을 수행하기 위한 기능들을 의미합니다. 역할은 객체가 어떤 책임들을 수행할 것인지 정의한 것입니다. 제 주관적인 생각으로는 단일 책임이라는 표현보다는 단일 역할 원칙이라는 표현이 더 적절하다고 생각합니다. 즉, 한 객체는 하나의 역할만을 갖고 책임들을 수행해야 한다는 원칙이라고 생각합니다. 역할 : 객체가 역할에 맞는 책임들을 수행할 것인지 정의한 것 책임 : 역할에 맞는 기능들 예를 들면 자동차라는 객체의 주요한 역할은 운전하는 것입니다. 그렇다면 자동차 역할에 따른 책임들이 존재할 ..
2023.05.03