Advertisement
Top Banner Ad(reader-top)

오픈 이틀 전, 결제창부터 꺼 버렸다

개발실 문을 열자 뜨거운 전자음이 먼저 밀려왔다.

정면의 빌드 서버 랙은 낮게 울고 있었고, 왼쪽 벽 테스트폰 선반에는 같은 로비 화면을 띄운 단말기들이 케이블에 매달려 있었다. 오른쪽 긴 책상에는 결제 모듈 담당자 둘이 컵라면과 영수증 사이에 노트북을 펼쳐 놓고 있었고, 맨 안쪽 유리창 아래 대형 모니터에는 운영 대시보드가 푸른빛으로 깜빡였다.

나는 회의실에서 들고 나온 계약서를 서버 옆 빈 책상 위에 올려놓았다.

“상점 결제 기능, 지금 바로 내립니다.”

말이 떨어지자 오른쪽 책상 끝에 앉아 있던 안경 쓴 남자가 의자째로 몸을 돌렸다.

“예? 대표님, 그거 내리면 오픈 빌드 다시 묶어야 합니다.”

“그래서요.”

“오픈 이틀 남았습니다.”

한도겸이 내 옆으로 다가왔다. 목소리는 눌렀지만 눈빛은 전혀 눌러지지 않았다.

“대표님. 방금 회의실에서 하신 말, 어떻게 아신 건지는 묻지 않겠습니다. 그런데 지금 결제창을 끄면 테스트 일정도 전부 밀립니다.”

나는 왼쪽 테스트폰 선반을 턱짓했다.

“결제 더미 요청, 몇 건까지 돌려 봤죠?”

결제 담당자가 입술을 말아 물었다.

“샌드박스로 천 건 단위까지만요.”

“삼천 건 넘기면요?”

대답이 끊겼다.

도겸이 대신 입을 열었다.

“롤백 큐가 밀립니다. 그래도 실서비스에서 그렇게 몰릴 확률은 낮습니다.”

“낮은 게 아니라 오픈 첫날엔 반드시 옵니다.”

나는 운영 대시보드 앞 의자를 끌어당겨 앉았다.

“튜토리얼 끝나고 첫 패키지 노출되죠?”

“네.”

“새벽 광고 집행, 오전 스트리머 체험분 공개, 첫 결제 패키지 노출. 이 셋이 겹치면 서버는 유저 행동보다 결제 확인부터 먹습니다.”

안경 쓴 담당자가 굳은 목소리로 물었다.

“그걸 어떻게 그렇게 확신하십니까?”

나는 잠깐 말을 골랐다.

미래 장애 보고서를 봤다고 해 봐야, 여기서 믿을 사람은 없었다.

“망하는 오픈을 많이 봤으니까.”

나는 바로 키보드를 끌어왔다.

“결제 완료 패킷 들어오면 검증 플래그 어디서 세웁니까?”

담당자가 얼떨결에 화면을 돌렸다. 오른쪽 상단 결제 큐, 가운데 인벤토리 지급 함수, 아래 복구 스크립트. 급한 사람이 덧댄 흔적이 군데군데 남아 있었다.

나는 가운데 줄을 짚었다.

“여기서 중복 체크 안 하고 바로 지급 태우네요.”

도겸이 미간을 좁혔다.

“원래는 앞단에서 거르기로 했습니다.”

“그 앞단이 지금 빠졌죠.”

결제 담당자의 목이 움찔했다.

“어제 외주 쪽 빌드 합치면서 빠졌습니다. 급해서….”

말끝이 꺼졌다.

나는 자리에서 일어났다.

“좋습니다. 지금 재현합시다. 테스트폰 열 대. 결제 요청 루프 돌리고, 취소 패킷은 일부러 두 번 넣으세요. QA는 왼쪽 선반에서 빈 계정만 잡고, 해원 씨는 여기 남아서 오류 뜨는 순간 화면 캡처 떠 주세요.”

벽 쪽에 기대 있던 윤해원이 팔짱을 풀었다.

“저도요?”

“유저한테 보여 줄 사과문보다 팀이 먼저 봐야 할 증거가 필요합니다.”

그녀는 잠깐 나를 보다 말없이 태블릿을 들었다.

그 순간 개발실의 공기가 바뀌었다.

못 믿겠다는 표정은 남아 있었지만 손은 다 움직였다. 케이블이 흔들리고, 키보드 두드리는 소리가 벽의 화이트보드까지 튕겼다. 누군가는 서버 로그를 열었고, 누군가는 테스트폰에 가상 결제를 반복 입력했다.

3분 뒤, 운영 모니터 오른쪽 아래에 빨간 경고가 떴다.

[중복 거래 감지 실패]

그 밑으로 인벤토리 지급 수치가 한 번 튀었다.

