Spring

    [JPA] JPA Auditing에서 OffsetDateTime 사용하기

    JPA Auditing에서 OffsetDateTime 사용하기 @EnableJpaAuditing을 사용한 jpa의 auditing에서 @CreateDate 과 같은 Date 관련 기능은 기본적으로 LocalDateTime 타입이 할당된다. /** * Default {@link DateTimeProvider} simply creating new {@link LocalDateTime} instances for each method call. * * @author Oliver Gierke * @author Christoph Strobl * @since 1.5 */ public enum CurrentDateTimeProvider implements DateTimeProvider { INSTANCE; /* * (..

    MongoDB 특정 필드만 가져오게끔 하는 projection

    MongoDB 특정 필드만 가져오게끔 하는 projection 개요 몽고 DB에서 document를 조회할 때 매치되는 doc의 모든 필드를 가져오지만 projection을 이용해 특정 필드만 가져올 수가 있다. 필드 수가 많은 collection에서 내가 원하는 데이터의 특정 필드값만 조회하고 싶은데, 전체 필드를 가져오는 것은 굉장히 비효율 적일 것이다. 그럴 때에 사용할 수 있다. public class Person { @Id private String id; private Name name; //Name 클래스는 firstName과 lastName 이렇게 2개의 필드가 존재 @Positive private int age; @CreatedDate private LocalDateTime created..

    [Spring] Filter와 server.compression 설정을 통한 api 압축

    Filter와 server.compression 설정을 통한 api 압축 API를 압축해서 return 하려고 한다. 먼저 가장 대표적인 server.compression 설정을 알아보고 사용해보고 이후 Filter를 이용하여 조금 더 응용해보려고 한다. server.compression 설정을 통한 api 압축 설정 종류 server: compression: enabled: min-response-size: mime-types: excluded-user-agents: server.compression 설정에는 위의 4개 항목이 있다. 단순히 yaml 파일에 기입을 해두면 동작한다. enabled: 압축 여부 default: false min-response-size: 압축을 수행할 최소 용량 defau..

    [Spring Batch] 이벤트 리스너 내용 정리

    Spring Batch 이벤트 리스너 내용 정리 Listener는 배치 흐름 중에 Job, Step, Chunk 단계의 실행 전후에 발생하는 이벤트를 받아 용도에 맞게 활용할 수 있도록 제공하는 인터셉터 개념의 클래스 이벤트를 받기 위해 Listener를 등록해야 하며 등록은 API 설정에서 각 단계별로 지정 가능하다. Job JobExecutionListener - Job 실행 전 후 Step StepExecutionListener - Step 실행 전 후 ChunkListener - Chunk 실행 전 후 (Tasklet 실행 전 후), 오류 시점 ItemReadListener - ItemReader 실행 전 후, 오류 시점, item이 null 일 경우 호출 안됨 ItemProcessListener..

    [Spring Batch] Multi Thread Processing 내용 정리

    Spring Batch Multi Thread Processing 내용 정리 AsyncItemProcessor, AsyncItemWriter Step 안에서 ItemProcessor가 비동기적으로 동작하는 구조 AsyncItemProcessor와 AsyncItemWriter가 함께 구성이 되어야 함 AsyncItemProcessor로 부터 AsyncItemWriter가 받는 최종 결과값은 List 타입이며 비동기 실행이 완료될 때까지 대기한다 spring-batch-integration 의존성 필요 public Step step() throws Exception { return stepBuilderFactory.get("step") .chunk(100) .reader(pagingItemReader()) ..

    [Spring] Spring Data MongoDB 잊어버리는 것들 정리

    Spring Data MongoDB 잊어버리는 것들 정리 기본적으로 CrudRepository 를 사용 core conecept로 CrudRepository 를 사용한다. 하위 계층에 일반적으로 사용하는 MongoRepository 가 존재한다. ref. https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#repositories.core-concepts data jpa와 다르게 생성 시에 컬렉션 생성이 되지 않는다 data jpa에서 spring.jpa.hibernate.ddl-auto 옵션으로 create 과 같은 옵션을 주어 어플리케이션 생성 시에 테이블을 생성하고는 했는데, data mongodb 에서는 따로 컬렉션 생성 ..

    [Spring Batch] @JobScope, @StepScope 에 대해

    Spring Batch @JobScope, @StepScope 에 대해 스프링 빈에 scope 가 있는 것 처럼 Job과 Step에도 빈 생성과 관련한 scope이다. 해당 스코프가 선언되면 빈 생성이 어플리케이션 구동시점이 아니라 빈의 실행시점에 이루어지게 된다. @Values를 주입해서 빈의 실행 시점에 값을 참조할 수 있어 지연 로딩이 가능해진다. @Value("#{jobParameters[파라미터명]}") 와 같이 표현식 언어를 런타임 시점에 주입받을 수 있다. @Values를 사용시에 반드시 빈 선언문에 @JobScope, @StepScope 정의가 필요하다. 프록시 모드를 기본으로 잡고있는 스코프이기 때문에 어플리케이션이 구동될 때에 해당 빈의 프록시 객체가 생성되어 실행 시점에 실제 빈을 호..

    [Spring Batch] 도메인 정리

    BatchAutoConfiguration 스프링 배치가 초기화 될 때 자동으로 실행되는 설정 클래스 Job을 수행하는 JobLauncherApplicationRunner 빈을 생성 SimpleBatchConfiguration JobBuilderFactory와 StepBuilderFactory 생성 스프링 배치의 주요 구성 요소 생성 - 프록시 객체로 생성됨 BatchConfigurerConfiguration BasicBatchConfigurer SimpleBatchConfiguration에서 생성한 프록시 객체의 실제 대상 객체를 생성하는 설정 클래스 빈으로 의존성 주입 받아서 주요 객체들을 참조해서 사용할 수 있다 JpaBatchConfigurer JPA 관련 객체를 생성하는 설정 클래스 @Enable..