Spring
-
Delete 배치 처리 (feat. deleteAllInbatch() vs batchUpdate() + rewriteBatchedStatements=true vs in 절)Spring 2025. 4. 8. 20:58
이전에 bulk insert에 대해서 찾아보았다. ↓https://dodop-blog.tistory.com/498 Spring JPA의 save() vs saveAll() vs bulk insert() (feat. db client)이번에 면허 재검증 프로세스를 구성하면서 면허 검증 로깅에 관한 작업을 구성하게 되었다. 면허 검증에는 배치로 검증하는 과정이 있기 떄문에, 로깅도 한번에 저장되어 DB 팀에게 어느정도dodop-blog.tistory.com 그렇다면 다량의 데이터를 delete 처리할 때는 어떨까? 1. jpa의 delete() 메서드 활용 가장 먼저 for문을 이용해서 delete()메서드를 연속호출하여 인서트를 수행해보자. @Test fun delete() { ..
-
Spring JPA의 save() vs saveAll() vs bulk insert() (feat. db client)Spring 2025. 4. 8. 01:37
이번에 면허 재검증 프로세스를 구성하면서 면허 검증 로깅에 관한 작업을 구성하게 되었다. 면허 검증에는 배치로 검증하는 과정이 있기 떄문에, 로깅도 한번에 저장되어 DB 팀에게 어느정도의 데이터를 한번에 저장할 수 있는지 문의드렸다. 단건 수행이 아닌 bulk insert로 하는 경우 더 많은 양의 데이터를 저장할 수 있다는 답변을 받고 해당 내용을 구현하였다. 작업 환경에서는 id의 채번 규칙을 auth_increment 전략을 사용하고 있었다. JPA auth_increment ID 채번 방식 id의 채번 규칙을 auth_increment 전략을 사용하면 bulk insert가 가능할까? 해당 전략을 사용하게 되면, JPA규칙에 의해서 bulk insert는 사용할 수 없게 된다. auto_i..
-
SpringData JPA를 사용하는 환경에서 multi-database (feat. master/slave구분, querydsl) 구성하기Spring 2025. 1. 21. 00:35
이번에 면허 재검증 프로세스를 구현하면서, multi database 환경을 구성해야 하는 작업을 수행했다. 작업하면서 구성한 내용을 개인화해서 정리해본다! 구현 환경 및 dependency 설정 작업을 구현해야 하는 환경은 Kotlin, SpringBoot, JPA, Mysql 환경이었다. 두가지의 데이터베이스를 다룰때 모두 JPA를 사용한다. 디폴트 데이터베이스와 추가로 연결할 데이터베이스를 지정한다. 여기서는 디폴트로 사용할 데이터베이스는 DefaultDatabase, 추가로 사용할 데이터베이스는 ADatabase라고 지정한다. 추가한 dependency는 다음과 같다. plugins { kotlin("jvm") version "1.9.25" kotlin("plugin.spring") v..
-
Grpc Service의 호출오류가 Grpc Client 헬스체크 실패를 야기하는 문제 해결Spring 2024. 11. 19. 21:15
하나의 서비스에 GrpcService를 구현하고 이제 이를 사용하는 별도 서비스의 GrpcClient에 구현된 기능을 호출하도록 구현하였는데, GrpcService의 오류만으로도 GrpcClient 서버의 헬스체크가 실패하는 현상이 발생했다. 해당 문제의 원인을 파악하고 문제를 해결한 글을 남긴다! 문제 상황 서두에 말한것과 같이 별도의 서버에 구성된 GrpcClient, GrpcService가 존재한다. 두 서버는 별도의 서버로 서로에게 영향을 주어서는 안될 것으로 생각했는데, GrpcService가 장애 상황이거나 응답할 수 없는 상황에 장애가 전파되어 GrpcClient까지 헬스체크가 실패해서 livenessProbe, readinessProbe에 모두 503 응답으로 ServiceUna..
-
동시 삭제 요청으로 인한 StaleObjectStateException 해결 - redisson lock 적용기 (feat. Spring AOP, applicationEventListener)Spring 2024. 10. 1. 16:58
최근에 회사에서 동시성 이슈가 발생하여 해결하기 위한 작업을 진행했는데, 이때, redisson을 사용해볼 기회가 생겨서 어떤 방식으로 redisson lock을 구현했는지 기록해본다. 이전에 동시성 이슈를 해결하기 위한 강의를 듣고 정리했었다. ↓https://dodop-blog.tistory.com/464 인프런) 재고시스템으로 알아보는 동시성 이슈 해결 (2)지난 글에 이어서 다음의 인프런 강의를 실습해본다. https://www.inflearn.com/course/%EB%8F%99%EC%8B%9C%EC%84%B1%EC%9D%B4%EC%8A%88-%EC%9E%AC%EA%B3%A0%EC%8B%9C%EC%8A%A4%ED%85%9C/dashboard 재고시스템으로 알아보는 동시성이dodop-blog.t..
-
Grpc + Spring : 예외 처리 구현Spring 2024. 9. 22. 12:06
이번에는 grpc 서비스의 예외처리를 구현하는 방법을 작성해보고자 한다. grpc service : 특정 예외 메세지를 담아 지정된 예외로 발생하기 기존 rest 형식과 동일하게 grpc 서비스도 @GrpcExceptionHandler를 이용해서 예외 처리를 구현할 수 있다. 참고 : https://yidongnan.github.io/grpc-spring-boot-starter/en/server/exception-handling.html @GrpcAdvicepublic class GrpcExceptionAdvice { @GrpcExceptionHandler public Status handleInvalidArgument(IllegalArgumentException e) { ..
-
Grpc Spring Security - 3) Grpc Client에서 header를 포함한 grpc 호출하기Spring 2024. 9. 21. 14:45
이전 글에서 grpcService에서는 인증, 인가 처리를 구현했고, 이번에는 grpcClient에서 토큰을 포함해서 grpc를 호출할 수 있도록 구현해보자. grpcService의 인증 인가 구현 지난 글↓https://dodop-blog.tistory.com/472 Grpc Spring Security - 2) Grpc Service에 인증, 인가 구현하기이번엔 저번글에 이어서 인증 인가를 사용하는 Grpc Service를 구현해보자. Grpc Spring Boot Starter Security 관련 지난글↓https://dodop-blog.tistory.com/471 Grpc Spring Security - 1) GrpcSpringSecurity의 인증, 인가새dodop-blog.tistor..
-
Grpc Spring Security - 2) Grpc Service에 인증, 인가 구현하기Spring 2024. 9. 21. 14:03
이번엔 저번글에 이어서 인증 인가를 사용하는 Grpc Service를 구현해보자. Grpc Spring Boot Starter Security 관련 지난글↓https://dodop-blog.tistory.com/471 Grpc Spring Security - 1) GrpcSpringSecurity의 인증, 인가새롭게 신규 서버를 기존 서비스와 더불어 Grpc로도 기능을 제공해야하는 업무가 있어, 이번에 Grpc 통신을 할때 Security를 적용해보았다. 토큰을 이용한 인증, 인가를 구현하였다. 기본적으로 Spdodop-blog.tistory.com Dependency 추가 먼저 grpc service 구현을 위한 dependency를 추가한다. grpc spring boot start..