연 500억 규모 정산 시스템 이관 프로젝트: 레거시 SQL에서 Kotlin + JPA + 전략 패턴으로의 성공적인 전환 회고

🤖 AI 추천

이 글은 대규모 정산 시스템 이관 프로젝트를 성공적으로 이끌었던 개발자의 회고록으로, 레거시 시스템의 문제점을 분석하고 이를 해결하기 위한 기술적인 접근 방식, 특히 Kotlin, JPA, 전략 패턴을 활용한 확장 가능한 아키텍처 설계, Append-Only 원장 테이블 도입, 실시간 모니터링 시스템 구축, 그리고 Spring Batch 전환에 대한 깊이 있는 통찰을 제공합니다. 또한, 개발자와 비개발자 간의 성공적인 협업을 위한 커뮤니케이션 전략과 문서화의 중요성을 강조하며, IT 프로젝트 리더, 백엔드 개발자, 시스템 아키텍트, 그리고 복잡한 비즈니스 로직을 다루는 개발자들에게 실질적인 도움이 될 것입니다.

🔖 주요 키워드

연 500억 규모 정산 시스템 이관 프로젝트: 레거시 SQL에서 Kotlin + JPA + 전략 패턴으로의 성공적인 전환 회고

핵심 기술

이 글은 연 500억 규모의 정산 시스템 이관 프로젝트에서 마주한 기술적, 커뮤니케이션적 난관을 극복하고 성공적으로 시스템을 개선한 과정을 상세히 기록한 회고록입니다. 레거시 SQL 기반의 유지보수 불가능한 정산 로직과 결제 데이터 정합성 문제를 해결하기 위해 Kotlin, JPA, 전략 패턴을 활용한 확장 가능한 아키텍처 설계, Append-Only 원장 테이블 도입, 실시간 모니터링 시스템 구축, 그리고 Spring Batch 전환을 중심으로 기술적 인사이트를 공유합니다.

기술적 세부사항

  • 레거시 시스템 문제점 분석: 복잡하고 유지보수 어려운 "한방 쿼리" 방식의 정산 로직, 엣지케이스 처리 미흡, 데이터 보정의 빈번한 수작업 발생, 상품권 결제수단 추가 시 데이터 정합성 문제 심화.
  • 핵심 해결 과제: 결제 데이터 정합성 확보 및 정산 로직의 유지보수 가능한 구조 설계.
  • 결제 데이터 정합성 확보: PG사 웹훅 처리 재처리 및 보정 로직 부재, 모니터링 체계 부재 해결을 위해 Append-Only한 원장 테이블을 도입하여 모든 결제/환불 이력을 수정 없이 누적, 특정 시점 복구 및 감사 용이성 확보.
  • 확장 가능한 정산 로직 설계: 상품 및 결제 수단별 다양한 정산 기준(발생주의 기반)을 유연하게 처리하기 위해 도메인 모델과 전략 패턴을 도입. Kotlin + JPA 기반으로 상품 유형 및 결제 수단별 독립적인 정산 전략 분리.
  • 실시간 정합성 모니터링: 데이터 유실 및 불일치를 조기에 발견하기 위한 대사 배치 구현. 외부 PG사 데이터와 내부 DB 비교, PG 웹훅 요청 별도 테이블 저장 및 상태 추적.
  • 성능 및 안정성 개선: 대용량 데이터 처리 성능 저하 및 DB 락 문제 해결을 위해 Spring Batch로 전환. 청크 단위 트랜잭션 분리로 안정성 및 성능 향상.
  • 커뮤니케이션 전략: PM 없이 재무팀과의 직접 협업 경험 공유. 요구사항 문서화의 중요성 강조, 도메인 언어 차이 극복을 위한 명확한 용어 정의 및 실 사례 기반 검증.
  • 개발자 도메인 지식 체계화: 정산 도메인 개념, 테이블 구조, 외부 벤더 특이사항 등을 정리하여 향후 담당자의 빠른 컨텍스트 이해 지원.

개발 임팩트

  • 데이터 정합성 확보: 상품권 정산 로직 안정화 및 데이터 정합성 99% 이상 확보.
  • 리소스 절약: 결산 마감 직전 수정 건수 95% 이상 감소 (개발팀), 59% (재무팀), 80% (CX).
  • 개발 생산성 향상: 확장 가능한 구조 설계로 새로운 상품/결제 수단 추가 시 용이.
  • 품질 보증: 단위 테스트 및 통합 테스트를 통한 로직 품질 확보.

커뮤니티 반응

발표 후 임직원들로부터 "쉽게 이해할 수 있었다", "개발자들의 고민을 느꼈다", "문서 기반 소통 공식을 적용해보겠다" 등 긍정적인 피드백을 받았습니다.

📚 관련 자료