“정산파일 자동화”를 하려다, 규칙과 검증을 다시 설계하다

AI 챔피언 10번째 이야기 — 매출관리팀 강희성님

Share
정산파일 자동화를 하려다, 규칙과 검증을 다시 설계하다

AI 챔피언 10번째 이야기 — 매출관리팀 강희성 님

재무·정산 업무는 많은 검증 과정을 거쳐 숫자의 정합성을 맞추는 것이 중요합니다. 다만 그 정합성을 확인하고 설명하는 과정에는, 경우에 따라 많은 시간이 소요되곤 합니다.

파트너마다 정해진 정산 기준이 있었지만, 이를 다시 검증하려면 매번 파일을 거슬러 올라가야 했습니다.

정산 결과를 재확인하거나 설명해야 할 때마다 어떤 파일을 기준으로 계산됐는지, 어떤 값이 어떤 방식으로 반영됐는지를
다시 추적하는 과정이 반복됐습니다.

매출관리팀 강희성님이 맡고 있던 별도정산 업무는 이런 구조적 문제가 가장 집중적으로 드러나는 영역이었습니다.

대부분은 이미 내부DB로, 문제는 ‘소수의 별도정산’이었다

모든 거래가 이런 방식이었던 것은 아닙니다. 대부분의 거래처는 이미 자사 데이터 구조에 맞는 형태로 정산이 이루어지고 있었고, 그 결과는 시스템 안에서 자연스럽게 데이터로 관리되고 있었습니다.

문제는 소수의 거래처였습니다.

거래 구조나 파트너 시스템 특성상, 자사 데이터 구조에 그대로 맞추기 어려운 경우들이 있었고 이들은 불가피하게 별도정산 파일 기반의 업무로 운영되고 있었습니다.

이 영역은 규모로 보면 크지 않았지만, 매번 정산 결과를 다시 확인하거나 설명하려고 하면 파일을 다시 하나씩 열어보며 맥락을 복원해야 했습니다.

희성님이 문제로 느낀 지점은 바로 여기였습니다. 맞춰진 결과를 연결된 데이터로 남기지 못하고 있다는 점이었습니다.

“표준화”가 아니라 “DB화에 필요한 최소 정보”부터

목표는 파트너의 정산파일 양식을 하나로 통일하는 것이 아니었습니다. 그건 현실적으로도 어렵고, 이 문제의 해법도 아니었습니다.

대신 방향을 이렇게 잡았습니다. 각기 다른 정산파일에서 정산과 트래킹에 필요한 최소한의 정보만 선별해 내부 DB 구조로 끌어온다는 접근이었습니다.

여기서 말하는 최소 정보는 정산파일을 그대로 재현하기 위한 항목이 아니라, 정산 결과를 설명하고 다시 추적할 수 있게 해주는 값들이었습니다.

정산 기준이 되는 금액, 파트너를 식별할 수 있는 기준값, 거래를 연결할 수 있는 참조 정보, 그리고 상태나 통화처럼 이후 계산과 검증에 영향을 주는 요소들이 여기에 포함됐습니다.

이 작업의 핵심은 파일로만 존재하던 정산 정보를 내부 DB 구조 안으로 옮기는 것이었습니다.

첫 구현: Apps Script

초기 구현은 Google Apps Script로 진행됐습니다.

정산파일을 읽어 필요한 값을 추출하고, 이를 하나의 표준 템플릿 형태로 변환하는 방식이었습니다. 작게 시작했을 때는 빠르게 결과를 확인할 수 있었고, 실제 업무에도 적용할 수 있었습니다.

하지만 기쁨도 잠시, 별도정산 대상 거래처가 늘어나면서 한계가 드러났습니다.

단일 스크립트 안에 모든 파트너의 규칙을 담다 보니 파트너마다 다른 정산 기준과 파일 구조가 조건문으로 계속 추가됐고, 한 규칙을 수정하면 다른 결과에 영향을 주는 상황이 반복됐습니다.

이 구조에서는 정산파일이 늘어날수록 관리 비용도 함께 커질 수밖에 없었습니다.

정산파일 자동화를 하려다, 규칙과 검증을 다시 설계하다

규칙을 코드에서 떼어내고, 파이프라인으로 만들다

희성님은 기존 방식을 과감히 버리는 결정을 내렸습니다. 구조 자체를 다시 만들기로 한 거죠.

출발점은 규칙과 실행 로직을 분리하는 것이었습니다.

파트너별 정산파일 처리 규칙을 코드 안에 직접 작성하는 대신, 각 파트너의 규칙을 YAML 파일 단위로 관리하도록 구조를 바꿨습니다. 이 규칙에는 단순한 컬럼 매핑뿐 아니라, 파일마다 의미가 다른 항목을 어떻게 해석할지, 상태값에 따라 어떤 처리를 해야 하는지 같은 기준이 함께 담겼습니다.

공통 실행 로직은 하나의 파이프라인으로 유지하고, 변화가 필요한 부분은 설정 단위로 분리해 관리했습니다. 정산 규칙이 늘어나더라도 코드를 복잡하게 만들지 않고, 변경 범위를 설정 단위로 통제하기 위한 구조입니다.

