JSCODE Logo
블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2025 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

[실습] 배달 플랫폼 '배달의 시니' 정산 시스템 요구사항 정의서

JSCODE 시니
JSCODE 시니
2026. 04. 04.
author
JSCODE 시니
category
Spring Batch
createdAt
Feb 7, 2026 01:13 AM
isPublic
isPublic
series
Spring Batch 입문: 3시간 만에 끝내는 대용량 처리의 기초
slug
settlement-system-requirements-definition
type
post
updatedAt
Apr 4, 2026 10:00

✅ 1. 프로젝트 개요

  • 프로젝트명 : 일별 가맹점 정산 배치 시스템 구축
  • 목표 : 매일 발생하는 대량의 주문데이터를 확인하여, 정산 주기가 도래한 건에 대해 수수료를 제외하고 가맹점주에게 정산해주는 자동화 배치 시스템을 구현한다.
 
 

✅ 2. 비즈니스 시나리오

  • 배달 플랫폼 ‘배달의 시니’는 고객이 결제한 금액을 즉시 점주에게 주지 않고, 일정 기간 보관한다. (고객의 환불 요청이나 구매 확정 기간 때문
  • 우리의 정산 정책은 ‘주문 발생일로부터 7일 뒤’에 정산하는 것이다.
  • 매일 새벽 4시, 어제 까지 구매 확정이 난 주문 건들을 모아 수수료를 제외하고 정산 테이블에 데이터를 생성한다.
 
 

✅ 3-1. 상세 요구사항(기능적 요구 사항)

  • 대상 데이터 선정(Reader)
    • 전체 주문 데이터 중, 오늘 날짜 기준으로 정확히 7일 전에 생성된 주문 데이터를 조회해야 한다.
    • 예를 들어, 오늘이 2025년 1월 28일 이라면, 2025년 1월 21일 주문 건만 가져와야 한다.
  • 정산 금액 계산(Processor)
    • 플랫폼 이용 수수료는 주문 금액의 3%로 설정한다.
    • 정산 금액 = 주문 금액 - (주문 금액 * 0.03)
  • 데이터 저장(Writer)
    • 계산된 정산 내역은 settlement(정산) 테이블에 저장 되어야 한다.
  • 자동 실행(Scheduler)
    • 이 배치프로그램은 별도의 실행 명령 없이 매일 새벽 04:00에 자동으로 실행되어야 한다.
 
 

✅ 3-2. 상세 요구사항(비기능적 요구 사항)

  • 개발 환경
    • Language: Java 21
    • Framework: Spring Boot 4.0.2 (Spring Batch 6.x)
    • Build Tool: Gradle
    • Database: MySQL (JPA 사용)
  • 아키텍처
    • 대용량 처리를 고려하여 Chunk 지향 처리 (Chunk-oriented Processing) 방식을 사용한다.
    • Chunk Size는 1000으로 설정한다.
  • 확장성 고려
    • 향후 서버 확장(Scale-out) 및 젠킨스(Jenkins) 연동을 고려하여, 외부 파라미터(CLI Arguments)로 날짜를 입력받아 실행할 수 있도록 구현해야 한다.
    • JobParameters를 활용하여 멱등성(같은 파라미터로 다시 실행해도 안전함)을 유지하거나, 재시도 가능하게 설계한다.
 
 

✅ 4. 데이터 흐름도

  • 주문 테이블(Orders)
    • 주문번호 : 1
    • 주문자 : 김시연
    • 가맹점명 : 서대문 엽기 떡볶이
    • 결제금액 : 10000원
    • 주문일자 : 2025-01-21
  • Batch Job 실행 - 2025-01-28 새벽 4시
  • ItemReader : 2025-01-21 주문건 조회
  • ItemProcessor : 수수료 300원 차감(10,000 * 0.03) ⇒ 9700원 확정
  • itemWriter : 정산 테이블에 insert
  • 정산 테이블(Settlement)
    • 정산번호 : 1
    • 주문번호 : 1
    • 가맹점명: 서대문 엽기 떡볶이
    • 최종 정산금액 : 9,700원
    • 정산처리일 : 2025-01-28
 
 

✅ 5. 테이블 명세서

구분
테이블명
컬럼 상세
비고
Input
orders
id (PK) customer_name (주문자) store_name (가맹점명) amount (결제금액) order_date (주문일자)
7일 전 데이터 조회용
Output
settlement
id (PK) order_id (주문번호) store_name (가맹점명) settlement_amount (최종 정산금액) settlement_date (정산 처리일)
결과 저장용
 
author
category
Spring Batch
createdAt
Mar 5, 2026 10:56 PM
isPublic
isPublic
series
Spring Batch 입문: 3시간 만에 끝내는 대용량 처리의 기초
slug
type
series-footer
updatedAt
Apr 4, 2026 10:00
📎
이 글은 Spring Batch 입문 강의의 수업 자료 중 일부입니다.