저희는 소매업을 위한 시스템을 네트워크의 과제에 맞춰 개발합니다
계산대, 결제 회로, 상품 관리, 네트워크 관리, 연동, 그리고 출시 이후의 지원.
소매업을 위한 시스템의 개발과 도입: 매장의 계산대와 POS, 결제 단말기, 카탈로그와 가격, 지점의 재고와 창고, 적립, 직원 권한, 분석, 네트워크 중앙 관리 패널. 아래에는 각 모듈이 어떻게 만들어졌고, 어떤 시스템·장비와 이어지며, 어떤 프로세스를 맡는지 정리되어 있습니다.
리테일 소프트웨어 — 매장의 입고에서 발행된 영수증과 집계된 매출까지 상품을 이끌고, 상품·가격·재고 데이터를 네트워크의 모든 지점에서 똑같이 유지하는 시스템입니다.
밖에서 보면 매장은 선반과 계산대입니다. 안에서는 서로 이어진 여러 프로그램입니다: 매장의 계산대 프로그램, 지점의 상품 관리, 결제 회로, 네트워크의 중앙 시스템, 그리고 회계·창고·CRM·온라인 상점 같은 외부 시스템과의 교환 계층.
«계산대 프로그램»과 «리테일 시스템»의 경계는 지점의 수와 결정이 어디에서 내려지는지로 갈립니다. 계산대 하나라면 계산대 컴퓨터의 로컬 프로그램으로 충분합니다. 매장이 둘 이상이 되는 순간, 단일 지점에는 없던 질문이 생깁니다: 유일한 상품 목록은 어디에 있는지, 누가 가격을 모든 곳에서 한 번에 바꾸는지, 상품이 매장 사이를 어떻게 옮겨 가는지, 누구의 재고를 맞다고 볼지.
소매 네트워크의 회로는 데이터로 이어진 아홉 개의 고리입니다:
고리는 양방향으로 이어져 있습니다: 목록과 규칙은 중앙 시스템에서 지점으로 내려가고, 판매와 상품 이동과 장비 이벤트는 위로 올라갑니다. 어디가 끊기든 바로 드러납니다 — 선반과 영수증의 가격 차이로, 마이너스 재고로, 집계되지 않은 매출로.
페이지도 표도 아니라 회계 객체 — 상태와 작성자와 이력을 가진 레코드입니다:
프로세스가 객체로 기술되는 순간 검증할 수 있게 됩니다: 리포트의 모든 숫자에 문서가 있고, 문서에는 작성자와 시각이 있으며, 다툼에는 말이 아니라 기록이 있습니다.
단일 지점에는 존재하지 않는 네 가지 질문입니다. 이 질문에 대한 답이 네트워크용 시스템과 계산대 프로그램을 가릅니다:
매장이나 네트워크가 소매 소프트웨어를 도입하는 여섯 가지 이유입니다. 시스템이 없는 동안에는 각각을 표와 지점 간 전화와 기억에 의존한 재고 계산으로 처리해야 합니다.
상품, 바코드, 가격, 할인 규칙을 한 번 등록하면 지점으로 퍼집니다. 도심 매장과 외곽 매장은 수정 이력이 서로 다른 두 파일이 아니라 하나의 목록을 읽습니다.
품목은 바코드 스캔이나 무게 측정으로 영수증에 들어가고, 가격은 규칙으로 채워지며, 할인은 시스템이 계산합니다. 계산원이 가격을 손으로 치지 않으니 틀릴 일도, 스스로 고를 일도 없습니다.
판매는 영수증이 마감되는 순간에, 입고와 이동은 문서가 처리되는 순간에 상품을 차감합니다. 재고는 지난 재고 조사에서 나온 숫자가 아니라 공급처 발주에 쓰는 실무 숫자가 됩니다.
가격과 할인은 지점 묶음, 카테고리, 일정에 따른 규칙으로 정합니다. 행사 전 천 개 품목의 가격 조정이 몇 분이면 끝나고 되돌릴 수 있으며, 인쇄물을 들고 매장을 도는 일이 되지 않습니다.
반품, 취소, 수동 할인, 가격 변경, 금전함 열림은 작성자와 시각과 이전 값이 붙은 기록입니다. 다툼은 근무조의 진술이 아니라 로그로 확인합니다.
지점마다 무엇이 몇 시에 팔리는지, 어떤 상품이 움직이지 않는지, 어디에서 반품이 늘어나는지, 할인을 반영해 행사가 실제로 얼마를 벌어 줬는지 보입니다.
이것은 하나의 프로그램이 아니라 서로 이어진 소프트웨어·하드웨어 구성 요소의 묶음입니다. 각각이 제 몫을 맡고 따로 갱신할 수 있습니다: 중앙 패널에 리포트가 하나 늘었다고 매장의 계산대를 다시 쓰지는 않습니다.
계산대 컴퓨터나 POS 일체형 기기의 프로그램: 계산원 화면, 스캐너와 저울 다루기, 영수증 계산, 결제 단말기와의 대화, 문서 출력, 근무조. 독립적으로 작동하며 서버와 연결이 끊겨도 손님을 계속 응대합니다.
물리 계층: 계산대 컴퓨터, 스캐너, 영수증 프린터, 결제 단말기, 저울, 데이터 수집 단말기, 금전함, 화면. 하나하나가 매장과 근무 자리에 연결되어 목록에 등록됩니다.
카드 결제의 회로: 계산대와 결제 단말기의 교환, 결제 처리의 상태, 결제와 영수증의 대조, 환불, 거절과 두절의 처리, 매입사 내역과의 대사.
지점에서 오는 데이터 수신, 규칙 적용, 교환 큐, 작업과 리포트의 스케줄러, 목록의 재배포. 매장 수에 따라 확장되며, 열한 번째 매장을 연다고 다시 쓰지 않습니다.
회계 객체와 그 이력의 저장소: 상품, 가격, 재고, 영수증, 결제, 이동 문서, 고객, 직원, 이벤트. 작업 기록은 변경할 수 없고, 백업은 복구 점검과 함께 정해진 일정으로 만듭니다.
네트워크 관리자의 업무 공간: 매장, 상품 구색, 가격, 재고, 판매, 프로모션, 직원, 장비, 오류, 핵심 지표를 하나의 화면에서, 역할별 접근 권한과 함께.
필요한 곳에: 스캔으로 입고와 재고 조사를 하는 상품 담당 앱, 지점 요약을 보는 관리자 앱, 적립 카드와 전자 영수증이 있는 구매자 앱.
외부 시스템과의 교환: 회계, 세무, 창고, CRM, 온라인 상점, 결제 서비스. 큐, 메시지 재전송, 형식의 버전, 교환 로그, 주기적 대사.
작업 데이터 위의 데이터 마트: 판매, 평균 구매액, 마진, 회전율, 반품, 프로모션의 효과, 계산원의 업무. 무거운 리포트가 매장의 계산대를 느리게 하지 않도록 데이터 사본에서 계산합니다.
구성 요소는 «되는 대로»가 아니라 반드시 필요한 관계로 이어져 있습니다: 계산대는 목록 없이 작동하지 않고, 목록은 중앙 패널 없이 의미가 없으며, 패널은 지점의 데이터 없이 쓸모가 없습니다. 그래서 시스템은 통째로 설계하고 부분으로 도입합니다 — 각 단계가 앞 단계의 데이터에 기대는 순서로.
계산대 프로그램 — 판매원의 업무 공간이자, 작업이 문서가 되는 지점입니다. 매장에서 일어난 모든 일은 오직 이곳을 통해 시스템에 들어옵니다: 판매, 반품, 할인, 결제, 현금의 입금과 출금.
여기에 대한 요구는 다른 어떤 모듈보다 엄격합니다: 줄이 길 때도, 서버와 연결이 끊겼을 때도 빠르게 작동해야 합니다. 그래서 계산대는 상품과 가격 목록의 로컬 사본을 두고 작업을 로컬 큐에 기록하며, 영수증의 품목마다 서버에 묻지 않습니다.
계산대 프로그램이 하는 일:
세금 관련 요구 — 영수증의 출력, 구성, 데이터 전송 — 는 각국의 법과 연결된 기기의 모델이 정합니다. 교환의 구성과 절차는 미리 선언하지 않고 사전 진단 단계에서 확정합니다.

