바티에이아이
경력근거: 원천 데이터 흐름 검증 및 솔루션 맞춤형 데이터 연동 규칙 정의
※ 실제 산출물이 아닌 AI 예측 시안입니다.
바티에이아이는 아마존·쇼피·틱톡샵·라쿠텐·쿠팡 등 40개 이상 커머스 채널의 주문·출고·매출·정산 데이터를 하나로 모으고 SAP·ERP 전표까지 자동으로 연동하는 커머스 데이터 미들웨어 Bati CIS 를 만들어요. 여러 마켓을 운영하는 K-뷰티 브랜드사 등에 구축형으로 공급해요.
공고는 Bati CIS 를 도입한 한 K-뷰티 기업이 '재무팀 월 마감을 3일에서 3시간으로 줄이고' SAP 처리 비용도 아꼈다고 소개하고, 이 자리의 일로 '원천 데이터 흐름 검증 및 솔루션 맞춤형 데이터 연동 규칙 정의'를 꼽아요. 판매 채널은 저마다 수수료율과 정산 기한이 다르고, 정산이 끝난 뒤 들어온 반품은 판매 정산과 따로 나중 정산에서 빠져요. 그래서 주문 하나가 정산까지 끝났는지는 출고 기록과 여러 번에 나눠 들어오는 정산 내역을 함께 봐야 알 수 있어요.
공고는 다채널 커머스 데이터와 ERP 연동 인터페이스 설계에 참여하고, 원천 데이터 흐름을 검증해 솔루션에 맞는 데이터 연동 규칙을 정의하는 일을 이 자리의 업무로 꼽아요.
공고는 대형 커머스·뷰티 기업의 비즈니스·재무·물류 요구사항을 분석해 Bati CIS 도입을 위한 기술 요구사항으로 구체화하는 일을 첫 업무로 들어요. 자격 요건에는 정산·물류·판매 같은 이커머스 산업에 대한 높은 이해도를 적었어요.
자격 요건으로 SQL 활용 능력과 복잡한 데이터 관계도(ERD)를 이해하고 설계하는 역량을 들어요. 우대 사항에는 Python, Node.js/TypeScript 로 PoC 수준의 검증 작업을 할 수 있는 사람을 적었어요.
브랜드사 재무팀 담당자가 월 마감 전에 여는 관리자 페이지예요. 판매월에 출고된 주문마다 채널의 판매 정산이 들어왔는지, 빠진 수수료가 그 채널 계약과 맞는지, 반품된 주문은 정산에서 차감됐는지 확인해 주고, 걸리는 데가 없는 주문은 전표로 넘길 수 있다고 알려 줘요. 받은 데이터를 담을 DB 설계와 기술·구조, 그리고 수수료가 계약보다 얼마나 더 빠져야 문제로 볼지 정하는 허용 차이는 지원자가 정해요.
Bati CIS 를 들인 K-뷰티 브랜드사의 재무팀 담당자예요. 채널마다 수수료율과 정산 기한이 다르고 한 주문의 정산 내역도 여러 번에 나눠 들어와서, 정산이 늦게 들어온 주문이나 수수료가 계약보다 많이 빠진 주문, 반품이 아직 차감되지 않은 주문을 월 마감 전에 다 찾아내기 어려워요.
브랜드사가 국내 판매 채널 세 곳과 맺은 계약이에요. 한 행이 채널 하나이고 channel_id 가 키예요. fee_rate_bp 는 채널이 판매 금액에서 떼 가기로 한 수수료율을 만분율 정수로 적은 값이에요(1080 이면 10.80%). 계약대로라면 판매 정산 줄의 수수료는 그 주문의 판매 금액에 이 율을 곱하고 원 미만을 버린 금액이에요. settlement_days 는 출고 시각부터 며칠 안에 판매 정산을, 반품 완료 시각부터 며칠 안에 반품 차감을 정산 내역에 올리기로 했는지 적은 달력 일수예요. 기한은 날짜 단위로 끊지 않고, 출고 시각(반품은 반품 완료 시각)에 이 일수를 더한 바로 그 시각이에요. 이 데이터 기간 동안 계약은 바뀌지 않았어요. 시작용과 큰 데이터 모두 같은 세 행이에요.
전체 3행 가운데 앞 3행이에요.
| channel_id | channel_name | fee_rate_bp | settlement_days |
|---|---|---|---|
| coupang | 쿠팡 | 1,080 | 15 |
| smartstore | 네이버 스마트스토어 | 550 | 9 |
| own_mall | 자사몰(카페24) | 320 | 4 |
3행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 3행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "판매 채널 하나와 맺은 계약. 키는 channel_id.",
"additionalProperties": false,
"required": [
"channel_id",
"channel_name",
"fee_rate_bp",
"settlement_days"
],
"properties": {
"channel_id": {
"type": "string",
"enum": [
"coupang",
"smartstore",
"own_mall"
],
"description": "판매 채널 코드. 이 표의 키예요."
},
"channel_name": {
"type": "string",
"description": "화면에 보이는 채널 이름."
},
"fee_rate_bp": {
"type": "integer",
"minimum": 1,
"maximum": 10000,
"description": "계약 수수료율, 만분율 정수(1080 = 10.80%). 주문의 판매 금액에 매기고 원 미만은 버려요."
},
"settlement_days": {
"type": "integer",
"minimum": 1,
"description": "출고 시각부터 판매 정산을, 반품 완료 시각부터 반품 차감을 정산 내역에 올리기로 한 기한(달력 일수). 기한은 날짜 단위로 끊지 않고, 출고 시각(반품은 반품 완료 시각)에 이 일수를 더한 바로 그 시각이에요."
}
}
}브랜드사가 국내 판매 채널 세 곳에서 받아 출고한 주문이에요. 한 행이 주문 하나이고 order_id 가 키예요. 주문 번호는 채널이 달라도 겹치지 않아요. channel_id 는 channel_contracts.channel_id 를 가리키고, 한 주문은 한 채널에만 속해요. sale_amount 는 고객이 결제한 판매 금액(원, 부가세 포함)이고 채널 수수료는 이 금액에 매겨요. shipped_at 은 채널 주문 관리 화면에 출고 처리가 기록된 시각이에요. 출고 뒤 판매 정산 전에 취소·반품된 주문은 이 표에 없어요. 일요일에는 출고가 없고 토요일은 평일보다 적어요. 같은 채널에서 같은 날 같은 금액으로 출고된 다른 주문이 여럿 있어요. 큰 데이터는 2025년 10월부터 2026년 9월까지 12개 판매월에 출고된 주문 24,778건 전부이고, 시작용은 그 가운데 2026년 9월 19일(토) 하루에 출고된 주문 26건 전부를 같은 ID·같은 값으로 잘라 낸 것이에요.
전체 26행 가운데 앞 5행이에요.
| order_id | channel_id | sale_amount | shipped_at |
|---|---|---|---|
| OD-1023975 | coupang | 32,000 | 2026-09-19T09:02:28+09:00 |
| OD-1023976 | smartstore | 61,700 | 2026-09-19T09:13:31+09:00 |
| OD-1023977 | smartstore | 54,300 | 2026-09-19T09:13:31+09:00 |
| OD-1023978 | coupang | 25,900 | 2026-09-19T09:19:12+09:00 |
| OD-1023979 | smartstore | 52,500 | 2026-09-19T09:20:10+09:00 |
26행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 24,778행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "출고된 주문 하나. 키는 order_id.",
"additionalProperties": false,
"required": [
"order_id",
"channel_id",
"sale_amount",
"shipped_at"
],
"properties": {
"order_id": {
"type": "string",
"pattern": "^OD-[0-9]{7}$",
"description": "주문 번호. 이 표의 키이고, 채널이 달라도 겹치지 않아요."
},
"channel_id": {
"type": "string",
"enum": [
"coupang",
"smartstore",
"own_mall"
],
"description": "주문이 들어온 판매 채널. channel_contracts.channel_id 를 가리켜요."
},
"sale_amount": {
"type": "integer",
"minimum": 1,
"description": "고객이 결제한 판매 금액(원, 정수, 부가세 포함). 채널 수수료는 이 금액에 매겨요."
},
"shipped_at": {
"type": "string",
"format": "date-time",
"description": "채널 주문 관리 화면에 출고 처리가 기록된 시각. 한국 시간(+09:00) ISO 8601, 초 단위."
}
}
}채널이 보낸 정산 내역의 줄이에요. 한 행이 줄 하나이고 line_id 가 키예요. order_id 는 channel_orders.order_id 를 가리켜요. line_type 은 sale(판매 정산), return(반품 차감), hold(정산 보류) 셋 중 하나이고, 한 주문에 종류마다 많아야 한 줄이에요. 판매 정산 줄의 amount 는 정산한 판매 금액, fee_amount 는 채널이 뗀 수수료예요. 반품 차감 줄은 그 주문의 판매 금액과 돌려준 수수료를 음수로 적어요. 정산 보류 줄은 채널이 그 주문의 판매 정산을 미룬다고 알린 줄이라 amount 와 fee_amount 가 0 이에요. settled_at 은 채널이 그 줄을 정산 내역에 올린 시각이고, 채널마다 하루 한 번 같은 시각에 그날 줄을 올려요. 기한보다 늦게 들어온 판매 정산, 보류됐다가 나중에 정산된 주문, 보류 줄만 있는 주문, 줄이 하나도 없는 주문, 수수료가 계약보다 조금·꽤·많이 더 빠지거나 덜 빠진 줄, 늦게 들어오거나 들어오지 않은 반품 차감, 월 마감 점검 시각 바로 앞뒤에 올라온 줄이 들어 있어요. 2026년 10월 19일 18시까지 올라온 줄이 모두 있어요. 큰 데이터는 12개 판매월 주문의 줄 25,673개 전부이고, 시작용은 9월 19일 출고 주문 26건의 줄 31개 전부예요.
전체 31행 가운데 앞 5행이에요.
| line_id | order_id | line_type | amount | fee_amount | settled_at |
|---|---|---|---|---|---|
| SL-2024328 | OD-1023994 | sale | 52,000 | 1,664 | 2026-09-21T06:32:03+09:00 |
| SL-2024386 | OD-1023985 | sale | 12,900 | 412 | 2026-09-22T06:34:07+09:00 |
| SL-2024387 | OD-1023990 | sale | 22,800 | 729 | 2026-09-22T06:34:07+09:00 |
| SL-2024388 | OD-1023991 | sale | 42,000 | 1,344 | 2026-09-22T06:34:07+09:00 |
| SL-2024389 | OD-1023998 | sale | 28,000 | 896 | 2026-09-22T06:34:07+09:00 |
31행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 25,673행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "채널이 보낸 정산 내역의 줄 하나. 키는 line_id.",
"additionalProperties": false,
"required": [
"line_id",
"order_id",
"line_type",
"amount",
"fee_amount",
"settled_at"
],
"properties": {
"line_id": {
"type": "string",
"pattern": "^SL-[0-9]{7}$",
"description": "정산 줄 번호. 이 표의 키예요."
},
"order_id": {
"type": "string",
"pattern": "^OD-[0-9]{7}$",
"description": "이 줄이 정산한 주문. channel_orders.order_id 를 가리켜요."
},
"line_type": {
"type": "string",
"enum": [
"sale",
"return",
"hold"
],
"description": "sale 은 판매 정산, return 은 반품 차감, hold 는 정산 보류 줄이에요. 한 주문에 종류마다 많아야 한 줄이에요."
},
"amount": {
"type": "integer",
"description": "이 줄이 정산하는 판매 금액(원). sale 줄은 양수, return 줄은 그 주문 판매 금액의 음수, hold 줄은 0 이에요."
},
"fee_amount": {
"type": "integer",
"description": "이 줄에서 채널이 뗀 수수료(원). sale 줄은 양수, return 줄은 돌려준 수수료라 음수, hold 줄은 0 이에요."
},
"settled_at": {
"type": "string",
"format": "date-time",
"description": "채널이 이 줄을 정산 내역에 올린 시각(채널 정산 기록). 한국 시간(+09:00) ISO 8601, 초 단위."
}
}
}채널에서 반품이 끝난 주문의 기록이에요. 한 행이 반품 하나이고 return_id 가 키예요. order_id 는 channel_orders.order_id 를 가리키고, 한 주문은 많아야 한 번, 주문 전체가 반품돼요. returned_at 은 채널에 반품 완료가 기록된 시각이에요. 이 데이터의 반품은 모두 판매 정산이 끝난 뒤의 반품이라, 판매 정산 줄은 그대로 있고 반품 차감 줄이 정산 내역에 따로 올라와요. 반품 차감 기한이 월 마감 점검 시각 바로 앞이거나 바로 뒤인 반품, 점검 시각에 아직 기한이 안 된 반품이 들어 있어요. 2026년 10월 19일 18시까지 끝난 반품이 모두 있어요. 큰 데이터는 반품 885건 전부이고, 시작용은 9월 19일 출고 주문의 반품 7건 전부예요.
전체 7행 가운데 앞 5행이에요.
| return_id | order_id | returned_at |
|---|---|---|
| RT-300833 | OD-1023994 | 2026-09-25T15:27:30+09:00 |
| RT-300841 | OD-1023990 | 2026-09-26T16:50:32+09:00 |
| RT-300843 | OD-1023995 | 2026-09-27T16:40:28+09:00 |
| RT-300851 | OD-1023980 | 2026-09-30T15:12:47+09:00 |
| RT-300855 | OD-1023992 | 2026-10-03T09:06:53+09:00 |
7행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 885행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "반품 하나. 키는 return_id.",
"additionalProperties": false,
"required": [
"return_id",
"order_id",
"returned_at"
],
"properties": {
"return_id": {
"type": "string",
"pattern": "^RT-[0-9]{6}$",
"description": "반품 번호. 이 표의 키예요."
},
"order_id": {
"type": "string",
"pattern": "^OD-[0-9]{7}$",
"description": "반품된 주문. channel_orders.order_id 를 가리키고, 한 주문은 많아야 한 번 반품돼요."
},
"returned_at": {
"type": "string",
"format": "date-time",
"description": "채널에 반품 완료가 기록된 시각. 한국 시간(+09:00) ISO 8601, 초 단위."
}
}
}재무팀이 판매월마다 마감 전에 정산 상태를 점검하는 시각이에요. 한 행이 판매월 하나이고 period(YYYY-MM)가 키예요. 그 달 1일 0시부터 말일 24시까지(한국 시간) 출고된 주문이 그 판매월의 마감 대상이에요. checked_at 은 이 기능이 '지금'으로 삼는 시각이에요. 데이터에는 이 시각 뒤에 올라온 정산 줄과 끝난 반품도 들어 있어요. 모든 시각은 한국 시간(+09:00)이고, 출고·반품·정산 시각은 모두 채널이 남긴 기록이에요. 큰 데이터는 2025-10 부터 2026-09 까지 12행이고, 시작용은 2026-09 한 행이에요.
전체 1행 가운데 앞 1행이에요.
| period | checked_at |
|---|---|
| 2026-09 | 2026-10-19T09:00:00+09:00 |
1행 전부를 JSON 파일 하나로 받을 수 있어요.
같은 형식으로 만든 12행이에요. 위 데이터가 이 안에 그대로 들어 있어요(한 줄에 한 행, gzip 압축).
미리보기와 내려받는 데이터 모두 이 형식(JSON Schema)을 따라요.
{
"type": "object",
"description": "판매월 하나의 마감 점검. 키는 period.",
"additionalProperties": false,
"required": [
"period",
"checked_at"
],
"properties": {
"period": {
"type": "string",
"pattern": "^[0-9]{4}-[0-9]{2}$",
"description": "판매월(YYYY-MM). 그 달 1일 0시부터 말일 24시까지(한국 시간) 출고된 주문이 이 판매월의 마감 대상이에요."
},
"checked_at": {
"type": "string",
"format": "date-time",
"description": "재무팀이 이 판매월의 정산 상태를 점검하는 시각이고, 이 기능이 '지금'으로 삼는 시각이에요. 한국 시간(+09:00) ISO 8601, 초 단위."
}
}
}근거: 원천 데이터 흐름 검증 및 솔루션 맞춤형 데이터 연동 규칙 정의