2018년 4월 6일 삼성증권은 우리사주 조합원에게 주당 1,000원을 현금으로 배당할 예정이었다. 전산 입력 과정에서 ‘원’ 대신 ‘주’가 들어갔다. 직원 계좌에는 1주당 1,000주의 삼성증권 주식이 찍혔다. 회사가 발행하지 않은 주식이었다. 일부 직원은 화면에 나타난 주식을 시장에서 팔았다.
오류는 한 번의 입력으로 시작됐다. 매매가 이루어지기까지는 여러 통제선이 더 있었다. 발행주식 수를 넘는 입고를 막는 장치, 입력과 승인을 나누는 절차, 비정상 잔고를 찾는 대사, 오류 주식의 매도를 제한하는 시스템이 차례로 작동할 수 있었다. 어느 선도 제때 멈추지 못했다. 이 사건은 ‘0을 잘못 붙인 실수’가 아니라 실수가 시장거래가 되도록 내버려둔 통제의 문제였다.
화면의 잔고는 무엇을 뜻하는가
주식은 종이 증서가 아니라 여러 장부에 기록된다. 발행회사는 정관과 주주총회·이사회 결의를 거쳐 주식을 발행한다. 한국예탁결제원은 예탁된 주식과 권리를 관리한다. 증권사는 고객계좌부에 각 고객의 보유수량을 기록한다. 정상이라면 발행된 주식, 예탁된 주식, 증권사 장부, 고객계좌의 합계가 맞아야 한다.
우리사주 배당도 이 장부 체계 안에서 처리된다. 현금배당이면 돈이 계좌로 들어가야 한다. 주식배당이면 회사가 적법하게 발행한 주식 수와 배정비율이 확인돼야 한다. 삼성증권의 입력 오류는 현금 단위와 주식 단위를 바꾸었다. 전산은 입력값을 명령으로 받아들였고 수십억 주에 이르는 비정상 잔고를 직원 계좌에 표시했다. 당시 회사의 실제 발행주식 수와 비교하면 즉시 이상을 알 수 있는 규모였다.
장부에 잘못 찍힌 숫자라도 주문시스템이 매도 가능 수량으로 인정하면 시장에는 정상 주문처럼 들어간다. 매수자는 상대방 주식이 존재하는지 매번 확인하지 않는다. 거래소와 결제기관, 증권사의 장부가 맞을 것이라는 믿음 위에서 체결한다. 그래서 증권사의 계좌부 정확성은 한 회사의 내부 업무가 아니다. 시장 인프라의 일부다.
사건 당일 일부 직원이 매도 주문을 내면서 주가가 급락하고 거래량이 급증했다. 팔린 주식은 결제일까지 실제 주식으로 채워야 했다. 회사는 시장에서 주식을 매수하고 대차하는 방식 등으로 결제 수량을 마련해야 했다. 입력 한 번이 회사의 손실, 정상 주주의 가격 손실, 시장 전체의 신뢰 비용으로 번졌다.
몇 분 동안의 선택
오류 주식을 계좌에서 본 직원들의 행동은 같지 않았다. 다수는 거래하지 않았다. 일부는 매도했다. 개별 직원에게는 존재하지 않는 주식임을 알았는지, 매도 의사와 실행이 있었는지에 따라 형사·징계 책임이 문제 됐다. 회사에는 직원의 선택과 별개로 왜 매도 가능한 상태가 되었는지를 묻는 내부통제 책임이 남았다.
개인의 행위와 조직의 실패를 섞으면 두 책임 모두 흐려진다. 직원이 고의로 팔았다는 사실이 회사 시스템의 결함을 없애지 않는다. 회사의 통제가 부실했다는 이유로 직원의 매도 선택이 자동으로 면책되는 것도 아니다. 금융당국은 회사의 전산·내부통제와 고객보호를 검사해 제재했고, 회사는 관련 직원에 대한 징계와 투자자 피해 보상을 진행했다. 형사절차는 개별 매도자에게 적용되는 구성요건을 따로 판단했다.
이 사건을 설명할 때 ‘담당 직원 한 명의 실수’에 머무르면 중요한 것이 빠진다. 대량 입력에는 승인자가 필요했는가. 현금배당과 주식배당의 입력화면이 충분히 구분됐는가. 발행주식 총수보다 큰 수량을 입력할 때 경고만 떴는가, 아예 처리를 막았는가. 입고 뒤 고객계좌 합계와 예탁잔고를 실시간으로 대사했는가. 사고 통보 뒤 주문 차단까지 얼마나 걸렸는가. 통제는 사람의 주의를 요구하는 문구가 아니라 잘못된 거래를 멈추는 기능이어야 한다.
금융회사에서 ‘팻 핑거(fat finger)’는 키를 잘못 누르는 입력 오류를 뜻한다. 어느 조직에서도 실수는 생긴다. 좋은 시스템은 실수를 없다고 가정하지 않는다. 값의 범위를 제한하고, 단위를 분리하고, 두 사람이 확인하고, 이상값을 차단한다. 실수가 발생해도 고객과 시장으로 나가기 전에 멈추게 한다.
네 겹의 통제
첫 번째 통제는 입력 전이다. 주당 배당금과 대상 주식 수를 곱해 총액이 이사회 결의와 일치하는지 자동 확인할 수 있다. 현금과 주식의 입력 메뉴를 분리하고, 주식배당은 신주 발행 근거와 예탁 확인이 없으면 진행되지 않게 해야 한다.
두 번째는 승인 단계다. 입력자와 승인자를 나누는 것만으로 충분하지 않다. 승인 화면에 결과를 이해할 수 있는 단위로 보여줘야 한다. ‘1,000’이라는 숫자만 제시하면 원인지 주인지 놓칠 수 있다. 처리 후 총 입고수량과 발행주식 총수의 비율을 함께 보여주면 비정상성을 바로 볼 수 있다.
세 번째는 입고 뒤 대사다. 고객계좌에 기록된 주식 합계가 예탁잔고를 넘으면 주문 가능 수량에서 제외해야 한다. 장부 차이는 다음 날 찾아도 되는 회계오류가 아니다. 매매와 결제에 연결되는 증권 수량은 실시간 차단이 필요하다.
네 번째는 사고 대응이다. 오류를 인지한 순간 관련 계좌의 주문을 막고 거래소·예탁결제원과 공유해야 한다. 이미 나간 주문은 취소 가능 여부를 확인한다. 시장 공지와 피해 기준도 준비해야 한다. 사고를 숨기는 데 쓴 10분은 가격과 거래량을 더 바꾼다.
다섯 번째 통제는 임직원 계좌의 행동 규칙이다. 회사 시스템 오류로 비정상 잔고가 생겼을 때 임직원이 임의로 처분하지 못하도록 내부규정에 명시하고, 비정상 대량 입고에는 주문 잠금이 자동으로 걸려야 한다. 윤리교육만으로 순간의 유혹을 통제하기 어렵다. 특히 자기 회사 주식을 다루는 임직원 계좌에는 미공개정보와 이해상충 규제가 함께 적용된다.
사고를 ‘전산사고’라고 부르면 사람이 한 결정이 가려질 수 있다. 전산은 누군가 정한 업무규칙을 빠르게 실행한다. 배당 단위를 같은 입력칸에 둔 설계, 발행주식 총수 검증을 생략한 요구사항, 경고를 무시해도 진행되는 승인 방식은 모두 사람의 결정이다. 개발자 한 명의 코드보다 업무부서·준법·감사·경영진이 위험을 어떻게 나눴는지를 봐야 한다.
대사(reconciliation)는 장부가 맞는지 비교하는 일이다. 금융회사는 매일 수많은 계좌를 대사한다. 그러나 대사가 다음 영업일에 이뤄지면 당일 매매에는 늦다. 현금 잔액처럼 결제 전까지 조정 가능한 항목과 즉시 주문 가능 수량으로 쓰이는 주식 잔고를 같은 주기로 확인할 수 없다. 위험이 시장에 전달되는 속도에 맞춰 통제 속도도 달라져야 한다.
보상에서도 차이가 생긴다. 잘못 입고된 주식을 산 매수자는 정상적으로 결제를 기대한다. 사고 시간대에 주식을 팔았거나 보유한 기존 주주는 가격 하락의 영향을 받는다. 직접 거래손실과 시장가격 변동 손실의 인과관계는 같지 않아 배상 범위를 정하기 어렵다. 사후 배상만으로는 충분하지 않다. 결제 신뢰를 지키는 비용은 회사가 부담하되 시장 전체 가격손실은 예방 통제가 더 현실적인 보호수단이다.
사건 뒤 금융당국과 업계는 주식 입출고 시스템, 대량 착오입력 방지, 발행주식 수 대사, 임직원 계좌 통제를 강화했다. 제도가 바뀌어도 질문은 남는다. 통제가 문서에만 있는지 실제 주문을 막는지, 외주·노후 시스템 사이의 연결에도 같은 기준이 적용되는지 확인해야 한다. 새로운 상품과 소수점 거래가 늘면 장부의 단위는 더 복잡해진다.
운영복원력은 사고를 한 번도 내지 않는 능력만을 뜻하지 않는다. 오류를 발견하고 확산을 막고 정상 장부를 복구하며 고객에게 설명하는 능력까지 포함한다. 핵심 시스템마다 어느 시점의 장부로 되돌릴 수 있는지, 잘못된 거래와 정상 거래를 분리할 수 있는지, 거래소와 예탁결제원에 같은 사고번호로 자료를 전달할 수 있는지 연습해야 한다.
외주 개발과 패키지 시스템을 사용해도 책임은 증권사에 남는다. 업무부서가 요구사항을 만들고 정보기술 부서가 구현하며 준법·감사가 통제를 시험해야 한다. 운영환경에 반영하기 전에는 발행주식 수의 수십 배, 음수 수량, 통화와 증권 단위의 혼동 같은 극단값을 넣어봐야 한다. 평상시 자료만으로 시험하면 평상시 오류만 잡을 수 있다.
사고 징후를 알린 직원에게 책임을 먼저 묻는 문화도 위험하다. 오류를 낸 사람과 오류를 숨긴 사람, 오류를 이용한 사람을 구분해야 한다. 신속한 보고를 인사 불이익과 연결하면 초기 몇 분이 사라진다. 보고자는 보호하되 거래를 시도한 계좌는 즉시 보존하고 조사해야 한다. 사람을 보호하는 절차와 증거를 보전하는 절차는 함께 갈 수 있다.
시장에서 보이지 않는 일
일반 투자자는 매수 버튼을 누를 때 상대방 계좌의 주식이 적법하게 존재하는지 확인할 수 없다. 확인할 필요가 없도록 만든 것이 증권시장 인프라다. 발행회사, 예탁결제원, 거래소, 증권사가 각 장부를 맞추고 결제를 보증한다. 이 믿음이 흔들리면 모든 투자자가 거래 상대방의 잔고를 의심해야 하고 시장비용은 크게 늘어난다.
삼성증권 직원 계좌에 나타난 숫자는 몇 시간 뒤 정정됐다. 회사는 결제와 보상에 필요한 비용을 부담했다. 그러나 정상 주식을 보유한 투자자는 당일 가격 급락을 화면에서 먼저 겪었다. 팔지 않았더라도 시장이 기본 장부를 제대로 관리하는지 의심하게 됐다. 신뢰의 손실은 손해배상표에 모두 잡히지 않는다.
오류를 본 직원에게는 몇 분의 선택이 있었다. 시스템에는 그 선택을 시장으로 내보내기 전에 막을 기회가 여러 번 있었다. 유령주식은 사라졌지만, 비어 있던 통제의 자리는 오래 보였다.