

포스타입 정산 시스템 이관기 2
정산 시스템을 PHP에서 Java 기반 Job Runner로 이관한 과정과 테크 스펙, 테스트, 마이그레이션 전략을 설명했습니다. 또한 URI 인코딩, Reader 페이징, timeout 등 트러블 슈팅 사례와 개선 효과를 정리했습니다.
새로운 기술 블로그가 추가되었어요


정산 시스템을 PHP에서 Java 기반 Job Runner로 이관한 과정과 테크 스펙, 테스트, 마이그레이션 전략을 설명했습니다. 또한 URI 인코딩, Reader 페이징, timeout 등 트러블 슈팅 사례와 개선 효과를 정리했습니다.

매월 반복되던 재무 결산을 Spring Batch와 코드 중심 구조에서 Airflow와 dbt 기반 데이터 파이프라인으로 전환했습니다. SQL 수정만으로 결산 대응이 가능해져 유연성과 가시성을 높였습니다.
![[SpringBatch 연재 06] JpaPagingItemReader로 DB내용을 읽고, JpaItemWriter로 DB에 쓰기](https://devocean.sk.com/thumnail/2024/10/2/6fcf6f42a7137411e9966df3cba9520b9bbb7639fc4c76f85169f548440d0786.png)

Spring Batch에서 `JpaPagingItemReader`로 JPA 엔티티를 페이지 단위로 읽고 `JpaItemWriter`로 DB에 저장하는 방법을 소개했습니다. 또한 페이지 기반 처리의 누락 가능성과 JPA writer 설정상의 주의점도 함께 설명했습니다.


autocommit 비활성화와 MVCC Snapshot 유지로 Master DB 데이터가 간헐적으로 조회되지 않은 원인을 분석했습니다. 외부 조회 메서드에 읽기 전용 트랜잭션을 적용하고 COMMIT 경로를 점검해 해결했습니다.


Querydsl의 kapt 의존성과 유지보수 한계를 이유로 Kotlin JDSL로 전환한 과정을 정리했습니다. 후보 라이브러리 비교와 팀 단위 전환 방법까지 함께 소개했습니다.

Oracle 주문 DB를 MySQL로 이관하면서 모델과 ID 채번 방식을 함께 재설계했습니다. 읽기·쓰기 성능을 개선하고 정합성과 동시성 문제를 단계적으로 해결했습니다.

Spring Boot에 MyBatis를 적용하는 기본 구성과 조회 예제를 정리했습니다. 의존성 추가부터 mapper XML, service, controller 연결과 결과 확인까지 설명했습니다.


대용량 데이터 등록에서 JPA 배치와 JDBC 배치를 직접 비교해 성능을 확인했습니다. 단일 MySQL 환경에서는 JDBC 템플릿 배치를 선택해 생산성과 속도를 함께 높였습니다.
이 게시물은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.


기능 테스트로 전환한 배경과 통합 테스트의 한계를 설명한 글입니다. Hibernate와 Spring 이벤트 처리로 인한 실제 버그 사례를 통해 전환 이유를 정리했습니다.

Kotlin Reflection과 커스텀 어노테이션으로 개인화 메시지 토큰을 치환하는 방식을 소개했습니다. use-site target과 Hibernate 프록시로 인한 누락 문제의 해결법을 설명합니다.


JPA의 건별 INSERT 한계를 JDBC 배치 INSERT로 개선한 사례를 소개했습니다. PK 추론으로 1:N 외래키를 연결해 처리 시간과 DB 부하를 줄였습니다.


BULK 처리의 Write 성능 개선을 중심으로 JPA와 JDBC의 차이를 정리했습니다. last_insert_id와 PK 연산을 활용해 FK 포함 대량 적재를 빠르게 처리하는 방법을 설명했습니다.


회원 서비스의 병목 원인을 트랜잭션, DTO 변환, 스레드 설정에서 찾았습니다. 읽기 트랜잭션 축소, 수동 매핑, 톰캣 스레드 조정과 웜업으로 응답 편차를 크게 개선했습니다.


회원 서비스의 트랜잭션 범위, DTO 변환, Tomcat 스레드 설정을 분석해 병목을 제거했습니다.\nRepository 단위 트랜잭션과 웜업으로 응답 시간을 약 8배 개선했습니다.