미래 그래프가 다시 뜨자, 서버가 먼저 비명을 질렀다
새벽 여섯 시, 네뷸라 랩스 운영실은 밤보다 더 선명한 빛으로 끓고 있었다.
정면 벽면을 가득 채운 대시보드에는 사전예약 반등 그래프가 아직 푸른 기세를 잃지 않고 살아 있었고, 왼쪽 모니터에는 체험 빌드 유입 수치가 분 단위로 뛰고 있었다. 유리벽 밖 복도에서는 서버실 냉각팬 소리가 낮게 깔렸고, 오른쪽 세로 스크린 한 장만 얼음장처럼 차갑게 빛났다.
조금 전 다시 떠오른 미래 문서였다.
`테스트 첫날 11:07 대기열 3,200명`
`첫 이탈 41%`
`QA 인증 누락 빌드 혼선 발생 가능`
나는 한동안 그 세 줄에서 눈을 떼지 못했다.
몇 시간 전까지만 해도 저 화면에는 `광고 전쟁 패배`가 적혀 있었다. 사전예약 침체, 초기 유입 부족, 출시 관심도 하락. 분명 그렇게 끝나기로 되어 있던 미래였다.
그런데 우리가 광고를 고치고, 게임의 얼굴과 첫 체험을 맞추고, 숫자를 다시 끌어올리자 문서 자체가 갈아입고 돌아왔다.
좋은 소식은 축하로 끝나지 않았다.
좋은 소식은 더 큰 사고 시나리오를 데리고 왔다.
한도겸이 정면 대시보드를 확대했다. 밤을 새운 사람 특유의 거칠어진 목소리였지만, 손끝만큼은 정확했다.
“재계산 끝났습니다. 기존 테스트 구조는 예상 동시 접속 4,800명 기준으로 짜 둔 거예요. 지금 체험 유입 추세와 사전예약 반등 폭 그대로면 1만 8천까지 봐야 합니다. 이대로 열면 로비부터 막힙니다.”
오민서가 바로 태블릿을 탁 소리 나게 내려놓았다.
“서버만 문제가 아니에요. QA 인증 다시 돌아야 하고, 플랫폼 쪽 일정 설명도 다시 해야 해요. 지금 구조 바꾸면 초청 메일, 문의 대응, 운영 공지까지 전부 다시 짜야 합니다.”
운영실 중앙 테이블 위에는 냉식 커피 캔, 단말기, 로그 출력물, 체크리스트가 층층이 쌓여 있었다. 복도 너머 QA실에선 충전기에 매달린 테스트폰들이 미약한 진동음을 내며 깜빡였다. 누구 하나 입으로 말하지 않았지만, 다들 같은 걸 알고 있었다.
숫자는 살아났는데, 회사는 더 위험해졌다.
나는 미래 문서 마지막 줄에 다시 시선을 고정했다.
`QA 인증 누락 빌드 혼선`
대기열은 버틸 수도 있다.
느려져도 유저는 잠깐은 참아 준다.
하지만 빌드가 섞이고, 인증 누락이 터지고, 어떤 유저는 다른 버전을 받아 접속한다면 그건 단순 장애가 아니라 신뢰 붕괴였다. 테스트 첫날부터 회사 전체가 허둥대는 장면을 시장에 공개하는 셈이었다.
운영실 문이 열리고 윤해원이 들어왔다. 검은 재킷 어깨에는 밤샘 구김이 남아 있었고, 손에는 방금 뽑은 시안 몇 장이 들려 있었다. 눈 밑은 짙었지만 시선은 또렷했다.
“좋은 쪽으로 숫자 튄 거 아니었어요?”
한도겸이 씁쓸하게 웃었다.
“좋은 쪽으로 튀어서 더 위험해졌죠.”
나는 의자를 돌려 세 사람을 차례로 봤다.
“정리합시다.”
운영실 안이 조금 조용해졌다.
“지금 우리 문제는 세 개예요. 유입이 너무 빨리 늘었다. QA 범위가 감당 안 된다. 그대로 열면 테스트 첫날 대기열과 인증 혼선이 같이 난다.”
오민서가 바로 숫자를 보탰다.
“테스트 신청자 방금 3만 1천4백 넘겼어요. 공지대로 전원 동시 입장 받으면 문의 채널도 같이 터집니다. CS 매뉴얼도 아직 1차본밖에 없어요.”
나는 고개를 한 번 끄덕인 뒤 말했다.
“그럼 전원 동시 입장을 안 받습니다.”
순간, 공기가 멈췄다.
한도겸이 먼저 눈을 들었다.
“웨이브 테스트로 나누자고요?”
“세 번으로.”
나는 화이트보드 앞으로 가 시간을 적었다.
1차. 핵심 예약자 우선 입장.
2차. 서버 안정화 확인 후 잔여 초청 발송.
3차. 커뮤니티 확산 유입 대응.
마커 끝이 화이트보드를 긁는 소리가 짧게 났다.
“한 번에 다 받지 않습니다. 1차에서 로비 접속, 튜토리얼 첫 진입, 문의 폭주, 결제 비활성 구간까지 버티는지 확인하고 다음 파도를 엽니다. 지금 필요한 건 `많이 들어왔다`는 뉴스가 아니라 `안 터졌다`는 결과예요.”
오민서가 곧바로 반발했다.
“반발 엄청 큽니다. 왜 사전예약했는데 못 들어가냐고 바로 터져요.”
“반발은 설명으로 막을 수 있습니다.”
나는 그녀를 똑바로 봤다.
“붕괴는 설명으로 못 막아요.”
말이 끝나자 운영실에 짧은 침묵이 내려앉았다. 한도겸이 의자 등받이에 몸을 기대며 계산하듯 말했다.
“웨이브로 쪼개면 로비 서버 분리하고, 무거운 자산 호출 뒤로 미루는 정도는 가능합니다. 단일 입장보다 훨씬 낫습니다. 최소한 접속 입구에서 전부 죽는 일은 피할 수 있어요.”
윤해원이 들고 온 시안을 테이블 위에 펼쳤다. 어두운 우주 정거장 복도 끝으로 푸른 항로선이 이어지고, 화면 아래에는 아직 비어 있는 문구 칸이 남아 있었다.
“기다리게 할 거면, 그냥 기다리게 두진 맙시다.”
그녀가 시안을 톡 두드렸다.
“대기 화면이 불안하면 유저는 시작도 전에 식어요. 지금 필요한 건 `혼잡해서 못 들어감`이 아니라 `순차 초청 중`이라는 얼굴이죠.”
나는 시안을 내려다봤다. 어두운 공간을 가르는 푸른 선, 아직 열리지 않은 문, 하지만 곧 들어갈 수 있다는 방향성. 이상하리만치 지금 상황과 닮아 있었다.
“맞아요.”
내가 말했다.
“대기 화면도 얼굴입니다.”
해원의 눈빛이 아주 미세하게 바뀌었다.
“그럼 문구는 이렇게 가죠. `안정적인 첫 항해를 위해 순차 초청이 진행됩니다.` 기다림이 실패처럼 보이면 안 돼요.”
오민서가 그 말을 듣고 바로 메모했다.
“운영 공지, 초청 메일, 대기 화면. 세 군데 톤 맞추겠습니다.”
그 순간부터 운영실은 세 갈래로 갈라졌다.
한도겸은 서버 구조를 뜯었다. 로비와 게임 서버를 최대한 분리하고, 접속 직후 가장 무거운 자산 호출을 뒤로 미뤘다. 초반엔 항로선과 통신탑 무전, 기본 동선만 먼저 살아나게 하고, 추가 로딩은 진입 뒤에 분산시키기로 했다.
오민서는 초청 웨이브 시간표와 QA 인증 우선순위를 다시 잘랐다. 누가 먼저 들어오고, 어떤 공지가 언제 나가고, 문의가 몰리면 어떤 템플릿으로 받는지까지 분 단위로 새로 찍어 넣기 시작했다.
윤해원은 대기 화면과 초청 배너를 손보며, `기다림`이 아니라 `선별된 첫 진입`처럼 보이게 색과 문장을 조정했다.
나는 바로 QA실로 내려갔다.
형광등 아래 긴 테이블 위에는 테스트폰이 줄지어 놓여 있었고, 기기명 스티커와 버그 티켓 번호가 종이컵 사이로 뒤섞여 있었다. 누군가는 체크리스트를 붙든 채 잠깐 고개를 떨구고 있었고, 누군가는 같은 튜토리얼 구간을 세 번째 돌리며 메모를 남기고 있었다. 공기엔 식은 커피 냄새와 배터리 열기가 섞여 있었다.
QA 팀장이 붉어진 눈으로 나를 올려다봤다.
“대표님, 지금 들어온 검수 항목이 백 개 넘었습니다. 그대로면 다 못 봅니다.”
나는 그의 손에 들린 체크리스트 묶음을 받아 펼쳤다.
필수 42개.
확장 109개.
늘어난 항목 대부분은 `혹시 몰라서` 붙은 것들이었다. 그 말은 평소라면 옳다. 하지만 지금은 아니었다. 지금 필요한 건 완벽한 시험이 아니라, 무너지지 않는 첫 진입선이었다.
“필수 42개만 오늘 밤 안에 끝냅니다.”
팀장이 그대로 굳었다.
“나머지는요?”
“2차 웨이브 전에 넘깁니다.”
“그럼 내부에서 말 나옵니다.”
“나오게 두세요.”
나는 체크리스트를 다시 내려놨다.
“오늘 우리가 지켜야 하는 건 체면이 아니라 생존선입니다. 첫날 전원 입장 안 받습니다. 대신 들어온 사람은 제대로 들어오게 만듭니다.”
팀장은 한참 말이 없었다. 그 뒤 아주 작게 숨을 내쉬었다.
“그럼 사람은 삽니다.”
나는 짧게 답했다.
“서버도 살려야죠.”
정오 직전, 새 계산 결과가 올라왔다.
단일 입장 유지 시 예상 대기열 3,200명.
1차 웨이브 적용 시 예상 대기열 480명.
운영실로 다시 올라왔을 때 오민서는 그 수치를 거의 노려보듯 보고 있었다. 그녀는 태블릿을 몇 번 넘기더니 처음으로 짧게 숨을 놓았다.
“이 정도면 문의팀도 버틸 수 있어요. 대신 기준은 단순해야 합니다. 초청 순서 설명이 애매하면 더 시끄러워져요.”
“핵심 예약자, 체험 완료자, 커뮤니티 추첨.”
나는 바로 답했다.
“세 줄이면 됩니다. 그리고 왜 나눠 받는지 숨기지 마세요. 안정적인 첫 테스트를 위해서라고 정확히 적습니다.”
오민서가 고개를 끄덕였다. 이제 그녀 표정에는 막연한 반대 대신, 계산 가능한 전선을 붙잡았을 때 나오는 집중력이 올라와 있었다.
나는 거기서 멈추지 않았다.
“민서 팀장, 하나 더.”
“네.”
“플랫폼 관심작 탭이랑 스트리머 사전 공지 일정, 다시 확인해 주세요. 어제부터 너무 정확하게 같은 시간대에 겹칩니다.”
오민서의 눈매가 가늘어졌다.
“저도 그게 걸렸어요. 내부 시간표 본 사람처럼 움직입니다.”
“흔적 하나만 잡아 와요.”
“해 보겠습니다.”
오후 내내 우리는 `얼마나 많이 받느냐`가 아니라 `어떻게 나눠 받느냐`를 기준으로 모든 숫자를 다시 써 내려갔다. 접속을 늦추는 게 아니라, 붕괴를 늦췄다. 문의를 숨기는 게 아니라, 받아낼 순서를 만들었다. 미래 문서가 다시 쓰인 순간부터 이건 더 이상 정답지와 씨름하는 일이 아니었다.
우리가 한 군데를 살리면 다른 군데가 튀어 오르는 반응형 전장이었다.
저녁 여덟 시, 한도겸이 새 부하 테스트 결과를 띄웠다.
“1차 웨이브 기준이면 로비는 버틸 만합니다. 대신 두 번째 파도 들어오기 전에 캐시 비우는 시간 꼭 필요해요.”
“몇 분?”
“최소 열두 분.”
오민서가 바로 일정표를 다시 손봤다.
“그러면 초청 메일 간격 여덟 분에서 열다섯 분으로 늘릴게요. 문의 템플릿도 그 기준에 맞추겠습니다.”
윤해원이 옆에서 새 대기 화면을 띄웠다. 어두운 정거장 배경 위로 푸른 항로선이 천천히 살아나고, 하단 문구가 짧게 떠올랐다.
`안정적인 첫 항해를 위해 순차 초청이 진행됩니다.`
이번엔 누구도 그 문장을 가볍게 보지 않았다.
기다리게 만드는 말이 아니라, 무너지지 않게 하겠다는 약속이었으니까.
밤 아홉 시를 조금 넘겼을 때였다.
운영실 문이 급하게 열리고 오민서가 태블릿을 든 채 들어왔다. 숨은 고르려 했지만, 눈빛은 이미 답을 가져온 사람의 것이었다.
“잡았습니다.”
정면 스크린에 캡처가 떴다.
테스트 당일 오전.
복수 스트리머 공지 동시 배치.
플랫폼 관심작 노출 확대 요청.
Project Orbit 1차 웨이브 시간과 정확히 중첩.
문서 하단 협력사 표기에 익숙한 이니셜이 박혀 있었다.
강재현 쪽 퍼블리싱 라인이 자주 쓰는 외부 협력사였다.
한도겸이 이를 악물었다.
“우리가 살아나니까, 기대감을 같은 시간에 몰아 넣어서 입구부터 흔들겠다는 거군요.”
윤해원이 스크린을 보며 낮게 말했다.
“실패를 만드는 게 아니라, 실패해 보이게 만들 타이밍을 고르는 거네.”
나는 그 캡처를 오래 바라봤다.
미래 문서가 바뀐 직후, 시장도 같이 반응하고 있었다.
우리가 만든 반등은 단순한 희망이 아니었다. 누군가에겐 이제 건드릴 가치가 생긴 신호였다. 그러니까 저쪽도 예전처럼 무시하지 않고, 더 정교한 방식으로 시간을 맞추기 시작한 거다.
정면 대시보드의 예상 대기열 수치가 마지막으로 한 번 더 갱신됐다.
480명.
버틸 수 있는 숫자였다.
하지만 스크린 옆 외부 일정 캡처는 그보다 더 큰 사실을 말하고 있었다.
테스트는 아직 시작도 안 했다.
그리고 다음 전쟁은 서버를 더 늘리는 데서 끝나지 않는다.
누가 우리 성공을 먼저 과열시키고, 어느 순간 입구를 터뜨리려 드는지 밝혀내는 쪽에서 열린다.
✦ 작가의 말
연재 중