🤔 6주 동안 3명의 인원으로 진행했던 ' 청구/수납 ' 을 주제 프로젝트에서 Batch Server를 개발하며 과정에서 고민했던 내용과 새롭게 알게된 지식들을 정리하고자 적어보는 개발 일지
🛑 주제설명
'청구 수납'이 생소한 주제이니 예시를 들어 설명해보겠다.
' A 학원의 원장 B씨는 학생들의 수강료를 매달 직접 청구하고 수납하며 수기로 장부를 기록하면서 운영하고 있다. 그런데 갑자기 수강생이 기존에 50명이었지만, 다음달부터 150명이 되었다.
따라서 지금과 같이 직접 수강료를 청구하고 수납하는 과정을 유지하는 것은 이제 너무나 많은 리소스가 들어간다..
이러한 문제에 대한 고객(원장 B씨)의 회원(수강생)에 대한 수납 청구를 도와주는 솔루션이 해당 프로젝트의 주제이다.
😎 이 글에서 다룰 것
프로젝트 관련 Spring Batch + Scheduler 서버를 도입한 이유와 담당 기능 및 구현 목록 정리
Spring Batch? Why?
배치?
배치작업은 데이터를 실시간으로 처리하는게 아니라, 일괄적으로 모아서 한번에 처리하는 작업을 의미한다.
따라서 배치 작업은 일괄적인 처리 작업에서 사용하는 기술로 데이터 처리의 효율성을 극대화함에 포커스를 둔 작업이다. 그리고 이를 위한 사용할 수 있는 기술은 ' 프로시저, 스케줄러, 배치 프레임워크 ' 등을 고려할 수 있다.
그래서 왜 배치 작업이 필요하지?

본 프로젝트의 ERD이다. 어떤 기능을 위해 배치 작업이 필요했는지 ERD와 함께 보자.
앞서 말했듯, 해당 서비스는 고객의 청구 수납을 도와주는 서비스이다.
그렇기에, 해당 서비스를 사용하는 사용자는 수동으로 진행하던 청구 수납을 보다 편리하게 도와줄 솔루션이 필요한 것이다. 따라서 해당 서비스의 가치는 '자동화'에 있다고 판단하였다.
예를 들어, 해당 서비스를 솔루션으로 도입했는데, 프로그램을 키고 수동으로 청구/수납을 관리한다면 전과 비교하여 크게 달라진 점이 무엇일까? 크게 달라지는 점이 없지 않을까?
이에 사용자의 청구 / 수납을 자동화로 도와주기 위한 시스템을 위해서 배치 작업을 선택했고, 배치 작업의 플로우는 다음과 같다.
→ 고객은 회원과 계약을 맺는다.
● 계약 테이블에 진행 중인 계약에 대하여 정해진 날짜( 한달에 한번 )에 일괄적으로 다음달의 청구 데이터를 생성한다.
● 계약이 자동 청구인 경우, 해당 날짜에 자동으로 결제를 시도하고 결과에 따른 메세지 발송과 납부 테이블에 데이터를 넣는다.
● 계약이 수동 청구인 경우, 해당 날짜에 자동으로 청구서를 보낸다. 그리고 결제 기한에 따라 기한을 넘기고도 결제가 이뤄지지 않은 회원의 납부 상태를 미납으로 변경한다.
● 주간, 월간 총 청구액과 미납액에 대한 집계 데이터를 생성하여 청구 통계 테이블에 데이터를 넣어준다.
이와 같이 고객이 회원과의 계약을 맺은 후에는 해당 계약에 대한 청구 및 수납을 자동으로 진행해주는 것이 본 서비스의 핵심이기에 배치 서버를 개발하였다.
그리고 배치 개발에 있어 사용할 수 있는 고려 사항 기술과 각각의 장단점은 크게 아래와 같았다.
배치 개발 고려 기술 항목
프로시저
데이터베이스에 대한 일련의 작업을 정리한 절차를 관계형 데이터베이스 관리 시스템에 저장한 것으로 마치 함수의 기능을 관계형 데이터 베이스 내부에서 실행하는 것으로 이해하면 편하다.
➡️ 장점
DB 내부에서 실행되기에 네트워크 부하나 소요시간과 관련하여 성능적 이점을 기대
SQL과 밀접한 작업 처리에 효율적
➡️ 단점
DB에 종속적
복잡한 로직 구현에 제한적
오류제어 및 디버깅의 어려움
스케줄러
정해진 스케줄러에 맞춰서 반복작업 및 일괄 작업을 진행할 수 있는 기술이다.
➡️ 장점
구현이 간단하고 반복 작업에 있어 직관적이다.
➡️ 단점
대용량 데이터 처리 최적화에 어려움
작업 모니터링 및 오류 처리의 어려움
스프링 배치
Spring Batch는 대량의 데이터 처리를 위한 경량화된 프레임워크로, 반복적인 작업을 수행하는 일괄 처리(Batch Processing) 작업을 효율적으로 처리할 수 있는 기능을 제공한다. 즉, 대용량 데이터 처리나 주기적인 업무 처리 등을 효율적으로 처리할 수 있도록 스프링 프레임워크 기반에서 작동하는 프레임워크이다.
➡️ 장점
청크 기반의 대용량 데이터 처리에 효율적이다.
Retry, Skip, BackOff 등 오류 처리 메커니즘을 제공
작업 모니터링 및 메타데이터 제공으로 관리의 용이
➡️ 단점
독립적 스케줄링이 없다.
처음 사용하는 기술이기에 러닝 커브가 높다
이와 같은 배치 작업에 있어 사용할 기술들을 정리하였고, 해당 서비스는 자동 결제에 따른 결과 및 수동 청구의 경우 메세지를 발송과 같은 복잡한 로직이 고려되며, 고객의 서비스가 대박나서 계약이 많아지면 추후에 대용량 데이터 처리가 필요하기에 스프링 배치를 적용하는 것이 합리적이라고 판단하였다.
그리고 이어지는 내용으로는 배치 작업 수행을 위해 사용할 구현체를 성능 향상적 측면에서 고려했던 내용에 대해 다뤄볼 예정이다.
'Dev Log > Batch개발(청구-수납)' 카테고리의 다른 글
| Spring Batch 서버 개발(3) - 예외 제어와 모니터링 (1) | 2024.11.11 |
|---|---|
| Spring Batch 서버 개발(2) - ItemReader 와 Bulk Insert처리 (1) | 2024.11.02 |
댓글