스터디/스프링 ㅤㅤㅤㅤㅤ By crud JPA Batch 활용 Java에서 대량의 데이터를 DB에 삽입할때 JDBC Batch를 활용하면 성능이 대폭 향상됩니다. 정산과 같은 실시간 처리가 필요없고, 대량의 데이터를 다루는 배치성 작업은 위 기능을 활용하면 효율적인 처리가 가능한데요, 아쉽게도 JPA를 사용하는 경우 JDBC Batch 기능을 사용하는데 제약이 많습니다. 이번 글에서는 JPA 환경에서 삽입 성능을 향상할 수 있는 방법을 공유하겠습니다. JDBC Batch 란? JDBC는 Java에서 db를 다루기 위한 API 스펙으로 각 벤더사가 JDBC 스펙을 구현한 드라이버를 제공합니다. JDBC 스펙에는 대량의 데이터 처리를 위한 Batch Api를 제공하고 있고, 대량의 데이터 처리 시에는 꼭 해당 API를 활용해 효율적으로 처리해야합니다. 아래 코드는 JD.. 스터디/스프링 2023. 5. 8. ㅤㅤㅤㅤㅤ By crud Spring Scheduler Cluster 기능 추가해보기 Spring Scheduler는 여러 인스턴스가 떠 있을때 각 인스턴스의 job을 클러스터링하는 기능이 없다. 각 인스턴스 중 하나의 인스턴스에서만 job을 실행하고 싶은 경우 Scheduler를 커스텀화 해야한다. Scheduler에 Cluster 기능을 추가하는 방법을 알아보자. 코드예제 https://github.com/Java-Bom/bomscheduler/tree/team1 특정 시간마다 반복해서 돌아야하는 작업은 주로 Spring batch + jenkins 조합으로 많이 해결한다. 하지만 반복되는 주기가 1분 혹은 1분보다 짧아야 하는 경우 jenkins가 jar 파일을 실행하는 방법은 무거울 수 있다. 이런 경우는 Spring Scheduler를 사용하면 application이 계속 실행된.. 스터디/스프링 2022. 8. 23. ㅤㅤㅤㅤㅤ By ds_chanin fetch join 과 pagination 을 같이 쓸 때 [HHH000104: firstResult/maxResults specified with collection fetch; applying in memory] 결론부터 말하면 One에서 Many를 fetch 해야하는 경우 limit과 같은 절(Pagination을 위한)을 포함하면 원하는 대로 결과나 나오지 않는다. 예제코드(+ 테스트코드)는 Github에서 확인할 수 있다. LIMIT 그리고 SET_MAX_RESULT JPQL Pagination을 위해서는 MySQL 기준 limit (그리고 offset) 을 사용해야 한다. 그런데 JPA은 DB에 따라서 방언을 바꾸어 Query를 생성하기 때문에 MySQL 방언에 속하는 LIMIT 절을 JPQL에서 직접 사용할 수 없다. 따라서 아래와 같이 쿼리를 작성하면 QuerySyntaxException, IllegalArgumentException 이 발생한다. @Query("SELECT a FROM Article .. 스터디/스프링 2020. 10. 21. ㅤㅤㅤㅤㅤ By ds_chanin JPA 사용시 테스트 코드에서 @Transactional 주의하기 서비스 레이어(@Service)에 대해 테스트를 한다면 보통 DB와 관련된 테스트 코드를 작성하게 된다. 이러면 테스트 메서드 내부에서 사용했던 데이터들이 그대로 남아있게 되어서 실제 서비스에 영향을 미칠 수 있기 때문에 테스트가 끝나면 지워야 할 필요가 있다. 이러한 문제를 해결하기 위해 @Sql 애너테이션을 이용해서 직접 DB를 Truncate하는 Query를 직접 작성하는 방법도 있고, 테스트 메서드에 @Transactional 애너테이션을 이용해서 테스트 메서드가 종료될 때 테스트 메서드 내부에서 생성했던 데이터를 rollback하는 방법도 있다. @Sql 작성은 관련된 DB의 Truncate Query를 직접 작성해야하고 관련된 Table이 증가할 때마다 Query도 같이 수정해야 하는 번거로움.. 스터디/스프링 2020. 9. 23. ㅤㅤㅤㅤㅤ By crud Spring을 이용한 AWS Credentials 설정 Aws Credentials 설정 aws Credentials은 AWS를 사용할 권한을 어플리케이션에 부여하는 것이다. 자격을 부여하는 여러 정책을 사용해보고, 가장 좋은 정책에 대해 알아보자 Spring에서 Aws 서비스를 사용할 때 가장 쉽게 사용할 수 있는 방법은 spring-cloud를 사용하는 것이다. SpringCloud를 사용한 Sqs연동 예제로 credential설정 방법을 알아보자. 우선 스프링 빌드 그래들에 aws-messaging 의존성을 추가한다. plugins { id 'org.springframework.boot' version '2.2.6.RELEASE' id 'io.spring.dependency-management' version .. 스터디/스프링 2020. 7. 13. ㅤㅤㅤㅤㅤ By ds_chanin Spring Boot logback 설정하기 시작하며 아주아주 세세한 부분까지 짚어가며 하지는 않고 사용한 설정에 대해서 하나씩 짚으며 작성해보도록 하겠습니다. 작성하기 classpath인 resources 디렉토리 밑에 logback-spring.xml 파일을 작성하면 됩니다. 먼저 틀을 작성합니다. 이제 configuration 블럭 안쪽에 모든 설정을 해주면 됩니다. 먼저 중복으로 쓰이는 값들을 변수로 설정해서 사용하도록 준비합니다. timestamp 는 시간을 나타냅니다. key가 변수의 이름이 되고, datePattern을 이용해서 년-월-일 을 나타냈습니다. 나중에 파일로 로그를 저장 할 때 사용하기 위해 미리 선언해 두었습니다. property는 name을 이용해서 변수의 이름을 나타냅니다. value로 해당 property의 값을 지.. 스터디/스프링 2020. 6. 14. ㅤㅤㅤㅤㅤ By ds_chanin Spring Data JDBC - 엔티티가 지원하는 타입편 2. 엔티티에서 사용할수 있는 변수타입 (1.1.7 RELEASE) 기본적으로 원시타입과 그 참조타입은 모두 사용 가능합니다. Enum또한 사용가능하며 Enum의 name이 저장되게 됩니다. (VARCHAR 컬럼만 사용해야합니다.) CREATE TABLE ENUM_ENTITY ( id BIGINT auto_increment, active varchar(255), primary key (id) ) public class EnumEntity { @Id private Long id; private Active active; public EnumEntity() { } public EnumEntity(final Active active) { this.active = active; } public Long getI.. 스터디/스프링 2020. 5. 17. ㅤㅤㅤㅤㅤ By ds_chanin Spring Data JDBC - 엔티티 생성편 개요 우아한 테크코스 Lv2를 진행하며 Spring Data JDBC를 사용하게 되었습니다. Spring Data JDBC는 처음 사용해 보았기 때문에 많은 시행착오를 거쳤습니다. 이 글은 공식문서를 참고하여 작성되었습니다. 문서의 양이 적지는 않아 시리즈로 작성하려 합니다. 한글 문서가 별로 없어서 고생했는데 Spring Data JDBC를 필자처럼 처음 사용하는 분들에게 도움이 되길 바라는 마음으로 작성하였습니다. 만약 더 자세한 내용을 알고 싶으시다면 공식문서를 참고하시면 좋을 것 같습니다. 테스트 환경 데이터 베이스는 메모리 DB인 H2를 사용하여 테스트 하였습니다. 스프링 부트 버전은 2.2.6 RELEASE 입니다. Spring Data Jdbc 버전은 1.1.7 RELEASE 입니다. 게시글.. 스터디/스프링 2020. 5. 5. 이전 1 2 다음