신데렐라의 저주

3부. 높을수록 얇은 공기

by 로그캐빈
밤 12시, 동시 접속자 그래프가 툭 꺾였다.


2010년, 스마트폰이 한국을 뒤덮기 시작했다.

멀리서 모바일의 파도가 오고 있었지만 PC 온라인 게임은 아직 왕좌를 내주지 않았다.

우리 게임도 그 전성기의 파도 위에 올라타 있었다.


팀원들 사이에서 소문만 무성하던 '신데렐라 버그'가 매일 밤 12시에 나타났다.

동시 접속자(동접) 지표가 툭 떨어졌다가, 몇 분 뒤 아무 일 없었다는 듯 회복되는 현상.

야간이라 즉각적인 모니터링이 쉽지 않았고, 원인을 찾으려고 달려들 때쯤이면 이미 상황은 끝나 있었다.

치명적이진 않았다. 하지만 매일 밤, 뭔가 잠깐 비는 듯한 불안이 남았다.

"왜 하필 12시일까?"

시계가 11시 59분을 가리킬 때부터 나는 괜히 어깨에 힘이 들어갔다.

사무실의 불은 대부분 꺼져 있었고, 모니터 몇 개만이 어둠 속에서 푸른빛을 뿜었다.

키보드를 두드리는 소리가 유난히 크게 울렸다.

12시.

그래프가 한 박자 늦게 꺾였고, 그다음엔 동접이 '톡' 하고 살짝 떨어졌다.

나는 며칠간 인프라 지표와 쿼리 로그를 대조했다.

그러다 문득, 평소 무심코 지나쳤던 대시보드의 두 그래프가 눈에 들어왔다.

동접이 빠지는 하강 곡선과, 특정 배치 작업의 실행 시간이 한 덩어리처럼 겹쳐 있었다.

두 그래프는 거의 겹쳐 보였다.


범인은 랭킹 집계 쿼리였다.

하루 동안의 유저 활동을 정산해 순위를 매기는 랭킹 집계 작업이 매일 밤 12시에 실행되고 있었다.

그런데 이 쿼리가 DB 자원을 과도하게 점유했고, 그 짧은 부하를 견디지 못한 게임 서버와의 연결이 툭툭 끊겼던 것이다.

랭킹 처리가 끝나면 언제 그랬냐는 듯 동접은 회복되었다.

원인을 알 수 없어 귀신이 곡할 노릇이라던 '신데렐라의 저주'는 최적화되지 않은 데이터 처리 문제였다.


'이대로는 안 되겠다.'

혼자서 모든 DB 이슈를 감당하기에는 서비스의 덩치가 너무 커져 있었다.

나는 인프라팀을 찾아가 협업을 요청했다.

단순한 트러블슈팅을 넘어, 지속 가능한 DB 운영 체계를 잡기 위해서였다.

먼저, 서비스용 DB와 분석용 DB를 갈랐다.

랭킹 집계 같은 무거운 작업이 라이브를 건드리지 않도록, 실시간 데이터를 따로 받아주는 미러링 DB를 세웠다.

로그는 쌓이는 대로 두지 않았다.

테이블을 갈아 끼우는 방식으로, 라이브 DB가 무거워지지 않게 흐름을 바꿨다.

하나하나 체계를 잡아나가자 DB는 눈에 띄게 안정되었다.


한동안 배치 작업이 돌아가는 동안 모니터를 지켜봤다

그래프가 요동치지 않고 있었다.

의자 등받이에 등을 기댄 채 오랜만에 깊은 숨을 내쉬었다.

그제야 사무실이 조용하게 느껴졌다.



사무실 창 너머로 가을 햇살이 내려앉고 있었다.

담당 게임의 라이브 서비스가 순항하며 팀의 덩치는 하루가 다르게 커졌다.

개발을 제외한 사업, 운영, 웹, DB 파트가 한 울타리에 모인 우리 팀에도 새로운 얼굴들이 속속 합류했다.

그중에는 사업팀 신입으로 들어온, 팀의 '막내' 사원도 있었다.

명문대를 갓 졸업한 그녀는 생기가 넘쳤고, 팀원 모두에게 사랑받는 존재였다.


나는 환영받는 막내로 조직에 들어가 본 적이 없었다.

늘 낮은 문턱으로 들어가, 나를 증명하며 자리를 얻어야 했다.

어쩌면 나는 그녀를 보며, 내가 가져보지 못한 출발선을 질투하고 있었는지도 몰랐다.


입사한 지 얼마 안 됐을 때였다.

나는 농담 반, 진담 반으로 한 번 던져봤다.

"이런 일은 이제 막내가 해야 하지 않나?"

그러자 그녀는 눈도 피하지 않고 당돌하게 대답했다.

"왜 그래야 해요?"

나는 아무 말도 못 했다.

파티션 너머의 팀 동료들이 키득키득 웃는 소리가 났다.

그 웃음은 내 쪽이었다.

갓 출근한 막내를 한 번 골려보려던 말은, 오히려 내가 말문이 막히는 쪽으로 끝났다.

그녀는 그런 장난에 당황하는 사람이 아니라, 왜 그래야 하는지 또렷하게 되묻는 사람이었다.


어느 날, 사업팀 신입이었던 그녀가 데이터 분석을 위해 내 자리로 찾아왔다.

"저기, 선배님... 뭐 하나 여쭤봐도 될까요?"

조심스럽고 명랑한 목소리.

나는 하던 일을 멈추지 못한 채, 툭 내뱉었다.

"뭐요."

말이 입 밖으로 나오자마자, 내 귀에도 날카롭게 들렸다.

혀끝에서 톡 떨어진 두 글자.

거의 '볼일 없으면 가라'는 수준의 퉁명스러운 대답이었다.

주워 담을 수도 없었다.


내 입장에서는 질문의 내용이 아니라, 질문이 들어오는 '타이밍'이 문제였다.

모니터 속 쿼리 한 줄이, 딱 지금 맞물려 돌아가려는 순간이었다.

나는 그녀 쪽을 보지 않았다.

그때는 정말로 '볼 여유'가 없었다.

뒤통수가 뜨거웠다. 누군가의 시선이 얇게 걸린 듯했다.

모니터 속 쿼리의 글자들이 어느 틈에 의미 없는 기호처럼 흐려졌다.


나중에 아내에게 들은 그때의 첫인상은 이랬다.

“진짜 까칠한 사람이구나 싶었어. 질문하러 갈 때마다 괜히 눈치 보였거든.”

그땐 일에 치여 주변을 볼 여유가 없었다.

코드와 쿼리 뒤에 숨어 있는 쪽이 더 편했다.


그해 겨울부터는 퇴근길에 곧장 집으로 가지 못하는 날이 많아졌다.

회사 근처를 조금 더 서성이다가 돌아가는 일이 잦아졌다.

월, 수, 금 연재