서버와의 연결은 판매의 조건이 아닙니다. 계산대는 로컬 목록으로 영수증을 계속 발행하며 작업을 큐에 쌓고, 통신이 돌아오면 큐를 묶음으로 마저 보냅니다. 모든 작업에는 키가 있어 다시 보내도 두 번째 영수증이 생기거나 재고가 두 번 차감되지 않습니다.
이때의 한계는 솔직히 밝힙니다: 통신이 없는 동안 계산대는 중앙 시스템이 1분 전에 바꾼 가격을 알지 못하고, 서버의 포인트 잔액도 확인하지 못합니다. 오프라인 모드에서 무엇까지 허용할지는 프로젝트에서 정합니다: 예를 들어 판매는 허용하되 포인트 사용은 통신이 되살아날 때까지 미루는 식입니다.
근무조는 «계산원의 하루»가 아니라 시작과 끝, 계산원, 계산대, 결산을 가진 문서입니다. 그 기간의 모든 영수증, 결제, 반품, 현금 이동이 여기에 묶입니다.
매장의 프로그램은 홀로 작동하지 않습니다: 거의 모든 작업이 물리적인 기기에서 시작하거나 끝납니다. 아래에는 계산대와 관리 소프트웨어가 함께 일하는 장비, 그리고 시스템이 그 기기에서 무엇을 받고 무엇을 보내는지 정리되어 있습니다.

계산대 프로그램이 돌아가는 기기입니다. 시스템은 이를 근무 자리로 압니다: 계산대, 근무조, 연결된 주변기기의 구성, 로그인 권한이 여기에 묶입니다. 하드웨어를 바꿔도 판매 이력은 깨지지 않습니다 — 근무 자리는 같은 회계 객체로 남습니다.
품목을 영수증과 창고 문서에 넣는 기본 방법입니다. 하나의 상품 품목에 여러 바코드가 있을 수 있습니다 — 공급처의 것, 자체의 것, 포장의 것. 인식되지 않은 코드는 «상품을 찾을 수 없음»으로 사라지지 않고 상품에 연결할 대기열로 들어갑니다.
판매와 환불 문서의 출력. 영수증의 구성, 생성과 데이터 전송의 절차는 국가의 요구와 기기 모델이 정하며, 구체적인 구성은 사전 진단에서 확정합니다. 출력되지 않았거나 전송되지 않은 문서는 끝나지 않은 작업으로 기록됩니다.
카드 결제의 수납. 계산대가 금액을 보내면 단말기가 카드 소지자와 대화하고 결과를 돌려줍니다. 단말기는 주변기기가 아니라 자기 상태를 가진 두 번째 시스템이므로, 아래에 별도의 항목을 두었습니다.
무게 상품의 처리: 품목이 실제 무게와 함께 영수증에 들어가고 가격은 킬로그램 단위로 계산됩니다. 저울에는 계산대용 — 무게가 곧바로 영수증으로 들어가는 것 — 과 포장용 — 상품 코드와 무게가 담긴 바코드 라벨을 출력하는 것 — 이 있고, 계산대는 그런 코드를 해석해 품목을 채워 넣습니다.
매장과 지점 창고에서 바로 스캔하며 하는 입고, 재고 조사, 이동, 가격 재조정. 기기는 상시 연결 없이도 작동합니다: 문서를 로컬에서 만든 뒤 차이 검증과 함께 시스템으로 통째로 올립니다.
금전함은 현금 작업이 있을 때 프로그램이 엽니다. 열림 하나하나가 시각, 계산원, 사유가 붙은 이벤트이고, 판매 없는 열림은 관찰 대상 목록에 들어갑니다. 근무 자리의 보조 주변기기 — 키보드, 직원 카드 리더 — 도 여기에 속합니다.
계산대의 디스플레이는 스캔에 맞춰 영수증 구성, 할인, 합계를 보여 줍니다 — 손님이 결제 후가 아니라 결제 전에 가격을 봅니다. 매장의 화면은 계산대와 같은 목록에서 프로모션, 기획전, 가격을 내보내므로 화면과 영수증이 어긋나지 않습니다.
설치된 곳에서는 가격표가 계산대와 같은 시스템에서 가격을 받습니다. 이것이 매장에서 가장 큰 갈등의 원인 — 가격 조정 뒤 선반과 계산대의 가격 차이 — 를 없앱니다. 연결 가능 여부는 해당 가격표 시스템이 밖으로 어떤 제어 인터페이스를 내주는지에 달려 있습니다.
저희는 특정 상표와 모델의 장비 지원을 미리 선언하지 않습니다. 연결할 기기의 구성은 제조사 문서와 기기가 밖으로 내주는 인터페이스를 보고 사전 진단에서 정합니다; 준비된 인터페이스가 없는 경우에는 호환을 약속하는 대신 작업을 시작하기 전에 따로 해결합니다.
결제 단말기는 구매가 결제로 완성되는 유일한 곳이자 매장에서 돈을 직접 다루는 유일한 부품입니다. 그래서 장비 목록의 한 줄이 아니라 별도의 회로로 설명합니다.
가장 어려운 점은 계산대와 단말기가 서로 독립된 두 시스템이라는 것입니다. 계산대에는 계산대의 영수증이 있고, 단말기에는 매입사의 회로에서 살아가며 계산대 프로그램을 따르지 않는 자기 결제 처리가 있습니다. 두 그림의 일치는 물리적으로 보장되지 않습니다: «돈이 빠져나갔다»와 «영수증이 출력됐다» 사이에는 언제나 틈이 있고, 그 틈에 통신 두절, 정전, 멈춤이 끼어들 수 있습니다.
계산대와 결제 단말기의 연동이 맡는 것:
저희는 은행, 단말기 모델, 결제 프로토콜을 미리 지정하지 않습니다: 연동의 구성은 해당 단말기가 어떤 교환 인터페이스를 제공하는지, 매입사와의 계약이 무엇을 허용하는지가 정합니다. 이는 사전 진단에서 확인해 프로젝트에 확정합니다.

