- 23 Dec, 2025
버그 심각도 S1, S2, S3, S4 - 우리는 왜 싸우나?
버그 심각도 S1, S2, S3, S4 - 우리는 왜 싸우나? 오전 10시, 또 시작됐다 회의실에 앉았다. 개발자 민호형, PM 수진누나, 나. 테이블 위에 노트북 세 대. 화면엔 Jira 티켓 #3847. "이거 S2 아니에요." 민호형이 먼저 쏘아붙였다. "로그인 안 되는 게 S2가 아니면 뭔데요?" 내가 받았다. "특정 기기에서만 그러잖아. 갤럭시 S20. 점유율 3%." 수진누나가 한숨 쉬었다. "일단 S3으로 타협하죠." 타협. 맨날 이거다. 버그 심각도. S1부터 S4까지. 겉으론 객관적 기준처럼 보인다. 실제론 협상 테이블이다.우리 회사 기준, 종이에만 있다 입사할 때 받았다. QA 가이드 문서. 40페이지짜리 PDF. 14페이지에 나온다. S1 - Critical서비스 전체 다운 결제 불가 데이터 손실S2 - Major주요 기능 장애 다수 사용자 영향 임시 우회 방법 없음S3 - Normal일부 기능 장애 우회 가능 사용자 불편S4 - MinorUI 오류 텍스트 오타 사용성 개선깔끔하다. 명확하다. 실전에선 쓸모없다. "로그인 안 되는 거 S2죠." "특정 기기잖아. S3." "그 기기 쓰는 사람도 사용자예요." "전체 0.8%래. 로그 확인했어." 가이드엔 없다. 점유율 얼마부터 "다수"인지. 우회 방법이 "로그아웃 후 재설치"면 진짜 우회인지. 결국 목소리 큰 사람이 이긴다. 아니면 직급 높은 사람.개발자의 논리, QA의 논리 민호형 입장은 이해한다. 버그 심각도 높으면 당장 고쳐야 한다. 다른 작업 밀린다. 일정 늦어진다. S1 붙으면 핫픽스 배포. 주말에도 나와야 한다. 그래서 S1은 정말 아껴 쓴다. 개발팀 내부에도 기준 있다. "서버 죽었어?" → S1 "앱 크래시?" → S2 "버튼 안 눌려?" → S3 "글자 깨짐?" → S4 QA 입장은 다르다. 사용자 관점이다. 갤럭시 S20 점유율 0.8%. 전체 사용자 50만 명이면 4천 명. 4천 명이 로그인 못 한다. "0.8%니까 S3요." "4천 명이요, 형." "통계적으론 소수지." "그 4천 명한테는 100%잖아요." 말싸움 시작.숫자 게임 작년 12월. 결제 버그 발견했다. "결제 완료" 떴는데 실제론 실패. 30분 뒤에 다시 결제하면 중복 결제. 나: "S1이요." 민호형: "발생 빈도 확인했어?" 나: "3건 리포트 들어왔어요." 민호형: "3건? 하루 거래 5만 건인데?" PM 수진누나가 계산기 두드렸다. "0.006%. S3 맞네요." 기가 막혔다. "돈 문제인데요?" "발생률 낮잖아." "한 번이라도 당하면 민원 폭탄인데." 결국 S2로 낙점. 2주 뒤 수정. 그 2주 동안 중복 결제 37건 더 발생. 고객센터 난리 났다. 환불 처리, 사과문, 쿠폰 보상. 회의 때 수진누나가 말했다. "이거 S1이었네요." 민호형은 아무 말 없었다. 숫자는 거짓말 안 한다. 해석이 거짓말한다. 직급과 심각도의 상관관계 신입 때는 몰랐다. 버그 심각도가 정치라는 걸. S1 버그 등록하면 회의 소집된다. CTO까지 올라간다. 누가 이 버그를 놓쳤나 추적 시작. 그래서 개발팀은 S1 싫어한다. QA팀도 부담스럽긴 하다. "이거 진짜 S1 맞아?" 팀장한테 물어본다. 작년 3월. 앱 크래시 발견. 재현율 100%. 특정 화면 진입 시. 나: "S1이죠?" 팀장: "사용자 얼마나 그 화면 가?" 나: "통계 봐야 알 것 같은데요." 팀장: "일단 S2로 올려. 확인 후 조정." S2로 등록했다. 다음 날 통계 나왔다. 일 방문자 200명. "S1으로 올릴까요?" "이미 S2로 올렸잖아. 그냥 두자." 2주 뒤 수정됐다. 그 2주간 400명이 크래시 경험했다. 리뷰에 별점 1점 달렸다. "앱 켜자마자 꺼져요. 쓰레기." 심각도는 기술적 판단이 아니다. 조직 내 협상력이다. 배포 2일 전의 법칙 배포 일정 잡힌다. D-7부터 분위기 바뀐다. D-7: "버그 있으면 다 올려." D-5: "S1, S2만 급해." D-3: "S1만 본다." D-2: "이거 진짜 S1 맞아?" D-1: "이거 S2 아니야?" D-day: "일단 배포하고 다음 버전에." 심각도가 시간에 따라 변한다. 같은 버그. 다른 평가. 지난달 있었다. D-5에 발견한 버그. 검색 필터 작동 안 함. 나: "S2요." 민호형: "이틀 안에 못 고쳐." PM: "우회 방법 있어?" 나: "필터 안 쓰고 스크롤." PM: "그럼 S3 아닌가?" 나: "검색이 주요 기능인데요." PM: "배포 밀리면 안 돼. 다음 버전." S3으로 강등. 다음 버전 때 다시 S2. 버그는 안 변했다. 일정이 심각도를 결정했다. 고객 민원이 진짜 심각도 앱스토어 별점 3.2. 예전엔 4.1이었다. 리뷰 읽으면 안다. 우리가 S3, S4 처리한 것들. 사용자한테는 S1이다. "뒤로가기 누르면 앱 꺼짐" → 우리는 S3 "매번 로그인 풀림" → 우리는 S4 "알림 안 옴" → 우리는 S2 리뷰는 가차없다. 별 하나. "못 쓰겠어요." 고객센터 통계 받았다. 지난 3개월 불만 접수 1위. "검색 필터 오류" 우리가 S3 처리한 거다. 사용자 4만 명이 민원 넣었다. 4만 명한테는 S1이었다. 회의 때 수진누나가 보여줬다. "이거 다음 버전에 꼭 고쳐야 해요." 민호형이 중얼거렸다. "진작 S1로 할 걸." 우리 기준과 사용자 기준. 언제나 다르다. 심각도 회의, 매주 1시간 QA팀이 제안했다. "심각도 판정 회의 만들자." 매주 목요일 2시. QA 2명, 개발 2명, PM 1명. 지난주 올라온 버그 리뷰. 처음엔 효과 있었다. 명확한 케이스들 정리됐다.결제 관련 → 무조건 S1 검토 로그인/회원가입 → S1 또는 S2 크래시 → 재현율에 따라 S1/S2 UI 오류 → S4, 단 주요 버튼은 S3하지만 애매한 건 여전했다. "푸시 알림 안 옴" 개발: "OS 권한 문제 아닌가?" QA: "앱 버그예요. 로그 있어요." 개발: "얼마나 발생해?" QA: "20건 리포트." 개발: "일 사용자 10만인데 0.02%." QA: "알림이 핵심 기능인데요." 한 시간 회의. 결론은 "다음 주 재논의". 다음 주엔 다른 버그로 또 싸운다. 객관 기준을 찾아서 팀장이 자료 가져왔다. 해외 회사들 사례. 구글 기준 (추정)P0: 사용자 5% 이상 영향, 또는 수익 차단 P1: 주요 기능 장애, 우회 없음 P2: 부분 기능 장애, 우회 있음 P3: 개선 사항아마존 기준 (추정)SEV1: 서비스 다운, 즉시 대응 SEV2: 주요 기능 실패, 24시간 내 SEV3: 불편 사항, 1주일 내 SEV4: 개선, 백로그핵심은 숫자다. "사용자 5% 이상" "24시간 내" 우리도 기준 만들기로 했다. S1 - Critical일 사용자 5% 이상 영향 (2500명) 결제/환불 오류 (금액 무관) 개인정보 유출 가능성 서비스 접속 불가 → 즉시 수정, 핫픽스 배포S2 - Major일 사용자 1% 이상 영향 (500명) 주요 기능 장애 (로그인, 검색, 주문) 우회 방법 어려움 앱 크래시 (재현율 30% 이상) → 3일 내 수정S3 - Normal일 사용자 1% 미만 영향 부분 기능 오류 우회 방법 있음 사용자 불편 → 다음 정기 배포S4 - MinorUI 깨짐, 오타 기능 동작하나 비효율 개선 제안 → 백로그 관리종이에 적었다. 회의실에 붙였다. 3개월 후, 여전히 싸운다 새 기준 적용 12주. 완벽하진 않다. 여전히 애매한 케이스 나온다. "이거 주요 기능 맞아?" "우회가 쉬운 거야 어려운 거야?" "1% 직전이면 어쩌고?" 하지만 달라졌다. 협상이 데이터 기반으로 바뀌었다. "이거 S2 아니에요?" "사용자 몇 명 영향받아?" "350명이요." "기준이 500명이니까 S3." "근데 로그인 관련인데." "주요 기능 조항 해당. S2 인정." 숫자로 말한다. 기분이 아니라. 버그 처리 속도도 빨라졌다. S1은 진짜 S1만 남았다. 개발팀도 집중한다. S3, S4는 우선순위 밀려도 이해한다. 명확한 기준 있으니까. 완벽한 기준은 없다. 하지만 없는 것보단 낫다. 결국 사람이 판단한다 기준 있어도 예외는 생긴다. 지난주 있었다. 특정 지역 사용자만 영향받는 버그. 서울/경기 OK. 부산/경남만 오류. 영향 사용자 230명. 0.4%. 기준상 S3. 하지만 올렸다. S2로. 이유는 간단했다. "부산 사용자한테는 100%잖아." 민호형이 동의했다. "맞아. 고치자." 기준은 출발점이다. 최종 판단은 사람이 한다. 중요한 건 근거다. "왜 이게 S2인가?" "부산 지역 사용자 전원 영향, 우회 불가" 설명 가능하면 된다. 서로 납득하면 된다. 심각도 협상의 미래 요즘 고민한다. AI가 심각도 판정하면 어떨까. 로그 데이터 던져주면 "영향 사용자 1237명, S2 권장" 이렇게 나온다. 공정할 것 같다. 싸움도 줄어들 것 같다. 하지만 찝찝하다. 버그는 숫자만이 아니다. 맥락이 있다. 타이밍이 있다. 배포 하루 전 S2 버그와 배포 2주 후 S2 버그. 같은 S2가 아니다. 결제 버그 3건 발생과 UI 버그 300건 발생. 어느 게 더 심각한가. 이건 사람이 판단해야 한다. 데이터 + 상황 + 경험. AI는 보조다. 결정은 우리가. 싸움보단 대화 QA 4년 하면서 배웠다. 개발자랑 싸워서 좋을 건 없다. 버그 심각도 논쟁. 결국 같은 목표다. 좋은 제품 만들기. 차이는 관점. 개발자: 일정, 리소스 QA: 사용자, 품질 둘 다 맞다. 둘 다 필요하다. 중요한 건 대화. "왜 이게 S2라고 생각해?" "사용자 경험 측면에서 치명적이라서." "알겠어. 그럼 우선순위 올려볼게." 명확한 기준 있으면 대화 쉽다. 감정 아니라 사실로 말한다. "너는 맨날 S1이래"가 아니라 "이건 기준상 S1 조건 충족해" 팀 분위기 달라진다. QA vs 개발이 아니라 우리 vs 버그.오늘 S1 버그 하나 올렸다. 민호형이 물었다. "근거 있어?" "결제 실패율 8%, 하루 400건 영향." "오케이. 당장 본다." 기준 있으니까 빠르다. 협상 아니라 합의. 이게 맞는 것 같다.
- 22 Dec, 2025
오전 9시 첫 번째 업무 - 어제 빌드 확인
오전 9시 첫 번째 업무 - 어제 빌드 확인 출근 5분 후 사무실 도착. 8시 58분. 가방 내려놓고 컴퓨터 켠다. 부팅 기다리면서 커피 타러 간다. 인스턴트. 설탕 빼고. 돌아오니 로그인 화면. 비밀번호 치고 Slack 먼저 연다. 개발팀 채널 확인. 새벽 3시 메시지. "v2.4.1 빌드 업로드 완료했습니다." 심장이 조금 빠르다. 어제 크리티컬 버그 3개 픽스했다고 했는데. TestFlight 들어간다. 빌드 번호 확인. 231. 어제가 229였으니까. 다운로드 시작. 143MB. 3분 걸린다.기도하는 마음 빌드 다운로드 중에 어제 이슈 리스트 다시 본다. QA-2847: 결제 화면 크래시 (Critical) QA-2851: 로그인 토큰 만료 안 됨 (Major) QA-2853: 푸시 알림 중복 발송 (Major) 개발자 민호 형이 어제 저녁 7시에 "다 됐어요" 했다. 믿는다. 근데 100% 믿진 않는다. 4년 동안 배운 거. 개발자 말을 믿되, 반드시 확인한다. "제 PC에선 잘 되는데요?"를 몇 번이나 들었는지. 빌드 다운로드 완료. 앱 실행. 스플래시 화면. 로딩. 메인 화면 뜬다. 일단 켜지긴 한다. 좋은 시작. 5분의 룰 QA 4년 하면서 만든 나만의 규칙. 첫 빌드 확인은 5분 안에 끝낸다. 깊게 들어가지 않는다. 표면만 훑는다.앱 실행되나? 로그인 되나? 메인 기능 터치 반응 있나? 어제 고친 화면 열리나? 크래시 안 나나?이 5분이 하루를 결정한다. 빌드가 아예 망가졌으면 개발팀한테 바로 돌려보낸다. 테스트 시간 아깝다. 빌드가 괜찮으면 본격적으로 테스트 계획 짠다. 스톱워치 켠다. 5분 시작.첫 번째 체크 - 크리티컬 버그 결제 화면부터 본다. QA-2847. 메인 → 상품 선택 → 구매하기. 결제 수단 선택 화면. 뜬다. 카드 선택. 안 죽는다. 간편결제 선택. 정상. 뒤로가기. 괜찮다. 다시 들어가기. 또 괜찮다. 5번 반복. 아무 문제 없다. "오케이." 혼잣말 한다. 사무실에 아직 사람 별로 없다. 두 번째. 로그인 토큰. QA-2851. 로그아웃 한다. 다시 로그인. 타이머 맞춰놓는다. 30분 뒤에 다시 확인해야 한다. 토큰 만료 시간이 30분이니까. 일단 패스. 세 번째. 푸시 알림. QA-2853. 이건 테스트 서버에서 푸시 쏴봐야 한다. 지금은 스킵. Charles Proxy 켜놓고 API 로그 보면서 확인할 예정. 3분 30초 지났다. 괜찮다. 두 번째 체크 - 연관 기능 크리티컬 버그 고치다가 다른 거 망가뜨리는 경우 많다. 결제 고쳤으니까 주문 내역도 봐야 한다. 마이페이지 → 주문 내역. 리스트 뜬다. 스크롤 해본다. 부드럽다. 주문 상세 들어가기. 괜찮다. 환불 버튼 눌러보기. 팝업 뜬다. 취소. 정상. 로그인 고쳤으니까 자동 로그인도 확인. 앱 종료. 다시 켠다. 로그인 유지. 좋다. 4분 50초. 세 번째 체크 - 느낌 이건 말로 설명 안 된다. 그냥 앱을 만진다. 이것저것 눌러본다. 화면 전환 속도. 버튼 반응. 로딩 시간. 뭔가 이상하면 느낌이 온다. 오늘은... 괜찮다. 로딩이 어제보다 빠른 것 같기도 하고. 5분 10초. 끝. 스톱워치 끈다.슬랙 메시지 개발팀 채널에 친다. "v2.4.1 빌드 확인했습니다. 크리티컬 이슈 재현 안 됨. 오전 중으로 풀 테스트 진행하겠습니다." 30초 뒤에 민호 형 답장. "고생하셨습니다 👍" 이모지 하나에 기분이 좋아진다. 우리 사이 괜찮은 편이다. QA-2847 상태 바꾼다. "Fixed - Testing"으로. 노트에 적는다. "09:10 - v231 빌드 1차 확인 완료. 크리티컬 픽스 확인됨. 토큰 만료 09:40 재확인 예정. 푸시 테스트 오전 중." 테스트 케이스 리스트 연다. 체크박스 54개. 오전에 30개는 끝내야 한다. 오후 2시에 기획자랑 미팅 있다. 5분이 결정하는 것들 이 5분 루틴 만들기까지 2년 걸렸다. 신입 때는 빌드 받자마자 풀 테스트 시작했다. 2시간 테스트하고 나서 앱이 아예 안 켜지는 거 발견한 적 있다. 빌드가 잘못 올라온 거였다. 2시간 날렸다. 그 다음부터는 30분 먼저 테스트하고 본격 시작했다. 근데 30분도 길다. 빌드가 망가졌으면 30분도 아깝다. 지금은 5분. 딱 좋다. 빌드 상태 파악하고, 하루 계획 세우고, 개발팀한테 피드백 주기. 이 5분이 하루 8시간을 결정한다. 빌드가 좋으면 오늘 테스트 많이 한다. 빌드가 불안하면 중요한 거만 본다. 개발자도 마찬가지다. 내가 빨리 피드백 주면 오전에 픽스 가능하다. 점심 전에 재배포 받으면 오후에 한 번 더 테스트 돌린다. 배포일 전날이면 이 루틴이 더 중요하다. 토큰 만료 확인 9시 40분. 알람 울린다. 앱 다시 켠다. 메인 화면 뜬다. 로그인 유지된다. "어?" 이상하다. 토큰 만료돼야 하는데. API 로그 확인한다. Charles Proxy. Access Token이 갱신됐다. Refresh Token 쓴 거다. "아..." 로그아웃 안 되는 게 아니라 자동 로그인 된 거다. 버그 아니네. 의도된 거였나? 기획자한테 물어봐야겠다. 스펙 확인. 지라 이슈 다시 본다. 기획자 코멘트 있다. "토큰 만료 시 자동 갱신 필요. 사용자가 재로그인하지 않도록." 아. 내가 놓쳤다. QA-2851 상태 바꾼다. "Won't Fix - Spec"으로. 민호 형한테 메시지. "2851 확인했습니다. 스펙이었네요. 제가 잘못 봤습니다." "괜찮습니다. 저도 헷갈렸어요 ㅎㅎ" 다행이다. 안 까칠하게 구는 개발자 만나서. 하루의 방향 9시 45분. 커피 한 모금 더 마신다. 식었다. 오늘 할 일 정리됐다.결제 플로우 풀 테스트 푸시 알림 중복 확인 리그레션 테스트 30개 기획자 미팅 2시 새 기능 스펙 리뷰 4시빌드가 괜찮아서 계획대로 간다. 어제는 빌드가 3번 깨졌다. 하루 종일 테스트 못 했다. 오늘은 다르다. 오전 5분이 그걸 알려줬다. 테스트 시작한다. 첫 번째 케이스. "TC-001: 비회원 결제 - 카드 결제 성공 케이스" 실행 버튼 누른다. 루틴의 힘 4년 전에는 몰랐다. QA가 뭔지도 모르고 들어왔다. 테스트? 그냥 클릭하면 되는 거 아냐? 천만의 말씀. 테스트는 전략이다. 우선순위다. 시간 관리다. 아침 5분이 그걸 만든다. 빌드 상태 파악 → 하루 계획 → 개발팀 커뮤니케이션. 이게 매일 반복되면 리듬이 생긴다. 개발자도 내 패턴 안다. "민수 씨 피드백 오전 9시 15분쯤 오겠네." 기획자도 안다. "오전에 빌드 확인 끝나면 오후에 미팅 잡아야지." PM도 안다. "민수가 오케이 했으면 빌드 괜찮은 거야." 루틴이 신뢰를 만든다. 신뢰가 쌓이면 일이 편해진다. "이거 테스트 됐어요?" "네, 오전에 확인했습니다." 끝. 더 물어보지 않는다. 망가진 날들 물론 매일 이렇진 않다. 5분 체크하다가 앱 크래시 3번 나는 날도 있다. 로그인 안 되는 날도 있다. 화면이 하얗게 뜨는 날도 있다. 그럴 땐 개발팀 채널에 바로 친다. "v231 빌드 크리티컬 이슈 있습니다. 로그인 크래시. 테스트 보류합니다." 스크린샷 첨부. 로그 첨부. 개발자들 출근하면 바로 본다. 픽스 시작한다. 나는 어제 빌드로 돌아가서 다른 테스트 한다. 시간을 아낀다. 망가진 빌드에 8시간 쓸 순 없다. 5분 체크가 없었으면 오전 내내 헤맸을 거다. "왜 이게 안 되지? 내가 뭘 잘못한 건가?" 아니다. 빌드가 잘못된 거다. 5분이면 안다. 개발자와의 관계 민호 형은 좋은 개발자다. 버그 리포트 올리면 바로 본다. 재현 안 되면 물어본다. 고치면 알려준다. 근데 모든 개발자가 그런 건 아니다. "제 갤럭시에선 안 그러는데요?" "이거 엣지 케이스 아닌가요?" "테스트 환경 문제 아니에요?" 지금은 대응법 안다. 재현 스텝 더 자세히 쓴다. 스크린샷 더 찍는다. 로그 더 붙인다. 감정 빼고 팩트만 쓴다. "iPhone 12, iOS 16.1, 와이파이 환경, 신규 설치 상태에서 100% 재현됩니다." 그럼 할 말 없다. 고친다. 오전 5분 체크 후 빠른 피드백이 관계를 만든다. 개발자도 사람이다. 빨리 알려주면 고맙다. 늦게 알려주면 짜증 난다. 금요일 저녁 6시에 "이거 버그요" 하면 다 죽는다. 월요일 아침 9시 10분에 "이거 버그요" 하면 괜찮다. 한 주 시작이니까. 타이밍이다. 숫자로 보는 5분 계산해봤다. 하루 8시간 근무. 480분. 첫 5분 체크로 아끼는 시간: 평균 2시간. 망가진 빌드 걸러내서 120분 절약. 한 달 20일 근무하면 2400분. 40시간. 1년이면 480시간. 일주일치 근무 시간을 아낀다. 물론 매일 망가진 건 아니다. 한 달에 5일 정도? 그래도 120시간. 3주치. 5분이 3주를 만든다. 오늘의 결과 오후 5시 30분. 테스트 케이스 54개 중 52개 완료. 2개는 내일. 외부 API 연동이라 시간 걸린다. 버그 3개 발견. 모두 Minor.텍스트 오타 1개 UI 정렬 어긋남 1개 로딩 인디케이터 늦게 사라짐 1개크리티컬 없다. 좋다. 내일 배포 가능하다. 슬랙에 친다. "v2.4.1 테스트 완료. Minor 3건 외 이슈 없음. 배포 가능 판단합니다." PM 답장. "고생하셨습니다. 내일 오전 배포 진행하겠습니다." 뿌듯하다. 오전 9시 5분의 시작이 오후 5시 30분의 결과를 만들었다. 내일 아침 내일도 8시 58분에 출근한다. 컴퓨터 켜고 커피 타러 간다. Slack 확인한다. 새벽 빌드 메시지 있을 거다. TestFlight 들어간다. 다운로드 시작한다. 스톱워치 켠다. 5분. 빌드 상태 확인한다. 하루가 시작된다. 이게 QA의 아침이다. 화려하지 않다. 반복적이다. 근데 이 반복이 품질을 만든다. 오전 9시 5분. 매일 똑같지만 매일 다르다.오늘 빌드는 괜찮았다. 내일도 그러길.
- 21 Dec, 2025
QA 커뮤니티 스터디 - 자동화 입문기
6시 30분 퇴근, 7시 스터디 퇴근했다. 6시 반. 구로디지털단지역 근처 카페로 간다. 스터디 7시 시작. 밥은 편의점 삼각김밥. 먹으면서 노트북 켠다. 오늘 과제: Selenium 기초.4년 차인데 아직도 매뉴얼이다. 주변 동기들은 자동화 넘어갔다. 나만 스크립트 못 짠다. 카페 도착. 5명 모였다. 다들 비슷하다. 퇴근하고 온 티. 한 명은 야근 빠지고 왔다고. 파이썬은 어렵다 스터디장이 화면 공유한다. "오늘은 XPath 선택자입니다." driver.find_element(By.XPATH, "//button[@id='login']")이게 뭔 소린지. HTML 구조 파악이 먼저래. 개발자 도구 열어본다.30분 따라 하는데 에러. "ElementNotFound Exception" 뭐가 문젠지 모르겠다. 옆 사람이 봐준다. "이거 iframe이에요." 아, 그래서 안 잡혔구나. 매뉴얼 테스트는 감으로 했다. 화면 보고 누르면 됐다. 코드는 정확해야 한다. 틀리면 바로 에러. 대충이 안 통한다. 머리 아프다. 현실은 매뉴얼 회사 돌아가면 다르다. 아침부터 빌드 테스트. 자동화? 그럴 시간 없다. 어제 배운 거 써먹고 싶다. 로그인 자동화라도. 근데 PM이 부른다. "민수씨, 긴급 테스트요." "신규 기능 내일 배포래요." 케이스 50개. 오늘 다.자동화는 저녁에. 일단 손으로 테스트. 화면 켜고 터치하고. 기획자가 묻는다. "자동화하면 빠르지 않아요?" 빠르지. 근데 스크립트 짜는 시간이. 처음 만드는 게 오래 걸린다. 케이스 50개 자동화? 2주는 걸린다. 손으로 하면 오늘 끝. 당장은 수동이 빠르다. 그게 함정이다. 스터디 3주 차 점점 어려워진다. assert 문, 예외 처리. Page Object Model. "유지보수 쉽게 하려면요." 스터디장이 설명한다. 클래스로 페이지 관리. 회사에 적용 상상해본다. 우리 앱 화면 100개. 클래스 100개? 머리 복잡하다. 그냥 하나씩 스크립트 짜면 안 되나. 안 된다고 한다. 나중에 지옥. 한 명이 말한다. "저희 회사는 자동화율 70%예요." 부럽다. "처음엔 힘들었는데." "지금은 회귀 테스트 2시간." 우리는 3일 걸린다. 개발자와의 거리 점심시간에 개발자 옆자리. "민수씨, 테스트 끝났어요?" "아직이요. 오후에." 슬쩍 물어본다. "형, 파이썬 어렵지 않아요?" "어? 쓰면 되는데." 그냥 쓰면 된다고. 나한텐 산이다. 개발자는 다른 세상 산다. 코드 리뷰 미팅. 다들 깃허브 본다. 나만 모른다. QA도 코드 알아야 한다는데. 어디까지 알아야 하나. 개발자만큼? 아니면 자동화 스크립트만? API 테스트는? 성능 테스트는? 끝이 없다. 야근 후 스터디 갈까 말까 금요일 저녁 5시. 배포 준비. 최종 빌드 확인. 스터디는 7시. 갈 수 있을까. 5시 반, 버그 발견. 치명적이다. 로그인 안 됨. 개발자 호출. 6시, 핫픽스 빌드. 다시 테스트. 7시 넘었다. 카톡 온다. 스터디장. "오늘 못 오시나요?" "죄송해요. 배포라." 이게 5주째 2번째. 빠지면 못 따라간다. 근데 어쩌나. 회사가 우선이다. 배포 망하면 내 책임. 스터디는... 나중에. 8시, 배포 완료. 모니터링 시작. 집 가면 9시 반. 내일 보충해야지. 강의 영상 있으니까. 혼자 보면 되지. 근데 혼자 보면 모른다. 질문할 사람 없다. 결국 안 본다. 동기의 이직 대학 동기한테 카톡. "형 나 이직했어." 자동화 QA로. 연봉 6천. 나보다 1800 많다. 자동화 할 줄 안다고. 부럽다. 솔직히 많이. "형도 공부해." "수요 진짜 많아." 안다. 나도 안다. 근데 안 된다. 시간이 없다. 아니, 핑계다. 퇴근하면 피곤하다. 주말엔 쉬고 싶다. 여자친구도 만나야지. 동기는 어떻게 했을까. 독하게 했겠지. 나는 안 독하다. 그게 차이다. 스터디 중간 점검 8주 차. 중간 발표. 각자 만든 스크립트 공유. 나는 로그인 자동화. 겨우 만들었다. 5개 케이스. 다른 사람들. 한 명은 전체 플로우. 20개 케이스 돌린다. "매일 1시간씩 했어요." 매일. 나는 일주일에 2시간. 실력 차이 난다. 당연하다. 투자 시간이 다르니까. 스터디장이 말한다. "천천히 가도 됩니다." "포기만 안 하면." 위로가 된다. 조금은. 회사에서의 실험 용기 냈다. 팀장한테 말했다. "자동화 좀 해보고 싶어요." "뭘 하려고?" "로그인이요. 매번 반복이라." "시간 얼마나?" 솔직히 말했다. "2주요." "2주면 수동으로 몇 번 하지?" 계산했다. 로그인 테스트 30분. 배포 전 3번. 1.5시간. 한 달이면 6시간. 2주 투자하면 다음 달부터 회수. 설득했다. "해봐." 허락 떨어졌다. 시작했다. 출근해서 1시간씩. 스터디에서 배운 거. 3일 차, 에러. "NoSuchElement" ID가 바뀌었다. 개발자한테 물었다. "이거 ID 고정 가능해요?" "왜요?" "자동화하려고요." "아, 그럼 data-testid 넣어줄게요." 협조 받았다. 신기했다. 말하니까 도와준다. 개발자도 테스트 자동화 찬성. 일주일. 로그인 자동화 완성. 돌려봤다. 30초 만에 끝. 내가 하면 5분. 10배 빠르다. 뿌듯했다. 처음으로. 코드가 일했다. 현실의 벽 2주 후. UI 개편. 디자인 전체 바뀜. 자동화 스크립트. 다 깨졌다. XPath 다 바뀜. 고쳐야 한다. 또 2일. 허무하다. 이게 유지보수구나. 스터디에서 배운 거. POM 써야 했다. 처음부터 제대로 안 했다. 급하게 짜서. 나중에 고생. 다시 짠다. Page Object로. 또 3일. 팀장이 묻는다. "민수야, 자동화 언제 끝나?" "조금만요." "다음 배포 얼마 안 남았어." "수동으로 해." 결국 손으로. 자동화는 또 밀린다. 스터디 vs 현실 스터디에서 배우는 것. 이상적이다. 깔끔한 예제. 회사 현실. 레거시 코드. 스파게티 구조. 스터디: "ID로 찾으세요." 현실: ID 없음. XPath 지옥. 스터디: "테스트 데이터 고정하세요." 현실: 매번 달라짐. 운영 DB 공유. 스터디: "CI/CD 연동하세요." 현실: Jenkins도 없음. 수동 빌드. 간극이 크다. 배운 걸 못 써먹는다. 환경이 안 돼 있다. 누구 잘못일까. 회사? 나? 둘 다. 포기 vs 지속 12주 차. 스터디 거의 끝. 수료증 받는다. 배운 건 많다. Selenium, Pytest, Jenkins 기초. 근데 실무는? 로그인 자동화 하나. 그게 전부. 3개월 동안. 동기는 벌써 이직. 나는 아직도 여기. 차이는 뭘까. 집중력. 시간 관리. 절실함. 나한테 없는 것들. 여자친구가 묻는다. "오빠 요즘 힘들어?" "응. 좀." "자동화 공부 너무 무리하는 거 아냐?" 그럴 수도. 근데 안 하면? 계속 매뉴얼. 5년 차, 10년 차 돼도. 손으로 터치. 무섭다. 작은 성취 어느 날. 로그인 자동화 돌렸다. POM 적용한 버전. 30초 만에 통과. 리포트 자동 생성. 스크린샷도 찍힘. 팀장이 봤다. "오, 이거 괜찮은데?" "다른 것도 해볼래?" "네!" 대답했다. 신났다. 회원가입 자동화. 결제 플로우 자동화. 하나씩 늘린다. 느리다. 한 달에 하나씩. 근데 쌓인다. 6개월 후. 케이스 50개 자동화. 전체의 10%. 아직 멀었다. 근데 시작은 했다. 0에서 10%. 다음은 20%. 1년 후엔 50%? 희망 생긴다. 새로운 스터디 첫 스터디 끝났다. 다음 스터디 시작. 이번엔 API 테스트. Postman, RestAssured. 또 새로운 세계. 끝이 없다. 근데 재밌다. 조금씩. 손에 익는다. 코드 보는 게 덜 무섭다. 에러도 읽힌다. "아, 이거 타입 에러구나." 성장하고 있다. 느리지만. 멈추지 않는다. 1년 후의 나 상상해본다. 1년 후. 자동화율 50%. 아침에 출근하면. 스크립트 돌리고 커피. 1시간 후 결과 확인. 실패한 것만 수동 체크. 나머지 시간은? 새 자동화 작성. 야근 줄어든다. 배포 전에도 여유. 스크립트가 일한다. 이직도 가능. 자동화 QA 포지션. 연봉 협상력 생긴다. 꿈일까. 아니다. 목표다. 동료의 변화 팀 막내가 물어본다. "선배님, 저도 자동화 배우고 싶어요." "스터디 어디서 해요?" 알려줬다. 커뮤니티 링크. 시작 방법. 2주 후. 막내가 보여준다. "제가 짠 스크립트요." 신기하다. 내가 알려주는 사람이 됐다. 몇 달 전엔 나도 초보였는데. 팀 분위기도 바뀐다. 자동화 얘기 나온다. "이건 자동화하면 어때?" 팀장도 관심 생겼다. "우리 팀 자동화율 목표 정할까?" "분기별로 20%씩." 회사가 바뀐다. 한 명이 시작하면. 번진다. 여전한 고민 물론 쉽지 않다. 여전히 야근한다. 배포 전은 여전히 지옥. 자동화해도 예외는 있다. 신규 기능은 수동. 스크립트 없으니까. 자동화 유지보수도 일. 매주 뭔가 깨진다. 고치는 시간 필요. 개발자는 여전히 빠르다. 코딩이 업인 사람들. 나는 아직 따라갈 수 없다. 연봉도 여전히 차이. 자동화해도 개발자보다 적다. QA는 그런 거래. 불공평한가. 모르겠다. 그냥 현실. 그래도 계속 퇴근 후 카페. 또 스터디 간다. 12주 과정 2회차. 피곤하다. 당연하다. 회사 다니면서 배우는 거. 근데 안 하면? 그대로다. 변하지 않는다. 동기는 이직했다. 나도 할 수 있다. 시간 문제. 늦었다고 생각 말자. 4년 차에 시작. 5년 차엔 중급. 10년 차엔? 자동화 테스트 리드. 후배 가르치는 사람. 가능하다. 포기만 안 하면. 스터디장 말이 맞다. 노트북 열고 집 와서 11시. 씻고 침대 누웠다. 노트북 연다. 오늘 배운 거 복습. 30분만. 잠들기 전. 코드 쳐본다. 에러 난다. 고친다. 작동한다. 뿌듯하다. 오늘도 한 발. 내일도 출근. 매뉴얼 테스트. 손으로 터치. 근데 저녁엔 스터디. 또 배운다. 쌓인다. 언젠간 된다. 자동화 QA. 나도 할 수 있다.퇴근 후 스터디. 느리지만 간다. 내년엔 다를 거다.
- 16 Dec, 2025
주말 카페에서 다른 앱을 테스트한다
주말 카페에서 다른 앱을 테스트한다 일요일 오후 3시 카페에 앉았다. 아이스 아메리카노 한 잔. 여자친구는 병원 당직이다. 혼자 시간이 난다. 폰을 꺼냈다. 요즘 핫하다는 배달 앱을 깔았다. 그냥 쓰려고 깔았다. 진짜다. 근데 로그인 화면 보자마자 손가락이 움직였다. 이메일 칸에 스페이스 막 눌러봤다. 허용된다. '공백 체크 안 하네.' 버튼 연타했다. 두 번 눌렸다. 로딩 막지 않았다. '중복 요청 방지 없네.'아. 시작했다. 또. 직업병은 치료가 안 된다 처음엔 아니었다. 진짜 그냥 썼다. 1년차 때까지는 일 끝나면 폰 보기도 싫었다. 변한 건 2년차 겨울이다. 배달 앱에서 주문했는데 같은 메뉴가 두 번 들어갔다. 버튼 잘못 눌렀나 싶었다. 근데 카드 승인 문자도 두 번 왔다. '아 이거 버그네.' 그때부터다. 앱 쓰면서 자동으로 분석한다.이 버튼 연타하면? 네트워크 끊으면? 뒤로가기 막 누르면? 특수문자 넣으면?머릿속에서 테스트 케이스가 자동 생성된다. 끌 수가 없다. 스위치가 없다. 여자친구가 그랬다. "앱 하나 쓰는데 왜 그렇게 열심히 만져?" 설명했다. 습관이라고. 직업병이라고. 이해 못 한다. 당연하다. 오늘의 타겟: 새로 나온 금융 앱 이번 주에 광고 많이 봤다. 대출 비교 앱. UI 예쁘다. 다운로드 100만. 실행했다. 스플래시 3초. 좀 길다. 권한 요청 팝업. 카메라, 위치, 연락처. '왜 연락처까지? 명분은?'일단 전부 거부했다. 진행된다. 좋다. 근데 매 화면마다 권한 재요청 팝업. 'UX 별로네. 한 번 거부하면 그만 물어봐야지.' 회원가입 시작했다. 이름 칸에 'ㄱㄴㄷ' 입력. 막힌다. 좋다. 숫자 입력. 막힌다. 좋다. 특수문자. 들어간다. 음? '!@#$%' 입력했다. 제출 버튼 활성화. 눌렀다. '올바른 이름을 입력하세요.' '그럼 입력할 때 막아야지 왜 지금 알려줘?' 메모장 켰다. 기록한다. [금융앱A] 1. 이름 입력 - 특수문자 입력은 되는데 제출 시 에러 → 입력 시점에 실시간 검증 필요 2. 권한 거부 후 매번 재요청 → 한 번 거부하면 세션 동안은 묻지 않기좋은 패턴을 배우는 시간 나쁜 거만 보는 건 아니다. 잘 만든 앱도 많다. 저번 주에 쓴 뱅킹 앱. 비밀번호 입력 칸에 페이스트 막아놨다. 보안 때문이다. 이해한다. 근데 재입력 칸은 페이스트 된다. '어? 이거 일부러 그런 건가?' 찾아봤다. 실제로 그런 UX 패턴이다. 첫 입력: 외워서 쳐야 함 (복사 금지) 재입력: 페이스트 허용 (사용성 고려) 메모했다. [좋은 패턴] - 비밀번호 첫 입력은 paste 금지 - 확인 입력은 paste 허용 - 보안과 편의성 균형우리 앱에도 적용하면 좋겠다고 생각했다. 월요일에 제안해야지. 버그 발견의 쾌감 30분쯤 만졌나. 금융 앱 대출 상품 비교 화면에 들어갔다. 필터 적용했다. '5000만원 이하'. 3개 나온다. 정상이다. 필터 해제했다. 전체 보기. 근데 아까 본 상품 하나가 안 보인다. '어?' 다시 필터 걸었다. 나온다. 필터 해제. 안 보인다. 재현했다. 3번. 동일하다. '이거 필터 해제할 때 데이터 갱신 안 되는 버그네.'심장이 뛴다. 이 느낌. 남들은 모른다. 버그 찾을 때 이 쾌감. 보물찾기 같다. 숨겨진 거 찾는 기분. 내가 처음 발견한 것 같은 느낌. 스크린샷 5장 찍었다. 재현 스텝 정리했다. [심각도: 중] 대출 상품 필터 해제 시 일부 상품 미노출 재현율: 100% Steps: 1. 상품 리스트 진입 2. 금액 필터 적용 (5000만원 이하) 3. 상품 3개 노출 확인 4. 필터 전체 해제 5. Expected: 전체 상품 노출 Actual: 1개 상품 누락앱 설정에서 '문의하기' 찾았다. 이메일로 보낼까 고민했다. 근데 답 안 올 확률 90%. 그냥 내 메모장에만 남겼다. 패턴 라이브러리 집에 노트가 있다. A4 공책. '좋은 테스트 패턴 모음'이라고 썼다. 주말마다 앱 쓰면서 발견한 거 정리한다. 입력 검증 패턴실시간 검증 vs 제출 시 검증 (언제가 적절한가) 에러 메시지 위치 (입력 칸 아래 vs 상단 토스트) 자동 포맷팅 (전화번호, 카드번호)버튼 상태 패턴로딩 중 비활성화 연타 방지 (디바운싱, 스로틀링) 제출 후 상태 유지 (재전송 방지)네트워크 에러 패턴타임아웃 처리 (보통 30초) 재시도 로직 (자동 vs 수동) 오프라인 모드 안내권한 요청 패턴필요 시점에 요청 (앱 시작이 아닌) 거부 후 처리 (재요청 주기, 설정 이동) 필수 vs 선택 권한 구분회사에서 테스트할 때 이 노트 본다. '저기서 본 방식이 낫지 않나?' 제안한다. 다 받아들여지진 않는다. 개발 일정이 빠듯하거나. 기획 의도가 다르거나. 그래도 30%는 반영된다. 그것만으로도 의미 있다. 개발자들은 모르는 것들 개발자들이랑 얘기하면 신기해한다. "주말에도 테스트해요?" 아니다. 테스트가 아니다. 그냥 쓰는 거다. 근데 보이는 거다. 개발자들은 자기 기능만 본다. 로그인 개발자는 로그인만. 결제 개발자는 결제만. 근데 사용자는 전체를 쓴다. 로그인하고, 상품 보고, 결제하고, 리뷰 쓴다. 플로우가 중요하다. 이 플로우를 제일 많이 타는 사람. QA다. 우리다. 그래서 다른 앱 쓰는 게 공부다. 어떻게 플로우 설계했나. 어디서 막히나. 어떻게 에러 처리하나. 교과서가 없다. 다른 앱이 교과서다. 월요일 아침 회의 출근했다. 주간 회의. PM이 물었다. "이번 주 개선 제안 있어요?" 손 들었다. "비밀번호 재입력 칸, 페이스트 허용하면 어떨까요?" 개발자 한 명이 물었다. "보안 이슈 아닌가요?" 설명했다. 첫 입력은 막고 재입력만 푼다고. 뱅킹 앱들이 그렇게 한다고. 보안과 사용성 균형이라고. PM이 끄덕였다. "괜찮네요. 다음 스프린트에 넣죠." 기분 좋았다. 주말 공부가 회사에 도움됐다. "또 뭐 있어요?" "상품 필터 해제할 때 데이터 새로고침 확인 필요합니다. 제가 본 앱은 필터 해제 시 일부 아이템이 안 보이더라고요." 개발자가 웃었다. "민수님 주말에 뭐 하세요?" "앱 씁니다." "우리 앱요?" "아뇨. 다른 앱들이요." 다들 웃었다. 근데 진짜다. 직업병의 장점 처음엔 스트레스였다. 앱 하나 편하게 못 쓴다고. 항상 뭔가 찾는다고. 근데 이제는 장점이다. 실력이 늘었다. 테스트 시나리오 짜는 속도가 빨라졌다. 다양한 패턴을 알게 됐다. 어디를 집중적으로 볼지 안다. 제안이 구체적이다. "이렇게 하면 좋겠어요"가 아니라. "A앱은 이렇게 하던데, 우리도 적용하면 어떨까요?" 실제 사례가 있으니 설득력 있다. 버그 찾는 감이 생겼다. '여기 뭔가 있을 것 같은데.' 이 직감이 70% 맞는다. 경험이 쌓인 거다. 면접 볼 때도 도움됐다. 저번에 이직 면접 봤다. (결국 안 갔지만) "평소에 어떻게 공부하세요?" "주말에 다른 앱들 써보면서 좋은 패턴 연구합니다. 노트에 정리하고 있습니다." 면접관 표정이 달라졌다. "오 그런 사람 처음 봤는데요?" 떨어지진 않았다. 연봉 협상 단계까지 갔다. (연봉이 별로 안 올라서 포기했지만) 카페를 나서며 시계 봤다. 5시. 2시간 앉아 있었다. 폰에 메모 5개 추가됐다. 집 가서 노트에 정리해야지. 카페 나서면서 생각했다. 다른 직군은 뭐 하나. 개발자들은 코드 짠다. 토이 프로젝트. 디자이너들은 작업물 본다. 포트폴리오 준비. QA는 뭐 하지? 앱 쓴다. 버그 찾는다. 패턴 공부한다. 이게 맞나 싶기도 하다. 이게 성장인가 싶기도 하다. 근데 월요일 되면 알게 된다. 회의 때 한 마디 던지면. "저기요, 제가 주말에 본 앱은요." 다들 듣는다. 참고한다. 그럼 된 거다. 의미 있는 거다.주말 2시간, 5개 앱, 20개 테스트 케이스. 이게 내 공부법이다.
- 15 Dec, 2025
한 달에 한 번 엄마한테 전화 - 일 얘기는 못 하고
한 달에 한 번 엄마한테 전화 - 일 얘기는 못 하고 통화 버튼을 누르기까지 일요일 저녁 8시. 폰을 본다. 엄마한테 전화해야 한다. 지난달 27일에 했으니까 오늘로 딱 한 달. 더 미루면 엄마가 먼저 전화한다. 그럼 마음이 더 불편하다. 통화 버튼을 누른다. 두 번 신호음. 엄마가 받는다. "어, 민수야?" "응, 엄마." "밥은 먹었어?" 매번 같은 시작이다.일 잘 되냐는 질문 밥 먹었다고 대답한다. 김치찌개 끓여 먹었다고. 엄마가 좋아한다. 집에서 밥 해먹는다는 게. "요즘 일은 어때?" 이 질문이 온다. 매번. "응, 괜찮아." 더 할 말이 없다. 사실 지난주에 배포 전날 새벽 3시까지 일했다. 최종 빌드에서 결제 버그가 나왔다. 재현 스텝 정리하고 개발자 불러내고 핫픽스 확인하고. 집에 와서 씻지도 못하고 잤다. 그런데 엄마한테 이걸 어떻게 설명하나. "회사에서 뭐 하는 거라고 했지? 컴퓨터로 뭐 고치는 거?" 작년에 설명했다. 올해도 설명했다. 엄마는 아직도 모른다. "앱 테스트하는 거야. 버그 찾는 거." "버그? 벌레?" "아니, 오류. 프로그램 오류." "아, 그래그래. 그거 하는구나." 이해 못 한다. 나도 안다.이해시키려고 했던 때 2년 전쯤. 명절에 대전 내려갔다. 친척들 모였다. 다들 물어본다. 뭐 하냐고. "IT 회사 다녀요. QA 엔지니어요." "오, 개발자구나!" "아니요, 테스트 하는..." "아, 그것도 개발이지 뭐." 설명했다. 개발자가 만든 앱을 테스트한다고. 버그를 찾아서 보고한다고. 품질을 책임진다고. 큰아버지가 물었다. "그럼 너는 만드는 건 아니고?" "네, 확인하는 거죠." "아... 그렇구나." 공기가 미묘하게 식었다. 사촌형이 물었다. "그거 연봉은 어때?" "4천 좀 넘어요." "오, 괜찮네." 근데 사촌형 연봉은 7천이다. 개발자다. 그날 이후로 일 얘기 자세히 안 한다. 엄마가 자랑하는 것들 엄마 친구들한테는 뭐라고 하는지 안다. "우리 아들 서울서 IT 회사 다녀." 거기까지만 한다. 구체적으로 뭐 하는지는 안 말한다. 아마 모를 거다. 한 번은 엄마가 물었다. "너 회사에서 중요한 일 해?" 뭐라고 대답해야 할까. 중요하다. 내가 놓친 버그가 배포되면 큰일 난다. 유저들한테 욕먹는다. 회사 이미지 망가진다. 매출 떨어진다. 근데 개발자가 안 만들면 내가 테스트할 것도 없다. 기획자가 스펙 안 주면 나는 뭘 확인해야 할지 모른다. 나는 중요한가? 필요한가? "응, 중요하지." 그렇게 대답했다. 엄마는 만족했다.실제로 하는 일 월요일 아침. 어제 올라온 빌드 확인한다. 로그인 플로우 테스트. 회원가입 플로우 테스트. 메인 화면 로딩 체크. 이미지 깨짐 확인. 버튼 동작 확인. 텍스트 오타 확인. 오전 11시. 버그 3개 발견. Jira에 등록한다.[Critical] 결제 완료 후 화면 멈춤 [Major] 프로필 이미지 업로드 실패 [Minor] 설정 화면 레이아웃 깨짐개발자한테 슬랙 보낸다. "민호님, 결제 버그 확인 부탁드려요. 재현 스텝 Jira에 올렸습니다." 30분 뒤. 답장 온다. "제 폰에서는 안 그러는데요?" 매번 듣는 소리다. 내 폰 들고 개발자 자리로 간다. 재현한다. 1, 2, 3번 스텝. 버그 터진다. "아... 이거 iOS 14.5에서만 그러네요." "네, 그래서 디바이스 정보 적어뒀어요." "아, 확인했습니다. 수정할게요." 돌아와서 다음 테스트한다. 이게 내 일이다. 자랑할 수 없는 순간들 개발자는 자랑한다. "이번에 신기능 개발했어요. 사용자 반응 좋아요." 기획자도 자랑한다. "이번 기획으로 전환율 20% 올랐습니다." 디자이너도 자랑한다. "리디자인 후 앱스토어 평점 올랐어요." 나는? "이번 배포에서 Critical 버그 없었습니다." 박수 없다. 버그 없는 게 당연하니까. 근데 버그 나오면 내 책임이다. "QA 뭐 했어요?" 불공평하다고 생각했다. 예전에는. 이제는 안 그렇다. 이게 내 일이니까. 버그 막는 게 성과다. 눈에 안 보여도. 엄마는 걱정한다 "야근 많이 해?" "아니, 괜찮아." 거짓말이다. 지난주 야근 4일. 이번 주도 배포 있으면 3일은 할 거다. "밥은 잘 먹고 다녀?" "응, 잘 먹어." 어제 편의점 도시락 먹었다. 배포 확인하면서. "여자친구는 잘 지내?" "응, 잘 지내." 지난주에 싸웠다. 주말에 만나기로 했는데 핫픽스 때문에 취소했다. 이해해 준다고 했는데 목소리가 차가웠다. 엄마한테 이런 얘기 못 한다. 걱정할까 봐. "그래, 건강 챙겨라." "응, 엄마도." 통화 끝난다. 15분 걸렸다. 핸드폰 내려놓는다. 뭔가 허전하다. 설명할 수 없는 것들 QA 일을 설명하기 어려운 이유. 눈에 보이는 결과물이 없다. 개발자는 코드를 보여준다. 디자이너는 디자인을 보여준다. 기획자는 기획서를 보여준다. 나는? 버그 리포트? Jira 티켓? 테스트 케이스? 엄마한테 보여줘도 이해 못 한다. "이게 뭐야?" "버그 재현 스텝이요." "...그래." 그냥 모른다. 내가 매일 뭐 하는지. 얼마나 중요한지. 얼마나 힘든지. 설명해도 소용없다. 경험 안 해본 사람은 몰라. 근데 섭섭하진 않다. 이상하게. 엄마가 이해 못 하는 게 오히려 편하다. 일 얘기 안 해도 되니까. 스트레스 얘기 안 해도 되니까. "잘 지내냐?" "응, 잘 지내." 그걸로 충분하다. 실은 말하고 싶은 것들 가끔 생각한다. 엄마한테 진짜 얘기하면 어떨까. "엄마, 나 요즘 힘들어." "왜?" "배포 전에 버그 못 찾을까 봐 무서워. 배포 후에 버그 나오면 내 잘못 같아. 개발자들은 내가 일 못 한다고 생각하는 것 같아." "자동화 공부해야 하는데 시간이 없어. 경력 쌓아도 어디까지 갈 수 있을지 모르겠어. QA는 아무나 하는 거 아니냐는 소리 들으면 화나." "연봉은 개발자보다 적어. 승진도 느려. 이 일 계속해도 되는 걸까?" 이렇게 말하고 싶다. 근데 말 안 한다. 엄마가 뭐라고 할지 뻔하니까. "그럼 다른 일 알아봐." "그 일이 그렇게 힘들면 그만둬." "건강이 최우선이야." 틀린 말 아니다. 근데 위로가 안 된다. 엄마는 내 일을 모른다. 내 고민을 이해 못 한다. 그래서 말 안 한다. 그래도 전화하는 이유 한 달에 한 번. 일요일 저녁. 엄마한테 전화한다. 일 얘기는 안 한다. 밥 먹었다고만 한다. 잘 지낸다고만 한다. 15분 통화. 별 내용 없다. 근데 이상하게 마음이 편해진다. 엄마 목소리 들으면. "밥은 먹었어?" "건강 챙겨라." "잘 지내고 있지?" 이 말들이 좋다. 내 일을 이해 못 해도. 내 스트레스를 몰라도. 나를 걱정한다는 게 느껴진다. 그걸로 충분하다. 월요일 아침. 출근한다. 어제 엄마랑 통화했다는 것만으로 기분이 조금 낫다. 버그 찾으러 간다. 오늘도. 이해받지 못해도 QA 커뮤니티에서 봤다. "부모님이 내 일 이해 못 하는 게 서러워요." 댓글 많았다. "저도요." "우리 엄마는 제가 컴퓨터 수리하는 줄 알아요." "아빠가 개발자 아니냐고 계속 물어봐요." 다들 비슷하다. QA는 설명하기 어려운 직업이다. 만드는 게 아니고. 고치는 것도 아니고. 확인하는 거다. 이게 얼마나 중요한지. 얼마나 전문적인지. 경험 안 해본 사람은 몰라. 부모님도. 친척들도. 친구들도. 가끔 외롭다. 근데 괜찮다. 회사에는 안다. 내가 뭐 하는지. 개발자는 안다. 내가 얼마나 꼼꼼한지. 기획자는 안다. 내가 얼마나 스펙을 파고드는지. 같은 팀 사람들은 안다. 배포 전날 내가 얼마나 긴장하는지. 그걸로 충분하다. 엄마가 이해 못 해도. 가족이 설명 못 들어도. 내 일은 의미 있다. 다음 통화까지 다음 달. 또 일요일 저녁에 전화할 거다. 엄마가 물어볼 거다. "일은 어때?" "괜찮아." 그렇게 대답할 거다. 여전히 일 얘기는 안 할 거다. 버그 얘기도. 야근 얘기도. 개발자랑 싸운 얘기도. 그냥 잘 지낸다고만 할 거다. 근데 이제 알겠다. 엄마가 내 일을 이해하는 게 중요한 게 아니다. 내가 내 일을 이해하는 게 중요하다. 나는 안다. 이 일이 왜 중요한지. 왜 필요한지. 왜 계속하는지. 그걸로 충분하다. "민수야, 거기서 행복해?" 엄마가 가끔 물어본다. "응." 거짓말 아니다. 힘들어도. 스트레스 받아도. 인정 못 받아도. 나는 이 일이 좋다. 버그 찾을 때. 재현 스텝 정리할 때. 배포 후 모니터링할 때. 이게 내 일이다.다음 일요일에도 전화한다. 15분이면 충분하다.