JAVA(244)
-
AssertJ 테스트시 객체의 동등성(Equality) 검증 방법
배경 주식 포트폴리오 가상 관리 프로젝트(FineAnts)를 수행중 포트폴리오(Portfolio)라는 엔티티가 존재합니다. 포트폴리오 엔티티는 예산(Budget), 목표 수익 금액(TargetGain), 최대 손실 금액(MaximumLoss)라는 숫자형 데이터 타입을 필드 멤버로 가지고 있습니다. 기존에는 이 숫자형 데이터 타입을 Long 타입으로써 사용하고 있었고 테스트 코드 작성시 Long 타입의 데이터값을 전달하여 테스트를 검증하였습니다. 예를 들어 기존의 테스트 코드는 다음과 같았습니다. Portfolio changePortfolio = portfolioRepository.findById(portfolioId).orElseThrow(); assertThat(changePortfolio) .extr..
2024.04.07 -
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 -
[모던 자바 인 액션] 람다 표현식
해당 글은 모던 자바 인 액션 도서의 3장 람다 표현식에서 나오는 키워드 용어들을 적고 제 생각대로 작성한 글입니다. 틀린 내용이 있을 수 있습니다. 동작 파라미터화 함수형 인터페이스를 매개변수로 전달하여 실행시키는 것 메소드의 동작을 외부에서 보이지 않게 캡슐화한 다음에 메소드로 전달해서 수행하는것 매개변수를 받은 메소드는 동작 파라미터화된 함수형 인터페이스의 내부를 모른체로 실행시키기만 하면 됩니다. 람다 표현식 이름이 없는 함수 메소드로 전달할 수 있는 익명 함수를 단순하게 표현한 표현식 람다 표현식은 어디에 사용되는가? 함수형 인터페이스에서 사용할 수 있습니다. 예를 들어 스트림의 filter 메소드의 매개변수로 Predicate를 기대하는데 람다 표현식으로 Predicate를 표현할 수 있습니다..
2023.10.12 -
빈 생명주기 콜백
1. 빈 생명주기 콜백 빈 생명주기 콜백이란 무엇인가? 스프링 빈 생명주기 콜백은 스프링 컨테이너가 스프링 빈 인스턴스를 초기화, 소멸하는 과정에서 일어나는 콜백 메소드 호출을 의미합니다. 빈 생명주기 콜백의 필요성 콜백은 콜백 함수를 부를 때 사용되는 용어입니다. 콜백 함수란 특정 이벤트가 발생했을때 호출되는 함수를 콜백함수라고 합니다. 콜백 함수는 이벤트 조건에 따라 발생할수도 발생하지 않을수도 있는 함수입니다. 콜백이 필요한 이유는 데이터베이스 커넥션 풀(Connection Pool)이나 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요합니다. 이때 객체의 초기화와 종료 작업시 ..
2023.05.10 -
@Qualifier, @Primary를 사용하여 스프링 빈 조회
1. @Qualifier, @Primary의 필요성 @Autowired나 스프링 컨테이너의 getBean()과 같은 메소드를 이용하여 스프링 컨테이너의 스프링 빈을 타입으로 조회하는 경우가 있습니다. 그런데 스프링 컨테이너에 동일한 타입의 스프링 빈이 2개 이상 있는 경우 타입으로 조회시 NoUniqueBeanDefinitionException 에러가 발생할 수 있습니다. 예를 들어 DiscountPolicy라는 인터페이스의 구현체가 2개가 있고 두 구현체 모두 스프링 컨테이너에 스프링 빈으로 등록되어 있는 상태입니다. 위와 같은 상황에서 @Autowired를 사용하여 자동 주입을 수행할때 스프링 빈의 타입으로 조회합니다. 위 그림과 같이 자동 주입시 DiscountPolicy 인터페이스 타입으로 등록되..
2023.05.06