단말기에 금액을 손으로 넣는 방식은 개발하기에 가장 싸고 운영하기에 가장 비쌉니다. 자릿수를 잘못 치기 쉽고, 다른 금액이 결제될 수 있으며, 무엇보다 영수증과 결제의 연결을 끊습니다: 나중에는 시각과 금액으로, 즉 어림으로만 맞춰 볼 수 있습니다.
금액을 프로그램으로 전달하면 결제와 영수증이 양쪽 식별자로 묶입니다. 매입사와의 대사, 다툼이 있는 처리의 확인, 시스템의 매출과 계좌의 돈 사이의 차이 관리가 모두 여기에 기댑니다.
단말기는 결제하는 순간에만 확인하는 것이 아닙니다. 상태는 손님이 계산대 앞에 서기 전에 필요한 별도의 데이터입니다:
상태 하나하나가 로그의 이벤트입니다. 응답이 느리거나 열 건 중 한 건을 놓치는 단말기는 매장 점장이 알리기 훨씬 전에 장비 리포트에서 드러납니다.
카드 결제는 하나의 동작이 아니라 상태의 연속이고, 그 하나하나가 끊길 수 있습니다. 아래에는 시스템이 처리를 어떻게 이끌고 결과를 알 수 없을 때 무엇을 하는지 정리되어 있습니다.
계산대가 요청을 만듭니다: 금액, 통화, 처리 식별자, 영수증 참조. 단말기가 응답하기 전까지 영수증은 «결제 대기» 상태이며 마감하거나 바꾸거나 지울 수 없습니다.
단말기가 결과를 돌려줍니다: 승인, 거절, 손님이 취소, 오류. 승인이면 결과와 함께 처리 정보가 오고, 나중에 매입사 내역에서 그 처리를 찾을 때 씁니다.
결제 처리의 식별자는 영수증에, 영수증 번호는 결제 기록에 적힙니다. 연결이 양방향이므로 어느 쪽에서든 반대쪽을 되찾을 수 있습니다: 영수증에서 결제로, 은행 내역의 한 줄에서 특정 판매로.
카드로의 환불은 원래 결제에 묶인 별도의 결제 처리입니다. 시스템은 결제된 금액보다 많이, 그리고 그 영수증에서 아직 환불되지 않은 금액보다 많이 돌려주지 못하게 하며, 환불 결과도 마찬가지로 단말기의 확인을 기다립니다.
가장 중요한 시나리오: 단말기가 응답하지 않은 경우입니다. 시스템은 그런 처리를 성공으로도 실패로도 보지 않습니다 — 확인이 필요하다고 표시하고 영수증을 조용히 마감하지 못하게 합니다. 이후 처리 상태를 조회하거나 대사로 결과를 확정합니다.
단말기의 가용성, 실패한 처리의 비율, 응답 시간, 마감하지 않은 날이 기기마다 모입니다. 문제가 있는 장비는 매장의 불만이 아니라 리포트에서 드러납니다.
시스템 화면 이미지: 숫자는 예시입니다. 핵심은 두 번째 단계입니다: 금액이 프로그램으로 전달되지 않으면 여섯 번째와 일곱 번째 단계를 사람이 종이 전표로 해야 합니다.
| 무슨 일이 있었는가 | 계산대가 하는 일 | 상태 |
|---|---|---|
| 카드 거절 | 다시 시도하거나 다른 결제 수단을 고르도록 안내; 영수증은 열린 채로 둡니다 | 정상 |
| 손님이 처리를 취소 | 영수증을 다시 작업 상태로 되돌리고, 결제 처리는 취소로 닫습니다 | 정상 |
| 단말기가 제때 응답하지 않음 | 영수증을 마감하지 않고 처리 상태를 조회하며, 불분명하면 수동 마감을 막습니다 | 확인 필요 |
| 결제와 출력 사이에 전원이 끊김 | 다시 켜진 뒤 끝나지 않은 영수증을 되살리고 결제 결과를 확인하도록 요구합니다 | 확인 필요 |
| 결제는 됐는데 영수증이 출력되지 않음 | 처리를 열어 둔 채, 두 번째 청구 없이 출력을 다시 합니다 | 확인 필요 |
| 내역에는 결제가 있는데 시스템에 영수증이 없음 | 금액, 시각, 단말기와 함께 차이를 대사 대기열로 넘깁니다 | 확인 필요 |
| 단말기가 당일 마감을 요구 | 카드를 넣은 뒤가 아니라 처리를 시작하기 전에 계산원에게 알립니다 | 경고 |
공통 원칙: 알 수 없는 결과는 성공으로도 거절로도 바뀌지 않습니다. 처리는 열린 채로 확인 대기열에 들어갑니다 — 손님에게 이중 청구를 하거나 매장의 매출을 놓치는 것보다 싸게 먹힙니다.
단말기와의 구체적인 교환 프로토콜, 사용할 수 있는 결제 수단의 구성, 처리 취소의 가능 여부, 통신 두절 시의 동작은 기기 모델과 매입사의 규정이 정합니다. 저희는 그 위에 세워지는 회로를 설명하고 구성을 사전 진단에서 확정합니다 — 특정 은행이나 단말기와의 호환을 미리 선언하지 않습니다.
리테일의 카탈로그 — 는 쇼윈도가 아니라 계산대가 기대어 사는 목록입니다. 여기서의 오류는 웹사이트의 오류보다 비쌉니다: 잘못된 바코드는 줄을 세우고, 중복된 품목은 한 상품의 재고를 두 카드로 흩어 놓습니다.
상품 품목은 무엇으로 이뤄지는가:
대량 작업은 파일 가져오기나 회계 시스템과의 교환으로 이뤄집니다. 가져오기는 기록 전에 언제나 검증을 거칩니다: 무엇이 생성되고, 무엇이 바뀌며, 무엇이 왜 거부되는지. 바코드가 중복된 품목은 조용히 만들어지지 않고 거부 리포트에 실립니다.
네트워크의 매장은 서로 같지 않습니다: 형태, 면적, 지역, 손님이 다릅니다. 상품 구색 매트릭스는 공통 카탈로그의 어떤 품목이 특정 지점에서 팔리는지에 답합니다.
카탈로그의 상품은 하나지만 지점마다 그 상태는 다릅니다. 이것이 네트워크 관리와 단일 매장 관리의 가장 큰 차이입니다:
| 매장 | 매트릭스에 포함 | 가격 | 재고 |
|---|---|---|---|
| 도심 | 예 | 395 | 42 |
| 주택가 | 예 | 385 | 7 |
| 간선도로 | 아니오 | — | 0 |
숫자는 예시입니다. 가격이 다른 것은 오류가 아니라 규칙입니다: 간선도로의 지점과 동네 매장은 서로 다른 가격 그룹에 삽니다. 오히려 세 곳에서 손으로 고쳐 같은 값을 만들어 놓는 편이 오류일 것입니다.
영수증의 가격은 상품 카드의 숫자가 아니라 규칙으로 계산한 결과입니다. 그래서 가격 조정에 수천 개 품목을 고칠 필요가 없고, 다툼이 있는 영수증 금액은 계산원의 기억이 아니라 계산의 층으로 확인합니다.
한 품목에 여러 가격이 동시에 존재합니다: 기본 가격, 매장 가격 그룹의 가격, 특정 지점의 가격. 시스템은 계산하는 순간에 적용할 가격을 고릅니다. 도심 매장과 간선도로 매장은 하나의 목록을 서로 다른 규칙으로 씁니다.
카테고리, 공급처, 상품군별로 매입가 대비 비율이나 금액. 새 매입가로 입고되면 소매가가 자동으로 다시 계산되고, 지난 납품 때의 가격에 머물지 않습니다.
적용 조건, 할인 방식, 시작일과 종료일, 반복 구간. 프로모션은 스스로 시작하고 멈춥니다 — 주말 가격을 켜려고 자정에 직원이 나와 있을 필요가 없습니다.
비율, 정액, 새 가격, 묶음에서 싼 상품 할인, «두 번째는 반값», 조건을 채우면 주는 사은품, 영수증 금액에 따른 카테고리 할인. 방식은 규칙으로 정하며 계산원이 다시 계산하지 않습니다.
캠페인용 단일 코드 또는 수신자별 고유 코드 묶음. 기한, 사용 한도, 구매자당 한도, 진행 중인 프로모션과의 병행 가능 여부를 확인합니다. 사용은 영수증에 기록되어, 코드마다 어디에서 언제 쓰였는지 보입니다.
할인의 병행 가능 여부는 명시적으로 정합니다: 무엇이 합산되고 무엇이 서로 배타적인지. 최저 가격 제한이 있어 올바른 할인이 여럿 겹쳐도 품목이 허용 기준 아래로 내려가지 않습니다.
숫자는 예시입니다. 적용되지 않은 프로모션 코드에 대한 줄이 다른 무엇보다 중요합니다: 계산대의 손님은 «코드가 유효하지 않습니다»가 아니라 거절 사유를 받아야 합니다. 계산의 모든 단계는 영수증에 저장되어 다툼이 있는 구매를 확인할 때 볼 수 있습니다.
재고는 참고용 숫자가 아니라 특정 지점에서 그 품목에 대해 처리된 모든 문서의 결과입니다. 재고가 «맞지 않는다»면 원인은 언제나 문서에 있습니다: 무엇을 처리하지 않았거나, 두 번 처리했거나, 엉뚱한 곳에 처리한 것입니다.
그래서 시스템은 재고를 직접 고치지 못하게 합니다. 모든 변경은 종류, 작성자, 시각, 품목 구성을 가진 문서입니다.
상품 이동 문서:
모든 문서는 두 가지 상태를 거칩니다: 고칠 수 있는 초안, 그리고 재고를 바꾸며 역분개 문서로만 고칠 수 있는 처리 완료. 이것이 회계와 표를 가르는 지점입니다.

