KB증권, 인범 TV 시스템 오류 사태, 무엇이 문제였을까~? 개발자의 시선

     

목차

     

     

    서론

    유튜브 알고리즘에 의해 어쩌다가 인범 TV 쇼츠가 떴는데, 내용이 KB증권 고소한다는 내용이었다. 무슨 내용인가 영상을 시청했는데, 3월 1일 23시 59분경에 해외선물 주문을 냈는데 '시스템 작업으로 인하여 업무가 잠시 중단되고 있습니다.' 에러가 발생한 것이다. 그 에러를 딱 봤을 때, "와 개발자 X 됐다.."라고 생각이 들었다. ㅋㅋㅋ 

     

    여기서 문제는 23시 59분이 점검시간도 아니었고, 점검공지도 없었고, 거래가능시간이었다는 것이다. 거래가능 시간에 떡하니 오류가 나버리니, 이건 금감원에서 가만히 않있을것같은데..? 

     

    그 오류가 왜 났는지 나름 증권사 개발자 출신으로서 상황을 파악해 본것을 정리해 본다.

     

     

    오류가 난 이유

    일단 오류가 난 이유는 정확하지 않으나, 메시지를 보면  '시스템 작업으로 인하여 업무가 잠시 중단되고 있습니다.'라고 나오기 때문에, 시스템 작업에 의한 오류라고 확인할 수 있다. 사실 명확히 따지면 오류는 아니고 시스템 점검 중이니 아무것도 하지 말라는 예외이다. 그럼 이 예외처리를 고객한테 알려야 하는 의무가 있는데 하지 않은 걸 보면, 해외선물 주문 서비스가 의도하지 않게 이 점검시간에 걸리게 된 것이라고 추측된다.

     

    ????

     

     

    그럼 이 메시지가 어디서 온 것일까? 어떤 시스템 오류인 걸까? 

    내가 가장 처음 생각했던 오류는 HTS 클라이언트 문제이다. (즉 설치돼있는 HTS가 뭔가 오류로 인해 에러를 뱉었다.)

     

    가능성 1. HTS 클라이언트가 오작동

    컴퓨터에 설치된 HTS클라이언트의 오류라고 생각한 이유는 3월 5일 인범 TV에 올라온 KB증권 차장과의 통화 내용 때문이다. 거기서 KB증권 차장은 아래와 같이 말했다.

     

    통화내용

     

    - 그 해당 주문 창에 있어서 그게 뭐라고 해야 할까요? 그.. 일자 확인을 하는 그런.. 프로세스, 절차가 있습니다. 물론 CME거래소는 영업일이 뭐라고 해야.. 거래일이 오전 6시 이런 식으로 미국을 따라가지 않습니까? 아무래도 한국매체 같은 경우 한국시간을 따라가게 되거든요. 네 근데 아마 그 시간대 그 주문창이 주문과는 상관없이 그런 일자를 이식하는 그런 전산작업이 뒤따르면서 돌았던 것 같아요...

     

    증권사 프로그램의 경우 각 프로그램 상에서 현재시간을 체크해서 장시간을 계산하는 로직이 담겨있다. 통화내용에서 '일자 확인을 하는 그런.. 프로세스, 절차'가 바로 그것이다. 장시간이 거의 매일 동일한 시간이기는 하나, 휴장일도 있고 순연돼서 1시간 빨라지거나 1시간 느려지거나 하는 경우도 있기 때문에, HTS에서는 장시간을 정확히 알기 위해 서버에 장시간을 조회해서 내려받게 된다. 이 작업이 보통 한국 같은 경우 장시작 전 (새벽 5~6시)에 하게 되는데 이걸 00시 전에 하도록 프로그래밍되어있는 건가?라는 추측도 든다. 만약 이 작업이 실행되면 찰나의 순간(프로그램에 서버에서 받은 장시간을 업데이트하는 순간)에 장시간을 확인할 수 없어 주문이 나가지 않는 에러가 발생할 수 있기 때문이다. 

     

    이런 오류가 발생할 수 있는 이유도 통화내용에 나오는데, '한국매체의 경우 한국시간을 따른다'라는 내용은 한국에서 HTS를 이용하면 PC시간도 한국이고 하다 보니 컴퓨터에 시간을 이용해 주문시간을 체크하는 경우도 있는데, 이때 뭔가 로직이 꼬여서 잠깐의 주문이 들어갈 수 없는 시간이 될 수 있다. 이렇게 장시간을 계산하는 작업을 통화에서는 '주문과는 상관없이 그런 일자를 이식하는 그런 전산작업'이라고 표현한 것이다.

     

    요약하면 "해외시장이지만 HTS가 한국시간으로 장시간을 인지하다 보니 주문가능한 시간을 계산하다가 버그로 인해 주문이 안 나갔다"라는 의미다.

     

    이렇게 요약한다고 이게 충분히 발생가능한, 막지 못하는 타당한 오류라는 건 아니다. 이건 그냥 잘 못 만든 거다 ㅋㅋ

    보통 증권사 앱의 경우 시간계산을 PC나 스마트폰 시간을 쓰지 않고 서버에서 내려주는 시간을 사용하게 만들기 때문에 HTS자체적으로 시간을 잘 못 계산할 수는 없을 것이다.

     

    아무튼 뭔가 HTS의 문제로 에러가 발생했다고 생각했는데 인범 TV에 올라온 로그파일을 보니 생각이 또 바뀌게 되었다.

     

     

     

    가능성 2. 주문은 서버까지 들어갔고, 서버에서 오류가 났다.

    인범 TV KB증권 답변 쇼츠를 보면 KB증권 측에서 제공한 로그가 있는데, TR로그라고 해서 증권사에서 많이 사용하는 익숙한 로그 형태이다.

    익숙한 증권사 로그

     

    일단 이렇게 로그파일을 보냈다는 건 3월 5일 통화내용 중 매체에서 시간을 잘못 계산했다는 내용은 구라라는 것이 된다. 매체에서 주문시간을 잘 못 계산했다면 아예 서버로 주문을 보내지 않았기 때문에 로그가 남으면 안 된다. 시스템에 대해 잘 알지 못하면 로그를 보낸다고 해서 예전에 했던 얘기가 거짓말이라고 판단할 수 없으니 그냥 로그를 보내준 것 같다 ㅎㅎ

     

    로그를 보면 '로그일시', 'TR서비스명', 'IO' 3가지로 분류된다. IO라는 건 Input/Output이라고 해서 HTS에서 서버로 전송한 데이터(Input)와 서버에서 HTS로 전송한 데이터(Output)이다. 데이터를 가린 건 저기에 계좌번호나 id 같은 개인정보, 매매가 등 개인정보들이 담겨있기 때문이다.

     

    여기서 봐야 하는 건 IO인데, "시스템 작업으로 인하여 업무가 잠시 중단.."이 있는 거 보면 서버에서 HTS로 에러메시지를 보내주고 HTS는 그냥 팝업만 띄웠다는 것이다. 즉 HTS가 시간 계산 잘못한 게 아니라 서버에서 애초에 해당 시간에 주문을 처리 못하고 있다는 것이다.

     

    요약하면, HTS에서는 정상적으로 주문을 냈고, 받아주는 서버에서 처리하지 못하고 에러가 발생한 것이다.

     

     

    흔적이 있다 없다~? 밝혀지는 의문점

    KB증권과 인범 TV 통화내용을 보면 몇 가지 의문점이 있다.

     

    먼저 인범 TV가 사고 발생 직후 KB증권에 전화했을 때는 "스탑주문을 내신 흔적이 없다"라고 말했다.

    흔적이 없어서..

     

    로그가 남아있다고 했는데 흔적이 없다는 건 무슨 말일까~? 이건 KB증권과 통화내용 중 더 자세한 내용을 들을 수 있다.

     

     

    통화내용을 보면 로그가 별도로 2가지 존재하고, 프론트 데스크 직원이 볼 수 있는 로그와 볼 수 없는 로그라고 말한다. 아마도 프론트 데스크 직원이 볼 수 있는 로그는 '주문을 처리한 로그' 일 것이다. 

     

    위 로그파일을 보면 응답으로 "시스템 작업으로 인하여 업무가 잠시 중단.."이라는 에러가 나갔다. 즉 주문 처리를 하다가 중간에 멈추고 에러를 발생했다는 소리다. 이 경우 주문은 성공도 취소도 아닌 에러상태이기 때문에 '주문을 처리한 로그'에는 남지 않는다. 그래서 고객센터나 프론트 데스크 직원들은 아무리 검색해도 주문을 한 흔적이 보이지 않는다.

     

    그럼 다른 로그는 무엇인가? 바로 '전체 로그'다. 전체 로그는 성공이든 실패든 에러든 모든 걸 남긴다. 보통 개발자들이 많이 보는데 네트워크 에러나 데이터 에러로 인해 발생하는 것들은 굳이 업무용 화면에 노출할 필요가 없으니 생략하게 된다. 이번 경우도 굳이 에러가 난 로그까지 '주문 처리 로그'에 담지 않았기 때문에 고객센터나 프론트 데스크에서 확인하는 업무용 프로그램에서는 조회가 안 됐던 것 같다. 따라서 담당자한테 전화 걸어도 '주문 없는데요~?'라는 반응이 오게 된 것이다.

     

     

    근데 왜 이런 에러가 났을까? 이번에만 발생한 걸까?

    생각해 보면 이상한 게, 23시 59분부터 1분간 점검시간이 원래 있었다면, 더 많은 사람들이 피해를 보지 않았을까?라는 의문점이다. 여기에는 몇 가지 추측이 있다.

     

    추측 1. 오픈한 지 별로 안돼서

    검색해 보면 해외선물 서버 조건 등록(해외선물 클릭주문) 서비스는 24년 1월에 오픈했다. 따라서 오픈한 지 약 2개월밖에 안됬기 때문에 원래도 해당 시간 점검이 있었는데, 어쩌다가 인범 tv에 걸려서 이슈가 된 것이다.

     

     

    추측 2. 다른 기능 적용하다가 오류가 나서

    성능개선이나 다른 추가기능을 적용하기 위해서 해당 서비스를 수정하다가, 모르고 다른 서비스 점검시간을 체크하는 코드를 사용해서 일시적으로 오류가 발생한 것이다. 1~2월에는 잘 되다가 3월에 뭔가 개선하려고 업데이트했는데, 하필이면 버그가 있는 코드를 추가해 가지고 잠깐만 에러가 발생한 것이다. 

     

    추측 3. 장시간 운영 실수해서

    해당 사건이 일어난 일이 3월 1일 (휴일)이라는 점을 생각했을 때, 한국은 휴장일이지만 미장은 휴장일이 아닌데 운영하는 사람이 장 운영시간 세팅을 잘못해서 발생한 해프닝일 수 있다. 실제로 증권사는 장운영 시간을 수동으로 관리하는데, 매년 선거일이나 수능일과 같은 장시간 변동을 입력해 놓고 해당 스케줄로 시스템이 운영된다. 3월 1일이 한국만 휴장일인걸 고려했을 때 충분히 실수가 발생할 수 있는 날이다.

     

     

     

    결론

    실수든, 기술적 오류든, 원래 시스템이 그랬던 것이든 증권이 사용자에게 불편함을 준 것은 변함없다. 이제 적절하게 대응하는 것만 남아있는데, 소비자 입장에서 가장 깔끔해 보이는 건 증권사 측에서 해당 서비스 오픈 후 해당 에러가 발생한 건들을 모두 모아서 보상하는 게 가장 좋아 보이기는 한다. 증권사 입장에서는 굳이 민원 들어온 것도 아닌 것들에 대해 먼저 보상해 준다는 게 손해를 보는 것이긴 하나, 기업 이미지가 안 좋아 보이는 것보다는 좋지 않을까?

     

    KB증권 담당자분이 통화하는 것을 보니, 증권사에 있을 때 일하던 기억이 새록새록 나서 좀 안쓰럽다. 해당 기능 개발한 개발자들도 ㅎㄷㄷ 하고 있을 것을 생각하니,, 금융권 개발자는 역시 힘든 것 같다.

    반응형

    댓글

    Designed by JB FACTORY