Showing Posts From
라이브
- 03 Dec, 2025
새벽 2시, 라이브 버그 대응 중인 QA 엔지니어의 혼잣말
새벽 2시, 라이브 버그 대응 중인 QA 엔지니어의 혼잣말 배포 완료 30분 후 새벽 1시 40분. 배포 완료. 슬랙에 '배포 완료' 메시지 올라왔다. CTO가 이모지 달았다. 개발팀장도 '수고하셨습니다' 남겼다. 난 아직 퇴근 못 한다. 모니터링이 남았다. 최소 1시간. 이게 QA의 숙명이다.센트리 대시보드 켜놨다. 파이어베이스 크래시리틱스도 띄웠다. 찰스 프록시 돌리고, 테스트 계정으로 주요 플로우 돌린다. 로그인. 메인 화면. 상품 검색. 장바구니. 결제. 다 정상이다. 응답 속도도 괜찮다. 여자친구한테 카톡 왔다. "아직 일해?" 읽씹했다. 지금은 집중해야 한다. 새 버전 설치한 유저가 1200명 넘었다. 크래시 0건. 좋다. 이대로 가자. 커피 한 모금. 식었다. 상관없다. 2시 11분, 센트리 알람 띠링. 센트리에서 알람 왔다. 'NullPointerException in PaymentActivity' 심장 내려앉는다. 결제 화면에서 크래시다. 제일 중요한 곳이다. 빠르게 로그 확인한다. 스택 트레이스 읽는다. at com.company.payment.PaymentActivity.updateUI(PaymentActivity.java:247)247번째 줄. 뭔가 null이다. 문제는 재현이다. 내 폰에선 안 난다. 테스트 계정 5개로 다 해봤다. 전부 정상이다.슬랙에 조용히 메시지 올린다. "결제 크래시 1건 발생했습니다. 재현 중입니다." 1분도 안 돼서 답장 온다. 개발자 '지훈'이다. "어떤 상황에서요?" "파악 중입니다." 센트리 로그 다시 본다. 유저 정보 확인한다.안드로이드 9 갤럭시 S9 신규 가입 유저 결제 수단: 카카오페이카카오페이. 우리가 이번에 추가한 거다. 테스트 계정으로 카카오페이 선택한다. 결제 진행한다. 정상이다. 뭐가 다른 거지. 로그 더 파고든다. 유저 플로우 추적한다. 앱 설치 → 회원가입 → 상품 담기 → 결제 시도 → 크래시 회원가입 직후 바로 결제한 유저다. 테스트 계정은 전부 기존 계정이었다. 신규 가입 플로우로 다시 해본다. 회원가입한다. 카카오 간편가입 쓴다. 상품 담는다. 카카오페이 선택한다. 결제하기 누른다. 앱이 꺼진다. "씨발." 재현됐다. 2시 27분, 핫픽스 회의 슬랙에 '@channel' 멘션 날린다. "결제 크래시 재현 완료. 신규 가입 + 카카오페이 조합에서 발생합니다." 30초 만에 단톡방 난리 났다. 지훈: "지금 코드 확인 중" 팀장: "영향 범위 얼마나 되나요" CTO: "핫픽스 해야 하나" 난 센트리 보고 답한다. "현재까지 크래시 3건. 전부 같은 패턴입니다." 3건. 많지 않다. 하지만 결제다. 한 건도 놓칠 수 없다.지훈이 원인 찾았다. "신규 유저는 포인트 정보가 null인데, 카카오페이 선택하면 포인트 차감 로직이 실행돼요. null 체크 안 했습니다." 간단한 버그다. 하지만 치명적이다. CTO가 결정한다. "핫픽스 갑니다. 지훈님 수정하고, 민수님 검증 부탁드립니다." "네." 지훈이 코드 수정 시작한다. 난 테스트 케이스 정리한다.신규 가입 + 카카오페이 결제 신규 가입 + 신용카드 결제 신규 가입 + 네이버페이 결제 기존 유저 + 카카오페이 결제 포인트 있는 유저 + 카카오페이 결제최소 5가지는 확인해야 한다. 여자친구한테 카톡 보낸다. "미안 오늘 못 갈 것 같아" 읽씹 당한다. 당연하다. 2시 58분, 빌드 나옴 지훈이 수정 완료했다. "빌드 올렸습니다." 바로 다운받는다. 설치한다. 테스트 시작한다. 신규 가입한다. 이메일 아무거나. test_20250601_0258@test.com 상품 담는다. 9900원짜리 테스트 상품. 카카오페이 선택한다. 결제 진행한다. 결제 완료 화면 뜬다. 크래시 없다. "1차 확인 완료. 정상입니다." 나머지 케이스도 돌린다. 신용카드. 네이버페이. 포인트 있는 계정. 포인트 없는 계정. 전부 정상이다. 기존 기능도 확인한다. 리그레션이다. 일반 결제. 쿠폰 적용. 배송지 변경. 장바구니 수정. 20분 걸린다. 다 정상이다. 슬랙에 보고한다. "핫픽스 검증 완료. 배포 가능합니다." 팀장이 답한다. "고생하셨습니다. 바로 배포하겠습니다." 3시 23분, 재배포 완료 배포 완료 메시지 뜬다. 이번엔 조마조마하다. 또 뭐 나오면 어쩌나. 센트리 지켜본다. 크래시리틱스 모니터링한다. 5분 지난다. 알람 없다. 10분 지난다. 여전히 조용하다. 신규 설치 유저 500명 넘었다. 크래시 0건. 가슴 쓸어내린다. 살았다. CTO가 슬랙에 쓴다. "민수님 덕분에 큰 사고 막았네요. 고생 많으셨습니다." 지훈도 쓴다. "민수님 재현 안 해주셨으면 큰일 날 뻔했습니다." 기분은 좋다. 하지만 복잡하다. 이게 칭찬받을 일인가. 배포 전에 못 잡은 게 내 잘못 아닌가. 3시 40분, 퇴근 준비 모니터 끈다. 가방 챙긴다. 사무실 아무도 없다. 지훈도 퇴근했다. CTO도 접속 종료했다. 난 1시간 더 있었다. 마지막까지 확인했다. 엘리베이터 타면서 생각한다. '테스트 케이스에 신규 가입 플로우 추가해야겠다.' '카카오페이 테스트 계정 새로 만들어야겠다.' '다음 스프린트 때 자동화 시나리오에 포함시켜야겠다.' 이게 QA다. 사고 막아도 티 안 난다. 사고 나면 제일 먼저 욕먹는다. 택시 탄다. 기사님이 묻는다. "야근하셨어요?" "네. 급한 일 있었어요." "요즘 젊은 분들 고생 많으시네요." 대답 안 한다. 창밖 본다. 새벽 거리는 조용하다. 편의점 불만 켜져 있다. 핸드폰 본다. 센트리 알람 없다. 크래시 0건 유지 중이다. 여자친구한테 카톡 온다. "조심히 들어와. 내일 저녁은 꼭 같이 먹자." "그래. 미안해." "괜찮아. 고생했어." 고마운 사람이다. 4시 12분, 집 도착 집 도착했다. 샤워한다. 침대에 눕는다. 핸드폰 한 번 더 본다. 센트리 확인한다. 여전히 조용하다. 알람 끈다. 눈 감는다. 내일 출근하면 또 테스트다. 또 버그 찾는다. 또 재현한다. 반복이다. 끝없는 반복이다. 근데 이상하다. 싫지 않다. 버그 잡았을 때 쾌감. 사고 막았을 때 안도감. 이게 날 버티게 한다. 'QA는 아무나 하는 거 아니다.' 스스로 되뇌인다. 눈 감힌다. 의식 꺼진다. 내일 또 싸운다. 버그랑.새벽 핫픽스 끝나고 집 가는 택시 안, '오늘도 살았다' 생각했다.