재고 조사는 «1년에 한 번 전부 세기»가 아닙니다. 제대로 돌아가는 시스템에는 두 가지가 있고, 두 번째가 첫 번째보다 중요합니다.
목록은 짧고 거의 언제나 같습니다. 시스템이 이 원인들을 스스로 없애 주지는 않습니다 — 다만 구분할 수 있게 해 줍니다:
문제 카테고리에 대한 정기적인 부분 재고 조사는 이런 경우를 1년이 아니라 일주일 만에 찾아내고, 특정 문서와 담당자로 확인합니다.
매장 하나는 목소리와 공책으로 관리됩니다. 셋이면 표와 통화로. 스무 곳이면 이미 불가능합니다: 이 단계에서는 회사의 누구도 매장마다 전화하지 않고서는 모든 지점의 현재 가격을 말하지 못합니다. 중앙 시스템이 필요한 이유는 «정돈»이 아니라, 수작업 방식이 아주 분명한 지점 수에서 더는 확장되지 않기 때문입니다.

성장은 세 가지 상태를 지나가고, 상태마다 깨지는 것이 다릅니다. 매장 하나 — 계산대에 있는 데이터로 충분합니다. 매장 여럿 — 누구의 목록이 주인지 하는 질문이 생기고, 상품이 지점 사이를 옮겨 다니기 시작합니다. 수십, 수백 개 지점 — 관리가 별도의 업무가 됩니다: 한 화면이 없으면 네트워크의 책임자는 문제를 시스템이 아니라 매장에서 전해 듣습니다. 아래에는 중앙 패널에서 무엇이 보이고 무엇을 관리하는지 정리되어 있습니다.
지점 목록: 형태, 주소, 면적, 가격 그룹, 상품 구색 매트릭스, 운영 시간, 담당자, 장비와 근무 자리의 구성. 새 지점은 처음부터 만드는 것이 아니라 비슷한 지점의 설정을 복사해 엽니다.
단일 카탈로그와 지점 묶음별 매트릭스. 품목의 투입과 제외는 날짜와 범위가 있는 관리된 동작입니다: 어느 매장이 영향을 받는지, 언제부터인지, 빠지는 품목의 재고를 어떻게 할지.
가격 그룹과 지점별 가격 규칙, 적용일이 있는 계획된 가격 조정, 변경 이력. 중앙 가격 조정은 네트워크에서 가장 중요한 작업이므로 아래에 따로 설명합니다.
지점마다, 그리고 네트워크 전체의 품목별 재고, 매장 사이의 이동 중 상품, 오래 남은 품목, 떨어져 가는 품목. 여기에서 재고가 남는 매장에서 모자란 매장으로의 이동도 시작합니다.
모든 지점의 영수증을 하나의 흐름으로: 매출, 평균 구매액, 영수증 수, 상품군별 판매, 지점끼리의 비교와 같은 지점의 지난 기간과의 비교.
매장 묶음 단위의 범위, 일정, 한도를 가진 캠페인. 어디에서 프로모션이 이미 진행 중인지, 어디에서 시작될지, 행사 가격으로 얼마나 팔렸는지, 할인을 반영한 결과가 어떤지 보입니다.
계정, 역할과 권한, 지점 연결, 근무조와 그 결산. 권한은 사람마다의 개별 설정이 아니라 역할로 줍니다 — 그러지 않으면 매장 쉰 곳의 네트워크에서는 확인이 불가능합니다.
계산대, 단말기, 저울을 비롯한 기기의 목록을 근무 자리, 프로그램 버전, 상태, 정비 이력과 함께. 어디에 낡은 버전이 있고 어디에서 기기가 자주 말썽인지 보입니다.
네트워크의 이상을 담은 단일 흐름: 계산대가 연결되지 않음, 단말기가 응답하지 않음, 교환이 지나가지 않음, 문서가 처리되지 않음, 재고 조사의 차이. 이상은 담당자에게 배정되고 기한이 붙습니다, 그러지 않으면 그저 로그일 뿐입니다.
모든 지점의 카드 결제, 실패한 처리의 비율, 마감되지 않은 단말기의 날짜, 매입사 내역과의 대사 결과와 확인이 필요한 차이 목록.
매출, 마진, 평균 구매액, 회전율, 반품 비율, 손실, 계획 달성 — 네트워크, 형태, 지역, 지점 단위로. 리포트마다 제각각의 공식이 아니라 모두에게 하나의 정의 묶음.
무엇이 언제 지점으로 갔고, 무엇이 돌아왔고, 어떤 메시지가 전달되지 않았으며 왜인지. 하루 동안 판매를 보내지 않는 매장이 월 마감에서 발견되는 것이 아니라 여기에서 보입니다.
동기화는 «모두가 쓰는 하나의 데이터베이스»가 아닙니다. 매장은 중앙 서버와 연결이 없어도 팔 수 있어야 하므로, 지점마다 자기 작업 사본을 두고 교환은 메시지로 이뤄집니다.
중앙에서 지점으로 내려가는 흐름: 상품과 바코드 목록, 가격과 가격 규칙, 프로모션과 프로모션 코드, 상품 구색 매트릭스, 장비 설정, 계정과 권한, 계산대 프로그램의 업데이트.
지점에서 중앙으로 올라가는 흐름: 영수증과 그 구성, 결제 처리, 상품 이동, 근무조 결산, 장비 이벤트, 재고 조사 결과, 직원의 동작.
이것이 작동하는 규칙:
네트워크에서 가장 중요한 작업입니다: 모든 지점에 한꺼번에 영향을 주고 그날 바로 손님 눈에 보입니다. 그래서 목록을 고치는 일이 아니라 적용일이 있는 문서로 만들어졌습니다.
시스템 화면 이미지: 숫자는 예시입니다. 다섯 번째 단계의 뜻은 이렇습니다: 통신이 없는 매장도 가격 조정에서 빠지지 않고, 언제까지일지 모를 기간 동안 옛 가격으로 팔지 않습니다. 문서는 나중에 적용되지만 날짜는 올바릅니다.
가격 조정은 되돌릴 수 있습니다: 효력이 생기기 전에 문서를 취소하거나 새 문서로 덮을 수 있습니다. 이전 값이 품목마다 남아 있으므로 되돌리기는 백업 복구가 아니라 하나의 작업입니다.
계산대와 POS
결제 회로
상품과 재고
네트워크 관리
적립은 포인트가 아니라 신원 확인에서 시작합니다: 구매가 익명인 동안에는 프로그램이 다룰 것이 없습니다. 이 모듈의 과제는 계산대에서 몇 초 만에 영수증을 구매자와 잇고 줄을 세우지 않는 것입니다.
계산대에서의 신원 확인 방법: 바코드가 있는 플라스틱 카드, 전화번호, 모바일 앱의 QR 코드, 가상 카드. 방법은 매장의 형태에 맞춰 고릅니다: 줄이 긴 곳에서 전화번호를 손으로 입력하게 하는 것은 나쁜 선택입니다.
모듈이 할 수 있는 일:
적립 프로그램은 마케팅 리포트가 아니라 매장에서 살아갑니다. 요구를 들이미는 것은 계산대의 줄입니다:
숫자는 예시입니다. 세 번째 줄이 중요합니다: 포인트 결제 비율의 제한은 계산원의 판단이 아니라 규칙입니다. 그리고 다섯 번째도: 포인트는 실제로 돈으로 결제한 부분에 적립됩니다, 그러지 않으면 프로그램이 스스로에게 적립하기 시작합니다.
구매와 세그먼트 데이터는 적립을 분석, 그리고 아래의 AI 시나리오와 잇는 고리입니다: 제안은 데이터베이스 전체에 뿌리는 발송이 아니라 특정 구매자의 구매 이력 위에 세워질 때 의미가 있습니다.
돈과 상품을 다루는 매장에서는 책임이 서로 다른 사람들이 일합니다. 접근 권한은 비밀 유지가 아니라, 모든 동작에 작성자가 있게 하고, 일상적인 작업에는 상급자가 필요 없게 하되 위험한 작업은 조용히 이뤄지지 않게 하는 일입니다.
권한 모델은 이렇게 만들어졌습니다: 권한은 역할에 주고, 역할은 직원에게 배정하며, 직원은 지점에 연결합니다. 매장 쉰 곳의 네트워크에서 사람마다 개별 설정을 주는 일은 부여할 수도, 확인할 수도 없습니다.
동작 로그는 «혹시 몰라» 두는 보관함이 아닙니다. 실무 도구입니다: 다툼이 있는 구매, 근무조의 부족, 손님의 불만을 이 로그로 확인하고, 아래의 처리 관리 항목도 여기에서 데이터를 받습니다.
작업의 구성과 역할별 배분은 해당 네트워크에 맞춰 정합니다. 아래는 설정의 출발점이 되는 일반적인 뼈대입니다:
마지막 줄은 실수가 아닙니다. «전부 볼 수 있는» 권한은 가격을 바꾸는 권한만큼이나 조심스럽게 줍니다: 매장 점장은 자기 지점을 책임지고 자기 지점을 봅니다, 옆 매장이 아니라.
시스템은 부정행위를 자동으로 막지도, 판결을 내리지도 않습니다. 작업을 관찰할 수 있게 만들 뿐입니다: 규칙을 정하고, 규칙에서 벗어난 것을 하나하나 기록하고, 비슷한 사례를 모아 사람이 확인할 대기열에 놓습니다. 이것은 «모든 것을 잡아내는 안티프로드»가 아니라 관리의 회로입니다.
반품 비율은 계산원, 지점, 상품군, 시간대별로 계산합니다. 평소 수준에서 벗어나면 신호입니다: 손님 없는 반품, 근무조 끝 무렵의 반품, 같은 품목의 반복된 반품.
영수증 마감 전 취소와 품목 삭제는 정상적인 작업이지만, 특정 계산원의 빈도를 근무조와 지점의 수준과 비교합니다. 크게 치우치면 관찰 대상이 됩니다.
손으로 적용한 할인, 같은 손님이 살 때마다 붙는 할인, 근무조 끝 무렵 마진이 높은 품목에 붙는 할인. 사례마다 작성자, 근거, 금액과 함께 보관됩니다.
계산대에서 가격을 바꾸는 권한은 정상이 아니라 예외입니다. 그 권한을 준 곳에서는 사용할 때마다 이전 값과 새 값이 기록되고 공통 로그에 묻히지 않고 별도의 리포트로 갑니다.
업무의 특징: 평균 구매액, 현금 비율, 반품과 취소의 비율, 판매 없는 금전함 열림 횟수, 남의 근무조에서의 근무. 같은 계산원의 과거와, 같은 지점의 동료와 비교합니다.
시스템에 영수증이 없는 매입사 내역의 결제, 결제 처리가 없는 영수증, 영수증과 결제의 금액 불일치. 차이마다 금액, 시각, 계산대, 단말기와 함께 올립니다.
지점의 운영 시간 밖의 판매, 금액이 0인 영수증, 구성이 똑같이 반복되는 영수증, 판매 없는 금전함 열림, 남의 계정으로의 로그인.
의미 있는 작업 하나하나의 변경 불가능한 기록: 작성자, 시각, 근무 자리, 이전 값과 새 값. 운영 데이터와 따로 보관되므로 함께 고쳐지지 않습니다.
권한의 부여와 회수, 가격 규칙의 변경, 검증의 해제, 근무조의 수동 마감, 고객 데이터 내려받기 권한 — 따로 기록되어 월말이 아니라 즉시 담당자에게 갑니다.
| 신호 | 시스템이 아는 것 | 사람이 확인할 것 |
|---|---|---|
| 계산원의 반품 비율이 지점 평균의 세 배 | 근무조 동안 반품 14건, 그중 11건이 마지막 한 시간에, 모두 현금 | 카메라 기록, 손님의 존재 여부, 직원의 설명 |
| 수동 할인이 23번 적용됨 | 계산원 한 명, 비슷한 금액대, 서로 다른 상품군 | 할인의 근거, 지시의 유무, 같은 손님의 반복 여부 |
| 내역에는 결제가 있는데 시스템에 영수증이 없음 | 금액과 시각이 근무조와 맞지만 영수증이 없음 | 통신 장애인지 처리하지 않은 판매인지 — 계산대 로그로 |
| 금전함이 판매 없이 40번 열림 | 계산대 한 대, 근무조 하나, 3~5분 간격 | 잔돈 교환인지, 잠금장치의 기술 문제인지, 현금 출금인지 |
| 재고 조사: 한 카테고리에서만 부족 | 담배 상품군에서만 차이, 세 지점 연속 | 입고, 이동, 차감, 보관 장소 접근 |
시스템 화면 이미지: 숫자는 예시입니다. 어느 줄도 위반을 뜻하지 않습니다 — 숫자가 평소에서 벗어났으니 설명이 필요하다는 뜻일 뿐입니다. 차이는 근본적입니다: 규칙은 질문을 던지고, 답은 사람이 냅니다.
이 회로의 실질적인 의미는 속도에 있습니다. 회로가 없으면 차이는 사건이 일어나고 몇 달이 지난 재고 조사에서, 기록도 기억도 남지 않았을 때 드러납니다. 회로가 있으면 이상이 다음 날 보이고, 확인은 특정 영수증, 특정 근무조, 특정 작업으로 진행됩니다.
리테일의 분석은 «보기 좋은 그래프»가 아니라 네 가지 질문에 대한 답입니다: 얼마를 벌었는가, 정확히 무엇으로 벌었는가, 무엇이 방해하는가, 다음 주 발주를 어떻게 할 것인가. 나머지는 모두 파생입니다.
계산은 운영 데이터의 사본에서 하고 실서비스 데이터베이스에서 하지 않습니다: 1년치 무거운 리포트가 매장의 계산대를 느리게 해서는 안 됩니다.
시스템이 계산하는 것:
별도로 정기 리포트가 있습니다: 지점별 근무조·일일 리포트, 회계용 명세, 매입사와의 대사, 회계 시스템으로 보낼 데이터. 일정과 수신자가 정해져 있으므로 월말에 누가 기억해 낼 필요가 없습니다.