이 구조는 Config-driven ETL에 가깝습니다.
즉, 실행 로직은 그대로 두고 파트너마다 다른 정산 기준만 설정으로 분리해 관리하는 방식입니다.

정산파일을 수집하고, 파트너별 규칙을 적용해 데이터를 추출한 뒤 정합성을 검증하고, 검증 근거가 함께 남도록 내부 표준 템플릿으로 결과를 저장합니다.

이 방식 덕분에 소수의 별도정산 거래처에서 발생하던 파일 기반 업무도 기존 내부 DB 구조 안으로 자연스럽게 편입될 수 있었습니다.

정산파일 자동화를 하려다, 규칙과 검증을 다시 설계하다

결과보다 중요한 것: 검증과 트래킹

이 구조에서 가장 중요하게 다뤄진 부분은 검증이었습니다. 왜 이 결과가 나왔는지를 다시 설명할 수 있어야 했기 때문입니다. 그래서 결과와 함께 행 수, 금액 합계, 기준값 차이를 자동으로 확인하고, 이상 지점이 있으면 바로 드러나도록 설계했습니다.

이제는 정산파일을 하나하나 다시 열어보지 않아도, 내부 DB에 쌓인 데이터를 기준으로 정산 결과를 추적하고 설명할 수 있는 상태가 되었습니다.

소수의 예외를 구조 안으로 가져오다

이번 작업의 의미는 별도정산 업무를 자동화했다는 데만 있지 않습니다.

이미 DB화되어 있던 대부분의 거래 구조 옆에, 파일 기반으로 남아 있던 소수의 예외 영역을 같은 내부 데이터 구조 안으로 가져왔다는 점에 있습니다.

그 결과, 정산 결과를 맞추는 데서 끝나지 않고, 근거까지 바로 추적·설명할 수 있는 데이터 구조로 바뀌었습니다..

이 작업이 남긴 것은 단순 자동화가 아닙니다. 정산파일 기반 업무를 내부 데이터 구조로 내재화하기 위해 규칙과 검증을 설계한 경험이었습니다.

Read more

AI 추천과 예약 사이의 거리를 좁히는 법: 마이리얼트립이 조코딩 AX 해커톤에 낸 문제

AI 추천과 예약 사이의 거리를 좁히는 법: 마이리얼트립이 조코딩 AX 해커톤에 낸 문제

마이리얼트립은 조코딩AX파트너스가 연 해커톤 「AX 인재전쟁」에 기업 출제자로 참여했습니다. API를 제공하는 데서 나아가, 참가자들이 풀어야 할 문제를 직접 내고 심사했습니다. 문제의식은 단순합니다. AI를 여행에 흔히 쓰게 되면서 정보 탐색은 한결 쉬워졌는데, 정작 사람들은 여전히 여행 계획을 손으로 짭니다. 추천은 넘치는데 '진짜 갈 수 있는 경험'까지 좁혀주는

By 마이리얼트립
가장 중요한 문제에, 가장 잘 맞는 사람을 붙인다

가장 중요한 문제에, 가장 잘 맞는 사람을 붙인다

마이리얼트립의 프로덕트 엔지니어(PE)는 CTO 직속 PS팀(Product Strategy)에 모여 있습니다. 전사에서 가장 중요한 문제에 가장 잘 맞는 PE를 배치하고 한 명의 PE가 문제 정의부터 구현과 배포까지 끝까지 책임지는 조직입니다. 이렇게 한 데는 이유가 있습니다. 회사에서 가장 중요한 문제는 계속 바뀌는데, 사람이 특정 버티컬에 묶여 있으면 그 경계

By 마이리얼트립
돌려쓰던 테스트 환경을, 각자의 환경으로: 배포 병목을 없앤 이야기

돌려쓰던 테스트 환경을, 각자의 환경으로: 배포 병목을 없앤 이야기

PEPE 세션 — 회원주문개발팀 정현수 님 과거 마이리얼트립의 공용 테스트 환경은 쓰려는 사람에 비해 모자랐습니다. 누가 쓰는지 알기 어려워 "지금 써도 되냐"고 서로 물어 가며 차례를 기다리는 경우가 많았고, 내가 작업 중인 사이 다른 사람이 배포하지 않도록 조율해야 했습니다. 이 병목을 환경 개수를 늘리는 방식에서 각자 자기 환경을

By 마이리얼트립
예약에서 끝나지 않는 여행: 한 명이 10여 개 레포를 가로질러 만든 항공 여정 케어

예약에서 끝나지 않는 여행: 한 명이 10여 개 레포를 가로질러 만든 항공 여정 케어

마이리얼트립이 예약한 항공편의 운항 상태를 고객이 앱을 열지 않아도 실시간으로 받아보는 서비스를 선보였습니다. 출발 3시간 전 알림부터 게이트 변경과 지연, 결항, 회항, 출발, 도착, 수하물 상태까지, 비행의 흐름 전체를 고객이 찾기 전에 먼저 안내합니다. 여행은 항공권을 예약하는 순간 끝나지 않습니다. 짐을 싸고 공항으로 향하고 비행기에 올라 목적지에 내려 짐을 찾을

By 마이리얼트립