본문 바로가기

전체 글18

Spring Batch와 Criteria API의 만남(2) 이전 포스트에서는 Spring Batch Reader에서 Criteria API를 활용하기 위해 Custom Reader(= CriteriaPagingItemReader) 를 만드는 방법과 적용 방식을 정리했습니다. 이번 글에서는 그 Reader를 실제 배치에 적용하며 만났던 문제와, 이를 어떻게 개선했는지에 대해 다룹니다. CriteriaPagingItemReader에서 발생한 타임아웃 이슈CriteriaPagingItemReader를 여러 배치에 적용하던 중, 대용량 마이그레이션에서 DB 타임아웃 문제가 발생했습니다. 페이지 수가 커질수록 조회 시간이 길어지고, 결국 커넥션 타임아웃으로 배치가 중단되는 현상이었습니다.원인은 페이징의 구조적 한계였습니다. JPA가 페이지가 증가할 때마다 offset(=.. 2025. 8. 20.
Spring Batch와 Criteria API의 만남(1) Spring Boot 환경에서 배치 프로젝트를 진행할 때, DB에 있는 데이터를 읽어와야 하는 상황이 자주 발생합니다.전통적으로는 JdbcPagingItemReader 혹은 JdbcCursorItemReader 같은 JDBC 기반 Reader를 사용하거나,JpaPagingItemReader, JpaCursorItemReader 같은 JPA 기반 Reader를 활용해 왔습니다.하지만 JPA 기반 Reader를 사용하다 보면, 다음과 같은 여러 불편함을 겪에 됩니다.queryString 방식으로 작성된 JPQL이 복잡해져 가독성이 떨어지고SQL 인젝션이나 오타 발생 위험이 있으며동적 조건을 처리할 때마다 문자열을 조합해야 하는 번거로움그래서 저는 Criteria API 기반으로 동적 쿼리를 깔끔하게 작성하는.. 2025. 7. 29.
Redisson Lock : 분산 락 구현하기 백엔드 서버에서 여러 API를 활용해 비즈니스 로직을 처리하다 보면, 동시에 다수의 요청이 몰리면서 데이터 경쟁 상태나 중복 업데이트, 예기치 못한 결과가 발생하곤 합니다. 이런 동시성 문제를 안전하게 제어하기 위해 분산 락(distributed lock) 기법을 도입할 수 있으며, 특히 Redisson Lock은 간편한 API와 신뢰성 있는 내부 메커니즘으로 많은 개발자에게 사랑받고 있습니다.이 글에서는 Redisson과 Redisson Lock이 무엇인지 먼저 살펴보고, 프로젝트에 적용하고, lock의 작동방식이 어떻게 동작하는지 알아보겠습니다. Redisson & Redisson LockRedisson은 Java 애플리케이션에서 Redis 서버와 편리하게 상호작용할 수 있도록 지원하는 오픈소스 Re.. 2025. 7. 15.
객체지향 설계 원칙 : SOLID 🔍 SOLID?SOLID는 객체지향 프로그래밍(OOP)에서 유지보수성과 확장성을 높이기 위한 5가지 핵심 설계 원칙입니다. 로버트 C. 마틴(Robert C. Martin)이 처음 제안했으며, 이후 견고하고 유연한 소프트웨어를 설계하기 위한 표준 지침으로 자리잡았습니다.SOLID는 아래의 다섯 가지 원칙의 머리글자를 조합한 것입니다:S: 단일 책임 원칙 (Single Responsibility Principle)O: 개방/폐쇄 원칙 (Open/Closed Principle)L: 리스코프 치환 원칙 (Liskov Substitution Principle)I: 인터페이스 분리 원칙 (Interface Segregation Principle)D: 의존 역전 원칙 (Dependency Inversion Pri.. 2025. 6. 30.