JAVA/Spring(113)
-
MockMvc 사용시 LocalDateTime 배열 직렬화 문제 해결
상황 Spring Framework에서 WebMvcTest를 수행하던중에 MockMvc를 이용하여 LocalDateTime 타입의 데이터를 Json 직렬화시 배열로 나오는 문제가 발생하였습니다. 예를 들어 다음은 어떤 특정한 종목의 지정가 알림 배열을 직렬화한 결과입니다. "targetPrices":[ { "notificationId":1, "targetPrice":60000, "dateAdded":[2024,2,22,13,40,0,766630000] }, { "notificationId":2, "targetPrice":70000, "dateAdded":[2024,2,22,13,40,0,766630000] } ] 위 직렬화 결과를 보면 dateAdded의 값이 "2024-02-22T13:40:00.766..
2024.02.22 -
Spring Framework Filter 등록
목차 - Filter의 개념 - FilterRegistrationBean을 이용한 Filter 등록 - @Component를 이용한 단순 Filter 등록 - @WebFilter + @ServletComponentScan을 이용한 Filter 등록 - Filter 등록시 주의사항 이번글에서는 Spring Framework에 Filter에 대해서 소개합니다. Filter의 간단한 개념과 Spring Framework에 Filter를 등록하는 다양한 방법과 Filter 등록시 주의사항에 대해서 소개합니다. 1. Filter의 개념 필터(Filter)는 J2EE(Java 2 Enterprise Edition) 표준 스펙 기능이며, 클라이언트의 요청이 들어오면 Spring Context의 DispatcherS..
2024.01.28 -
빈 생명주기 콜백
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