[Spring Batch] Tasklet에서 왜 @BeforeStep과 @AfterStep이 동작하지 않을까?
·
Spring
1. Tasklet만으로는 beforeStep이나 afterStep을 트리거하지 못한다.Tasklet을 구현하고 StepBuilder에서 tasklet() 메소드를 등록해주는 것만으로는 @BeforeStep이나 @AfterStep을 사용할 수 없다.Tasklet에서 Step의 생명주기에 관여하고 싶다면 추가적인 작업이 필요하다는 말이다.@Configurationpublic class MemberJobConfig { @Bean("memberJob") public Job memberJob( JobRepository jobRepository, PlatformTransactionManager transactionManager) { return new JobBuilder("memberJob", ..
[Spring] RestClient URI Encoding 문제 (feat. 퍼센트 인코딩)
·
Spring
RestClient의 URI 인코딩DefaultUriBuilderFactoryRestClient를 생성할 때 보통 Builder를 사용해 만들게 됩니다.public interface RestClient { ... static RestClient.Builder builder() { return new DefaultRestClientBuilder(); } .... }RestClient.Bulider가 build() 하는 시점에 아래와 같이 DefaultUriBuilderFactory를 기본으로 생성해 가지고 있습니다.public class DefaultRestClientBuilder { ... @Override public RestClient b..
[Test] Testcontainers를 사용한 DB 테스트
·
Test
1. TestContainers란?예전에 프로젝트를 할 때 멱등성 있는 테스트를 구성하기 위해 테스트 DB를 따로 띄워 테스트를 실행했던 적이 있습니다. 그 때는 Testcontainers의 존재를 몰랐기에 Docker Compose로 테스트 DB를 띄워 테스트를 실행해줬습니다. 테스트 DB 컨테이너를 계속 띄워 놓기엔 때문에 컴퓨터 리소스 낭비도 심했기 때문에 통합 테스트를 실행해야할 때마다 테스트 DB 컨테이너를 띄워주고 테스트가 종료되면 컨테이너를 내리는 식으로 진행되었는데 정말 귀찮은 작업이었습니다. 이런 작업을 자동화해주는 Testcontainers입니다. 똑같이 Docker 환경을 사용하며 테스트가 실행될 때 실제 DB와 같이 돌아가는 DB 컨테이너를 띄워주고, 테스트가 종료되면 자동으로 컨테..
[Test] 비즈니스 로직 테스트: 읽기 쉽고 효율적인 단위테스트
·
Test
1. 비즈니스 로직을 테스트하기 전에 알면 좋은 지식1-1. Layered Architecture와 테스트이 글을 보기 전에 아래 글을 먼저 보고 오는 것을 추천한다. 1-1.Layered Architecture와 1-2.테스트의 분류만 읽고 와도 충분하다.https://myvelop.tistory.com/223 [Spring] Persistence Layer Test와 테스트에 대한 고찰단순히 Persistence Layer를 테스트하는 방법만을 서술하는 것이 아닌, 영속 계층을 테스트해야 하는 이유에 대해 정리하고 어떤 방식으로 테스트하는 것이 더 좋은 방법인지 고민한 내용을 정리해myvelop.tistory.com 간단히 요약하자면, Business Layer는 비즈니스 로직을 수행하는 계층으로 B..
[Test] Persistence Layer Test와 테스트에 대한 고찰
·
Test
단순히 Persistence Layer를 테스트하는 방법만을 서술하는 것이 아닌, 영속 계층을 테스트해야 하는 이유에 대해 정리하고 어떤 방식으로 테스트하는 것이 더 좋은 방법인지 고민한 내용을 정리해보려 합니다.  1. Persistence Layer (혹은 Repository Layer)Persistence Layer의 테스트를 하기 전에 Layered Architecture와 테스트의 분류에 대해 먼저 숙지해두면 각 레이어 별 테스트가 어떤 것을 목적으로 하는지 파악할 수 있고, 그 목적에 맞는 테스트를 만들 수 있다.1-1. Layered ArchitectureLayered Architecture에서 각 계층의 역할은 아래와 같다.Presentation Layer: 사용자의 요청과 응답을 처리하는..
[Spring Security] LogoutFilter 개념부터 사용법까지
·
Spring
Spring Security는 손쉽게 사용할 수 있는 기본 LogoutFilter를 제공한다. 기능을 기본 LogoutFilter 스펙에 맞춰서 구현했다면 아무런 문제가 없겠지만 그렇지 않을 경우(예를 들어 JWT로 인증/인가를 구현) 로그아웃을 했을 때 알 수 없는 오류가 터지기 시작한다. 이럴 땐 내가 원하는 기능에 맞춰 로그아웃 기능을 커스터마이징이 필요한데, 그 기능을 정확히 이해하지 않으면 또 다른 문제가 발생할 수 있다. 지금부터 LogoutFilter의 개념과 구현 과정 중 문제 어떻게 해결할 수 있는지 알아보자. Spring Securiry Logout스프링 시큐리티는 로그아웃 기능을 제공한다. Config 파일에서 아무런 설정을 하지 않아도 기본적으로 제공되는 로그아웃 기능이 동작한다. ..