네트워크 리포트에서 가장 흔한 문제는 숫자가 없는 것이 아니라 한 지표에 서로 다른 숫자가 여럿 있는 것입니다. «반품 포함»과 «반품 제외» 매출, «영수증 기준»과 «구매자 기준» 평균 구매액, «정가 기준»과 «실제 할인 기준» 마진은 서로 다른 값을 내고, 그것을 두고 벌이는 논쟁이 분석 자체보다 많은 시간을 잡아먹습니다.
그래서 지표의 정의는 시스템에 한 번 정해 두고 모든 리포트가 함께 씁니다. 정의의 변경은 누군가의 표에서 수식을 고치는 일이 아니라 날짜가 있는 관리된 동작입니다.
시스템 화면 이미지: 숫자는 예시입니다. 타일의 순서는 우연이 아닙니다: 판매가 아니라 데이터를 보내지 않은 지점이 먼저 옵니다 — 그것이 없는 동안에는 아래의 어떤 비율도 불완전한 그림으로 계산된 것입니다.
소매 시스템이 회사의 유일한 시스템인 경우는 드뭅니다: 회계, 세무, 창고, 온라인 상점이 이미 돌아가고 있기 마련입니다. 연동이 필요한 이유는 «형식» 때문이 아니라, 같은 데이터를 두 번 입력하지 않고 시스템 사이에서 어긋나지 않게 하기 위해서입니다.
보통 품목 마스터, 공급처, 매입가는 그쪽이 소유하고, 판매와 소매가와 지점별 재고는 소매 시스템이 소유합니다. 목록마다 교환의 방향을 명시적으로 정합니다 — 그러지 않으면 «주인»이 둘이 되어 서로를 덮어쓰기 시작합니다.
지점별·법인별 매출, 상품 이동 문서, 차감 확인서, 반품과 카드 결제 데이터의 전송. 주기와 구성은 내보내기의 편의가 아니라 회계의 요구가 정합니다.
구매자, 세그먼트, 구매 이력, 포인트, 개인 맞춤 제안. 소매 시스템에서는 구매 사실이 나가고, CRM에서는 세그먼트와 캠페인이 들어와 계산대에서 구체적인 할인이나 제안이 됩니다.
네트워크에 물류센터가 있는 경우: 매장의 요청, 지점으로의 출고, 입고, 창고로의 반품. 두 짝이 서로 다른 시스템에 살더라도 이동은 여전히 두 짝으로 이뤄진 작업입니다.
공통 카탈로그와 가격, 직접 수령을 위한 재고 출처로서의 지점 재고, 매장에서 담은 주문, 계산대에서 처리하는 온라인 구매의 반품. 스토어프론트와 주문에 대한 자세한 설명은 다음 페이지에 있습니다 이커머스.
계산대와 단말기의 교환, 대사를 위한 처리 내역의 수신, 반품 상태. 구성은 단말기 모델과 매입사와의 계약이 정하며 사전 진단에서 확정합니다.
직원, 지점 배정, 근무 일정. 계산대의 근무조와 근태표의 근무조가 사람이 맞춰야 하는 두 개의 다른 기록이 아니게 됩니다.
제3자를 위한 문서화된 시스템 API와 외부 서비스의 연결: 발송, 메신저, 영수증과 알림 서비스, 제휴 프로그램. 형식은 버전으로 관리합니다 — 변경은 새 버전으로 나오고 이전 버전은 계속 작동합니다.
비동기, 간격을 늘려 가는 재전송, 수신 쪽의 멱등성, 본문과 결과가 담긴 메시지별 로그, 핵심 숫자의 정기 대사. 차이는 월 마감에서 발견되는 것이 아니라 처리해야 할 과제가 됩니다.
교환을 개발하기 전에 언제나 한 가지를 정합니다: 어떤 시스템이 어떤 목록을 소유하는가. 여기에 답이 없으면 연동은 서로를 덮어쓰는 순환이 되어 디버깅이 불가능해집니다.
소매 네트워크는 읽어 낼 수 있는 속도보다 빠르게 데이터를 쌓습니다: 품목과 시간대별 영수증, 지점별 재고, 상품 이동, 직원의 동작, 장비 이벤트. 여기서 AI는 별도의 제품이 아니라 이 데이터 위에 놓인 계층으로, 사람에게 시간이 부족한 질문에 답합니다.
모든 시나리오에서 구조는 같습니다: 데이터 → 분석 → 결과 → 행동. 마지막 고리가 없는 시나리오는 시연으로 남습니다.
실무 시나리오:
경계는 솔직합니다: 모델은 쌓인 이력 위에서 작동합니다. 판매가 품목과 시간대로 기록되지 않고 상품 이동이 나중에 처리되는 동안에는 예측할 것이 없습니다 — 먼저 회계 회로, 그다음 그 위의 분석입니다. 이 방향에 대한 자세한 설명은 다음 페이지에 있습니다 인공지능 도입.