같은 계정에 같은 패키지가 두 번 들어갔다.

“와….”

결제 담당자가 욕 대신 숨을 삼켰다.

도겸이 바로 다른 창을 열었다. 문제는 거기서 끝나지 않았다. 롤백 명령을 넣자 이미 지급된 재화 일부가 회수되지 않았고, 계정 상태만 꼬인 채 재검증 요청이 대기열에 쌓이기 시작했다.

운영 모니터 좌측 상단의 응답 속도 수치가 42ms에서 311ms까지 튀는 순간, 개발실 안에 있던 누구도 더 이상 내 말을 미신 취급하지 못했다.

나는 머릿속에서 그 문장을 다시 읽었다.

결제 패킷 중복 처리.

인벤토리 롤백 실패.

오픈 3시간 후 붕괴.

순서까지 똑같았다.

도겸이 이번에는 나를 정면으로 봤다.

“대표님 말이 맞았습니다.”

“아직 아닙니다.”

나는 운영 모니터를 가리켰다.

“이건 열 대로 돌린 겁니다. 오픈 날엔 몇 천 명이 동시에 밟아요. 지금 필요한 건 변명이 아니라 구조 변경입니다.”

“어떻게 바꾸죠?”

“상점 임시 비활성화. 결제 승인과 지급 분리. 중복 체크 서버단 이중 적용. 그리고 롤백은 회수가 아니라 지급 보류 구조로 바꿉니다.”

결제 담당자가 허탈하게 웃었다.

“오늘 밤 그냥 끝났네요.”

“원래는 망하는 밤이었어요.”

나는 곧장 화이트보드 앞으로 가서 마커를 들었다.

정면에는 `오픈 빌드`, 왼쪽에는 `결제 승인`, 오른쪽에는 `재화 지급`, 아래에는 `복구`라고 적었다. 그리고 승인과 지급 사이를 길게 떼어 놓고 선을 그었다.

“이 선 하나가 지금 회사 생존선입니다. 승인됐다고 바로 주지 마세요. 검증 통과하고, 중복 아니고, 재고 꼬임 없고, 로그 남은 뒤에 지급합니다.”

도겸이 화이트보드 쪽으로 걸어왔다.

“그럼 상점 UX가 느려질 겁니다.”

“0.8초 느린 결제창은 유저가 욕하고 끝납니다. 오픈 3시간 만에 무너진 서버는 회사가 끝나요.”

해원이 내 오른쪽에 서서 태블릿을 들어 보였다. 오류 캡처 세 장이 차례로 정리돼 있었다.

“필요한 장면은 다 땄어요.”

그녀가 낮게 말했다.

“적어도 사람 자르러 온 대표는 아니군요.”

나는 잠깐 그녀를 봤다.

“사람 자를 돈도 없습니다.”

한 박자 늦게, 개발실 여기저기서 짧은 웃음이 새어 나왔다.

처음으로 이 방 안의 긴장이 아주 조금 풀렸다.

“대신,”

나는 다시 화이트보드에 마커를 찍었다.

“오늘 밤 안에 이거 못 고치면 다 같이 실직입니다.”

웃음은 바로 사라졌고, 대신 손이 더 빨라졌다.

도겸은 결제 담당자를 데리고 서버단 검증 로직을 뜯기 시작했고, QA는 빈 계정 스크립트를 다시 돌렸다. 해원은 오류 화면과 상점 진입 동선을 같이 캡처하면서 UI상 혼동 요소까지 표시했다.

그제야 팀 같았다.

나는 운영 대시보드 창을 넘겼다. 그 순간, 시야 오른쪽에 반투명 문서가 다시 겹쳐 떴다.

아까의 긴급 장애 보고서였다.

하지만 마지막 줄이 바뀌어 있었다.

[결제 장애 대형 확산 가능성 낮아짐]

대신 그 아래에 새로운 항목이 추가됐다.

[신규 위험 예측]

[튜토리얼 이탈률 68% / 1일차 잔존율 19%]

[원인 추정: 폐기된 궤도 기록 시스템 비활성화]

나는 시선을 들었다.

운영 모니터 왼쪽 아래, 아무도 눌러 보지 않는 회색 아이콘 하나가 떠 있었다.

`궤도 기록`.

Project Orbit 초기 빌드에서만 남아 있다는, 출시 직전에 잘려 나간 핵심 시스템.

나는 천천히 그 이름을 읽었다.

결제창은 막았다.

대신, 이 게임이 재미없어질 미래가 방금 새로 도착했다.

작가의 말

연재 중

Advertisement
Bottom Banner Ad(reader-bottom)

댓글 (0)

댓글을 작성하려면 로그인해주세요.

아직 댓글이 없습니다. 첫 댓글을 작성해보세요!