실제 IT 서비스 장애를 소재로, 제한된 시간과 불완전한 정보 속에서 연속으로 판단을 내려 서비스를 복구하는 도트 그래픽 미연시형 게임입니다. 로그와 대시보드에서 단서를 모으고, 선택에 따라 엔딩과 엔지니어링 평가가 달라집니다. 한국어와 영어로 플레이할 수 있습니다.
에피소드
- EP01 PAYMENT DOWN: 새벽 2시, 결제가 멈췄다. 심야 타임딜 이벤트가 한창인 새벽, 결제 API 응답이 8초를 넘기고 결제 성공률이 62%까지 떨어졌다. 원인을 찾고, 결제 데이터를 지키면서 서비스를 복구해야 한다. (약 15분)
- EP02 MIDNIGHT DEPLOYMENT: 배포는 성공했다. 그런데 Pod가 계속 죽는다. 자정 무렵 주문 서비스 배포가 끝나고 15분 뒤, 온콜 휴대폰이 울린다. 5xx가 18%까지 치솟고 Pod가 계속 재시작된다. 원인을 찾아 주문 서비스를 되살리고, 그 사이 꼬인 주문과 늘어난 비용까지 정리해야 한다. (약 15분)
- EP03 FIRST INCIDENT: 입사 3주 차, 처음 만난 빨간 알림. 입사 3주 차 오후, 팀 채널에 쿠폰 API 알림이 뜬다. 사수는 회의에 들어가는 길이다. 런북을 따라 로그를 읽고, 알아낸 것을 제대로 보고하고, 고객의 쿠폰함을 다시 열어야 한다. (약 10분)
- EP04 ALL GREEN: 에러율 0%, 그런데 주문 내역이 비어 있다. 목요일 밤, CS팀이 "방금 결제했는데 주문 내역이 없다"는 문의를 전한다. 대시보드는 온통 초록색이고 API는 200 OK를 돌려준다. HTTP 응답과 SQL을 직접 확인해 원인을 찾고, 22:00 정산 배치가 돌기 전에 문제를 막아야 한다. (약 15분)
- EP05 RECONNECT STORM: 새벽 업그레이드는 멈췄다. 120만 대의 재접속은 멈추지 않는다. 스마트홈 플랫폼의 새벽 브로커 업그레이드 도중, 접속된 디바이스가 118만 대에서 41만 대로 떨어진다. 업그레이드를 멈춰도 폭주는 끝나지 않고, 도어락 명령은 큐에 쌓여 간다. 아침 루틴이 도는 05:30 전에 플릿을 되살릴 전략을 세우고, 증설하라는 압박 앞에서 판단을 내려야 한다. (약 20분)
- EP06 NO SPACE LEFT: 입사 한 달 차, 디스크가 꽉 찼다. 월요일 아침, 노드 디스크 알림과 함께 Pod가 Evicted로 쓰러진다. 플랫폼팀 입사 한 달 차인 나는 kubectl과 df, du로 무엇이 디스크를 채웠는지 찾아야 한다. 눈앞의 파일을 지우고 싶은 유혹을 참고, 진짜 원인을 고쳐 노드를 살려 보자. (약 10분)
- EP07 FIVE SECOND DELAY: 모든 서비스가 정확히 5초씩 늦는다. 금요일 저녁 프로모션 피크, 서로 관련 없는 서비스들이 동시에 느려진다. 그런데 느린 요청의 응답 시간이 이상하게도 5초와 10초에 몰려 있다. 공통 원인을 찾아 피크를 지키고, 잘못된 증설의 유혹과 꼬인 결제까지 정리해야 한다. (약 15분)
- EP08 GRAY FAILURE: 헬스체크는 통과한다. 한 구역만 조금씩 아프다. 화요일 오전, 에러율과 지연이 서서히 오른다. 헬스체크도 클라우드 상태 페이지도 전부 정상이다. 점심 피크까지 1시간, 어느 구역이 아픈지 찾아 트래픽과 DB를 옮길지 결정해야 한다. CTO는 리전 전환을 재촉하고, 잘못 옮기면 데이터가 갈라진다. (약 20분)
- EP09 INVALID DATE: 입사 4주 차, 내 첫 기능이 아이폰에서만 멈췄다. 목요일 오전, 10시에 열리는 타임딜 페이지가 아이폰에서만 "NaN:NaN:NaN"을 띄운다. 어제 배포한 카운트다운은 입사 4주 차인 내 첫 기능이다. 내 PC에서는 멀쩡하다. 사수는 지하철 안이다. 런북대로 근거를 모으고, 오픈 전에 아이폰 고객의 구매 버튼을 열어야 한다. (약 10분)
- EP10 BLOCKED BY CORS: 스테이징에선 됐는데, 운영에서 주문이 막혔다. 수요일 오후, 프론트 주간 배포가 나가고 10분 만에 주문 완료율이 11%로 떨어진다. 서버에는 에러가 하나도 없고, 브라우저 콘솔에는 CORS라는 단어만 빨갛게 찍힌다. 이번 배포에는 내 PR도 들어 있다. 브라우저가 무엇을 묻고 누가 막았는지 읽어 내고, 주문을 다시 열어야 한다. (약 10분)
- EP11 PRICE MISMATCH: 세일 밤, 상품 가격이 다른 상품 값으로 바뀐다. 금요일 저녁 블랙 프라이데이 프리 세일. "화면에서 본 가격과 결제 가격이 다르다"는 문의가 쏟아지고, 주문 API는 409를 쏟아낸다. 에러 로그는 조용하다. Vue 3 Composition API와 TypeScript로 짠 상품 화면에서 가격이 어디서 바뀌는지 찾아, 세일이 끝나기 전에 막고 고쳐야 한다. (약 12분)
- EP12 VERSION SKEW: 옛 화면이 새로고침을 멈추지 않는다. 목요일 저녁, 라이브 커머스 방송 40분 전. 19:00 웹 배포 뒤로 프론트 오류가 4만 건을 넘고 API 요청이 네 배로 불어난다. 새로 들어오는 사람은 그대로인데, 같은 사람들이 몇 초마다 다시 들어온다. 30만 명이 몰리기 전에 어떤 화면이 왜 멈추지 않는지 찾아, 무엇을 되돌리고 무엇을 건드리지 않을지 정해야 한다. (약 14분)
- EP13 NINE HOURS BEHIND: 입사 5주 차, 출석 체크의 하루가 아홉 시간 늦게 시작됐다. 월요일 오전, 앱의 "매일 출석 체크" 이벤트에 주말 동안 문의가 쌓였다. 자정 넘어 출석했는데 어제 날짜로 찍혔다, 이미 출석했다고 나온다, 연속 기록이 끊겼다. 그런데 9시가 지나자 문제는 저절로 사라진 것처럼 보인다. 10시에는 7일 연속 출석 쿠폰 배치가 돈다. 사수는 9시 30분 회의 전까지 먼저 봐 달라고 한다. 런북대로 근거를 모으고, 배치가 돌기 전에, 그리고 오늘 밤 자정이 다시 오기 전에 원인을 잡아야 한다. (약 10분)
- EP14 PAGE TWO: 에러는 하나도 없는데, 상품이 두 번 나오고 어떤 상품은 사라졌다. 수요일 오후 2시, '9,900원 균일가' 기획전이 열린다. 20분 뒤 셀러와 마케팅에서 같은 문의가 들어온다. 2페이지에 1페이지 상품이 또 나오고, 어떤 셀러 상품은 끝까지 내려도 보이지 않는다. 전시 API는 에러 없이 200을 돌려주고, 오늘은 배포도 없었다. 15시 2차 앱 푸시 전에 목록이 왜 어긋나는지 찾아야 한다. (약 10분)
- EP15 OVERSOLD: 500켤레 한정판, 결제 완료는 612건. 목요일 저녁, 한정판 스니커즈 500켤레가 3분 만에 품절됐다. 그런데 결제 완료 주문은 612건이다. 에러도, 지연도 없었다. 21:00에는 2차 드롭 500켤레가 다시 열린다. 재고 숫자가 어디서 새는지 찾아 2차 드롭 전에 막고, 이미 넘친 주문을 정리해야 한다. (약 12분)
- EP16 SOFT DEPENDENCY: 추천 하나가 느려졌을 뿐인데, 상품 상세가 통째로 멈췄다. 금요일 12:05, 점심 피크. 상품 상세와 메인 화면이 30초씩 걸리다 504로 끝난다. 요청은 지난주와 비슷하고, product-api는 배포도 없었다. 바뀐 것은 추천 서비스가 느려졌다는 것 하나다. 추천이 없어도 상품은 팔 수 있다. 그런데 왜 상품 화면 전체가 멈췄는지 찾아, 무엇을 끊고 무엇을 지킬지 정해야 한다. (약 14분)
- EP17 CERTIFICATE EXPIRED: 월요일 아침, 판매자센터에 빨간 경고 화면이 떴다. 월요일 오전, 판매자센터에 "연결이 비공개로 설정되어 있지 않습니다"가 뜬다. 정산 파일 업로드 배치도 x509 오류로 멈췄다. 쇼핑몰은 멀쩡하다. 플랫폼팀에 온 지 한 달, 리드는 면접 중이다. 10시 정산 파일 게시 마감 전에 판매자센터를 다시 열어야 한다. (약 10분)
- EP18 UNKNOWN TARGET: 트래픽은 세 배가 되는데, 오토스케일러는 꿈쩍도 않는다. 화요일 오전, 점심 쿠폰 이벤트를 15분 앞두고 event-api가 느려진다. 트래픽은 계속 오르는데 파드는 3개에서 꿈쩍도 않는다. 오토스케일러는 분명 붙어 있는데, TARGETS 칸에는 숫자 대신 <unknown>이 떠 있다. HPA가 무엇을 모르는지 찾아내고, 12시 트래픽을 받아 낼 수 있게 되돌려야 한다. (약 10분)
- EP19 PORT EXHAUSTION: 안쪽은 멀쩡한데, 밖으로 나가는 연결만 사라진다. 수요일 20:40, 타임딜 푸시가 나간 지 10분. 외부 PG로 나가는 결제 승인 호출이 4% 실패한다. 전부 connect timeout이다. 서비스끼리의 내부 호출은 멀쩡하고, PG사는 자기들 쪽은 정상이라고 한다. 연결이 어디서 사라지는지 찾아 21:00 2차 푸시 전에 막고, 엇갈린 결제까지 맞춰야 한다. (약 12분)
- EP20 NO WAY BACK: 클러스터 업그레이드는 되돌릴 수 없다. 토요일 새벽 1시 반, 운영 EKS 클러스터 정기 업그레이드 중. 컨트롤 플레인은 끝났고 노드 교체가 40% 지났는데, ALB가 트래픽을 보내는 대상이 24개에서 9개로 줄었다. 쿠버네티스는 파드 24개가 전부 Ready라고 한다. 노드 교체는 지금도 돌고, 07:00부터 아침 트래픽이 들어온다. 출장 중인 CTO는 되돌리면 되지 않느냐고 묻는다. 무엇을 멈추고 무엇을 고칠지 정해야 한다. (약 14분)
- EP21 DOUBLE ENTER: 엔터 한 번에 댓글이 두 개, 검색은 마지막 글자로 한 번 더. 화요일 오전, 상품 Q&A에 같은 질문이 두 개씩 올라간다. "운동화"를 검색하면 "화"로 한 번 더 검색된다. 문의는 거의 다 Mac 고객이다. 어제 배포한 새 입력창은 입사 6주 차인 내가 만든 첫 공용 컴포넌트다. 내 PC에서는 멀쩡하다. 11:10 라이브 방송 전에 Enter 한 번이 제출 한 번이 되게 해야 한다. (약 10분)
- EP22 LOGGED OUT: 30분마다 로그아웃된다. 우리 배포는 없었는데. 목요일 오후, "30분쯤 쓰다 보면 갑자기 로그아웃된다"는 문의가 1시부터 쌓이고 있다. 홈 화면으로 돌아갈 때 특히 많다. 오늘 프론트 배포는 없었고, 13시에 보안팀이 인증 서버 설정을 바꿨다는 기록만 있다. 브라우저가 무엇을 몇 번 보냈는지 읽어 내고, 보안은 그대로 둔 채 사용자를 로그인 상태로 지켜야 한다. (약 10분)
- EP23 SLOW LEAK: 상담 화면이 세 시간마다 죽는다. 블랙 프라이데이 금요일 오후. 상담사들이 쓰는 상담 콘솔이 두세 시간 지나면 점점 느려지다 메모리 부족으로 죽고, 쓰던 답변도 함께 날아간다. 에러 로그는 조용하다. React 18과 TypeScript로 짠 상담 콘솔에서 무엇이 쌓이는지 찾아, 17시에 저녁조가 들어오기 전에 막고 고쳐야 한다. (약 12분)
- EP24 SOMEONE ELSE'S NAME: 내 마이페이지에 모르는 사람의 이름과 주소가 떴다. 일요일 밤, 월요일 0시 연말 세일을 앞둔 쇼핑몰. 고객센터에 "마이페이지에 모르는 사람 이름과 주소가 보인다"는 문의가 연달아 들어온다. 서버 오류는 하나도 없고, 지표는 오히려 오늘 가장 좋다. 다른 사람의 개인정보가 지금도 나가고 있다면, 무엇을 어떤 순서로 막을지와 무엇을 지우지 말고 남길지를 함께 정해야 한다. (약 14분)