SpringBoot

    [Gradle] 외부 파일로 Dependency 버전 관리 하기

    일반적으로 spring boot를 사용하는 경우 io.spring.dependency-management 플러그인으로 dependency 관리를 한다 일부 몇몇 외부 라이브러리 사용하는 경우 다음과 같이 build.gradle 내에서 buildscript에 선언하여 version을 명시할 수 있다 // build.gralde buildscript { ext { resilience4jVersion = '1.7.1' } } 그러나 가끔 멀티 모듈을 사용할 경우 중복되는 라이브러리들의 버전은 별도로 관리하고 싶은 경우가 있다 방법 1. 별도 gradle 파일 이용 // versions.gradle 파일을 생성하고 다음과 같이 작성한다 ext.versions = [:] versions.spring_boot = ..

    [JDBC] JPA(Read) + jdbcTemplate(Write) 사용하기

    JPA를 사용할 경우 Entity의 Id 생성 전략이 IDENTITY일 경우 INSERT 구문이 실행될 때마다 SELECT 구문이 실행된다. 1개 row 작업의 경우 JPA를 사용함에 있어 큰 이슈가 없지만 대량의 배치성 작업의 경우 성능에 영향을 미친다. 이를 위해서 jdbcTemplate을 이용하여 jdbc의 prepareStatement와 rewriteBathchedStatements 옵션을 사용하여 성능 개선을 이룰수 있다. 그러나 다른 테이블의 데이터를 읽어서 새로운 테이블로 데이터를 migration 하는 경우 대량의 데이터를 한번에 읽을 수 없으므로 일반적으로 페이징 기법을 사용한다. 그러나 jdbc에서 페이지네이션(pagination) 쿼리를 만들기 귀찮아 jpa에서 PageRequest를..

    [Bean] Router 구현

    가끔 특정 비지니스 로직에서 주어진 입력에 따라 Bean을 선택적으로 사용하고 싶은 경우가 있다 Interface를 사용하여 해당 인터페이스를 구현한 Bean들을 컬렉션(List or Map)에 넣어 사용할 수 있다 1. Interface public interface SampleInterface { // 임시로 String으로 구현하였으나 Enum으로도 구현 가능하다 boolean isTarget(String targetName); } 2. Implements import org.springframework.stereotype.Component; @Component public class SampleComponent implements SampleInterface { private static fina..

    [Enum] AttributeConverter 구현

    1. Enum Interface import com.fasterxml.jackson.annotation.JsonValue; public interface SampleEnum { @JsonValue String getCode(); } 다음과 같은 SampleEnum 이라는 인터페이스를 작성한다 2. Enum Class import java.util.Arrays; import java.util.NoSuchElementException; import lombok.Getter; import lombok.RequiredArgsConstructor; @Getter @RequiredArgsConstructor public enum SampleType implements SampleEnum { SAMPLE_ONE("..