네 번째 단계는 필수입니다. 사람을 거치지 않고 발주로 가는 추천은 모델의 오류를 실제 매입으로 바꿔 놓습니다 — 마지막 단계는 그 오류를 수정으로 바꿉니다.
매장의 일부 상품은 운전 조건이 있는 장비 안에 보관됩니다: 냉장 진열대, 냉동고, 창고의 저온실. 조건의 이탈은 상품 관리에 나타나지 않습니다 — 며칠 뒤 차감으로 드러날 뿐입니다.
그래서 리테일 회로에 장비 모니터링이 붙습니다: 같은 지점, 같은 담당자, 그리고 «이상은 사람에게 배정되고 기한을 가진다»는 같은 원칙.
매장에서 관찰 대상이 되는 것:
리테일과의 연결은 직접적입니다: 온도 이력은 감독 기관과 거래처 앞에서 보관 조건을 증명하고, 이상을 일찍 잡으면 차감이 줄어듭니다 — 즉 재고 조사의 부족과 같은 손실 리포트로 들어갑니다.

특정 장비에서 물리적으로 무엇을 읽어 낼 수 있는지는 그 컨트롤러에 달려 있습니다: 어떤 모델은 값과 오류를 밖으로 내주고, 어떤 모델은 외부 센서가 필요합니다. 이는 제조사 문서를 보고 사전 진단에서 확인합니다.
이 방향의 전체 설명 — 센서와 컨트롤러, 통신 회선, 서버, 단일 패널, 알림과 원격 제어 — 은 별도의 페이지에 있습니다 IoT 모니터링과 장비 관리.
구성은 과제에 맞춰 짭니다: 매장 하나에는 매트릭스와 지점 간 이동이 필요 없고, 매장 마흔 곳의 네트워크는 그것 없이 굴러가지 않습니다. 아래는 설정을 골라 담는 전체 목록입니다.
계산원 화면, 영수증 만들기, 스캐너와 저울 다루기, 결제, 문서 출력, 보류된 영수증, 오프라인 모드.
근무조의 개시와 마감, 중간과 최종 보고, 현금의 입금과 출금, 차이 계산.
결제 단말기와의 교환, 처리의 상태, 결제와 영수증의 대조, 환불, 끝나지 않은 처리의 확인, 대사.
영수증 번호로 하는 반품, 부분 반품, 이미 반품된 품목의 확인, 대금과 포인트의 반환, 환불 영수증.
품목, 바코드, 단위, 무게 상품, 카테고리, 공급처, 유통 규칙, 상태와 보관함.
지점 묶음별 상품 구색의 구성, 날짜가 있는 품목의 투입과 제외, 매트릭스 밖 판매의 관리.
가격 그룹, 마크업 규칙, 적용일이 있는 계획된 가격 조정, 최저 가격, 변경 이력.
적용 조건, 방식, 일정, 지점 범위, 한도, 병행 가능 여부, 코드의 생성과 사용 처리.
지점별·네트워크 전체의 재고, 이동 중 상품, 예약, 재고 부족 기준값, 움직이지 않는 품목.
공급처와 물류센터에서의 입고, 스캔, 거래명세서와의 대조, 차이의 기록.
한 작업의 두 짝으로서의 출고와 입고, 이동 중 상품, 닫히지 않은 이동의 관리.
파손, 손상, 유통기한, 내부 소비, 원래 입고를 참조하는 불량 반품.
전수와 부분 재고 조사, 스캔으로 하는 계수, 개수와 금액의 차이, 결과 승인.
매장 목록, 지점 묶음, 형태별 설정, 설정을 복사해 여는 새 지점.
네트워크의 단일 화면: 판매, 재고, 가격, 프로모션, 장비, 오류, 핵심 지표, 교환의 상태.
교환 큐, 적용일, 적용의 확인, 재전송, 로그와 대사.
구매자의 신원 확인, 포인트, 등급, 유효 기간, 세그먼트, 개인 맞춤 제안, 커뮤니케이션.
프로필, 개인정보 처리 동의, 구매 이력, 연락 채널, 중복의 병합.
역할과 권한, 지점 단위의 적용 범위, 상급자의 작업 승인, 동작 로그, 접근 권한 회수.
관찰 규칙, 확인 대기열, 반품·할인·취소 리포트, 중요 이벤트의 기록.
계산대, 단말기, 저울, 스캐너를 비롯한 기기를 근무 자리, 버전, 정비 이력과 함께.
온도, 문, 전원, 컨트롤러 오류, 통신 두절; 수신자와 대응 기한이 붙은 이벤트.
판매, 마진, 회전율, 반품, 손실, 프로모션의 효과, 직원의 업무, 자유로운 단면.
ERP, 회계, CRM, 창고, 온라인 상점, 외부 서비스와의 교환. API, 웹훅, 큐, 로그.
시스템을 네트워크 전체에 한꺼번에 띄우지는 않습니다. 아래 순서는 의존 관계를 따릅니다: 각 단계는 앞 단계에서 생긴 데이터에 기대고, 확산 전에 한 지점에서 검증합니다.
현재의 프로세스, 마스터 데이터, 지점의 장비, 데이터를 소유한 시스템, 세금 관련 요구. 결과물은 엔티티 도면, 연동 지도, 제약 목록입니다.
품목 마스터 이관, 바코드, 가격, 입고와 재고, 장비와 결제 단말기가 연결된 계산대 근무 자리. 한 지점에서 시작합니다.
중앙 패널, 상품 구색 매트릭스, 중앙에서 정하는 가격과 프로모션, 지점 간 이동, 동기화와 접근 권한. 나머지 매장을 연결합니다.
적립, 처리 관리, 분석, 장비 모니터링, 쌓인 이력 위의 AI 시나리오. 각 묶음은 측정 가능한 결과가 따르는 별도의 릴리스입니다.
지점이 몇 곳인지, 무엇이 이미 돌아가는지 — 계산대, 회계 시스템, 창고, 온라인 상점 — 그리고 매장에 어떤 장비가 있는지 적어 주세요. 프로세스를 살펴보고, 무엇을 옮길 수 있고 무엇을 새로 만들어야 하는지 짚어 드리며, 도입 순서를 제안하겠습니다.