전체 글
[Spring Batch] 도메인 정리
BatchAutoConfiguration 스프링 배치가 초기화 될 때 자동으로 실행되는 설정 클래스 Job을 수행하는 JobLauncherApplicationRunner 빈을 생성 SimpleBatchConfiguration JobBuilderFactory와 StepBuilderFactory 생성 스프링 배치의 주요 구성 요소 생성 - 프록시 객체로 생성됨 BatchConfigurerConfiguration BasicBatchConfigurer SimpleBatchConfiguration에서 생성한 프록시 객체의 실제 대상 객체를 생성하는 설정 클래스 빈으로 의존성 주입 받아서 주요 객체들을 참조해서 사용할 수 있다 JpaBatchConfigurer JPA 관련 객체를 생성하는 설정 클래스 @Enable..
[Spring Batch] 반복 및 오류 제어 내용 정리
Spring Batch 반복 및 오류 제어 내용 정리 Repeat Spring Batch는 특정 조건이 충족 될 때 까지(또는 반대) Job 또는 Step을 반복하도록 배치 어플리케이션을 구성 할 수 있다. Step의 반복과 Chunk 반복을 RepeatOperation을 사용해서 처리하고 있다. 기본 구현체로 RepeatTemplate을 제공한다. Job -> Step -> ( RepeatTemplate -> Tasklet -> ( RepeatTemplate -> Chunk) 반복 )반복 Tasklet은 이제 Chunk 사용 시에 ChunkOrientedTasklet 를 사용하게 되는데 이곳의 ChunkProvider 가 RepeatTemplate 을 가지고 ItemReader 에서 데이터를 읽어오는 ..
[Spring Batch] Chunk 내용 정리
Spring Batch Chunk 내용 정리 Chunk Chunk란 여러 개의 아이템을 묶은 하나의 덩어리 블록을 의미 한 번에 하나씩 아이템을 입력 받아 Chunk 단위의 덩어리로 만든 후 Chunk 단위로 트랜잭션을 처리함. 즉, Chunk 단위의 Commit과 Rollback이 이루어짐 일반적으로 대용량 데이터를 한 번에 처리하는 것이 아닌 청크 단위로 쪼개어서 더 이상 처리할 데이터가 없을 때 까지 반복해서 입출력하는데 사용됨 Chunk vs Chunk Chunk는 ItemReader로 읽은 하나의 아이템을 Chunk에서 정한 개수만큼 반복해서 저장하는 타입 Chunk는 ItemReader로부터 전달받은 Chunk를 참조해서 ItemProcessor에서 적절하게 가공, 필터링한 다음 ItemWri..
[Spring] @JsonView에 대해
@JsonView에 대해 public class Member { private String name; private int age; private String importantInformation; } 다음과 같은 Member 클래스에 중요한 정보가 있고 특정 api 요청에 대해서 노출이 되면 안된다고 할 때, @JsonView 를 이용하는 방법이 있다. public class AccessLevel { public static class Normal { } public static class Secret extends Normal { } } --------------------------------------------------------------------- public class Member { ..
[Spring] JacksonAnnotationsInside에 대해
JacksonAnnotationsInside에 대해 @JsonDeserialize(converter = 컨버터 클래스) @JsonSerialize(converter = 컨버터 클래스) @JacksonAnnotationsInside @Retention(RetentionPolicy.RUNTIME) public @interface JacksonBoxAnnotation { } jackson 관련 어노테이션들을 하나의 어노테이션에 한데모아 선언하고 @JacksonAnnotationsInside 어노테이션을 붙여서 완성시킨다. 그렇게 만들어진 어노테이션이 붙은 곳에는 해당 어노테이션 내부에 선언되어진 다른 어노테이션들에 적용받게 된다. 가령 위의 코드를 예시를 들면 dto 필드 위에 해당 어노테이션을 붙이면 ser..
[ES] rollup 간략 정리
ElasticSearch rollup에 대해 특정 정보를 es에 계속해서 쌓고있는 상황이라고 하자, 정보를 계속해서 인덱싱하다보면 용량이 점점 늘어나게 될것이고 이는 리소스 비용의 증가로 이어질 것이다. 이 정보들을 summary/압축하여 가볍게 보관하면서 이전의 데이터를 사용하기 위해 롤업을 사용한다. 예시로 사용할 인덱스와 도큐먼트 정보는 아래와 같다. PUT rollupexample-2022.01.01 { "mappings": { "properties": { "updateType": {"type": "keyword"}, "age": {"type": "long"}, "date": {"type": "date", "format": "epoch_millis"} } } } POST _bulk {"index"..
[Java] AttributeConverter를 이용하여 DB에 Entity의 컬렉션 필드 저장하기
AttributeConverter를 이용하여 DB에 Entity의 컬렉션 필드 저장하기 @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class TimeTravel { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Convert(converter = TravelListToJsonConverter.class) private List travels; public TimeTravel(List travels) { this.travels = travels; } @Getter @NoArgsConstructor(access = AccessLevel..
[Redis] RedisTemplate, RedisCacheManager 설정에 대해
RedisTemplate, RedisCacheManager 설정에 대해 레디스를 캐시서버로 이용하려고 하는 상황이다. @Configuration @RequiredArgsConstructor public class RedisConfig { // spring.data.redis yaml에 정의하고 이걸 토대로 자동으로 생성되는 RedisConnectionFactory 빈을 사용 추천 private final RedisProperties redisProperties; @Bean public RedisTemplate redisTemplate() { RedisTemplate redisTemplate = new RedisTemplate(); redisTemplate.setConnectionFactory(redisC..