Spring

    [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..

    [JPA] Specification을 이용한 DataJPA 조회

    Specification을 이용한 DataJPA 조회 Specification을 이용하면 쿼리를 이용하는데 있어 여러 조건들을 손쉽게 처리할 수 있고 동적인 처리가 가능하다. Specification을 사용하지 않을 때의 코드를 먼저 살펴보겠다. @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String name; private int age; private LocalDate birth; public Member(String name, int age,..

    [Spring] @FeignClient 에 대해

    @FeignClient 에 대해 Feign은 netflix에서 개발한 REST client 다. 현재는 스프링으로 포함된 것 같다. 기존에 RestTemplate 을 사용한 API 호출을 코드양을 줄이고 굉장히 간편하게 호출할 수 있게끔 도와준다. ext { set('springCloudVersion', "2021.0.0") } implementation 'org.springframework.cloud:spring-cloud-starter-openfeign' dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" } } 다..

    [Spring] @Validated vs @Valid

    @Validated vs @Valid @Valid는 이전에도 자주썼었기에 어떤 역할을 갖고 있는지 알고있었지만, @Validated는 생소했다. 특히 object가 아닌 파라미터에 대한 valid 작업이 인상깊었는데 이 글을 통해 정리해보도록 하겠다. @PostMapping("/check") public String check(@RequestBody @Valid CheckRequest request) { return "ok"; } --- @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class CheckRequest { @Positive private int num; } @Valid는 javax.validation.constraint..

    [Spring] MapStruct의 @Mapper, @Mapping 에 대해

    MapStruct의 @Mapper, @Mapping 에 대해 MapStruct은 엔티티와 DTO간의 매핑을 손쉽게 하게끔 도와준다. implementation 'org.mapstruct:mapstruct:1.4.2.Final' annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final' 사용법에 대해 바로 들어가보겠다. @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Chicken { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; priva..