Showing Posts From
배포
- 27 Dec, 2025
QA는 아무나 하는 거 아니야 - 세상 모르는 사람들에게
QA는 아무나 하는 거 아니야 - 세상 모르는 사람들에게 또 들었다 "QA요? 그냥 앱 좀 만져보는 거 아니에요?" 고등학교 동창 결혼식에서 들었다. 옆자리 누군가가 물어봤다. 뭐 하냐고. QA 엔지니어라고 했다. 반응이 시큰둥했다. "아, 그거 클릭하고 버그 찾는 거?" "개발은 못 하고?" "그거 아르바이트생도 하던데." 웃으면서 넘겼다. 설명할 기력이 없었다. 어차피 이해 못 한다. 집에 와서 생각했다. 언제까지 이럴 건가. 왜 매번 설명해야 하나. 왜 QA는 쉬운 일로 보이나.아무나 못 한다 4년 했다. 아직도 배운다. 매일 새로운 엣지 케이스가 나온다. 매일 예상 못 한 버그를 만난다. 입사 동기 중에 3명이 QA였다. 1년 안에 2명이 그만뒀다. "생각보다 힘들어서요." "단순 반복인 줄 알았는데." 남은 1명이 나다. 왜 버텼나. 버그를 찾는 게 재밌어서. 시스템을 이해하는 게 좋아서. QA는 앱을 가장 깊이 아는 사람이다. 개발자는 자기 파트만 안다. 기획자는 스펙만 안다. QA는 전체를 본다. 로그인부터 결제까지. 메인 플로우부터 서브 기능까지. 정상 케이스부터 비정상 케이스까지. 모든 경로를 다 안다. 그게 아무나 하는 거라고? 실제로 하는 일 오전 9시 30분. 어제 올라온 빌드 다운. 체인지로그 확인. 수정된 기능 3개, 신규 기능 1개. 테스트 케이스 작성. 정상 플로우 10개. 예외 상황 15개. 엣지 케이스 8개. 실행한다. 5번째 케이스에서 크래시. 재현한다. 3번 연속. Jira에 등록. 재현 스텝 작성:로그인 (테스트 계정) 마이페이지 진입 프로필 수정 탭 닉네임 입력창에 이모지 30개 연속 입력 저장 버튼 클릭 크래시 발생로그 첨부. 스크린샷 5장. 디바이스 정보. OS 버전. 앱 버전. 개발자가 답글 단다. "제 폰에선 안 그러는데요?" 다시 재현. 영상 녹화. 슬랙으로 전송. "이거 보세요." 오후 2시. 수정 빌드 올라왔다. 다시 테스트. 이번엔 통과. 근데 다른 게 깨졌다. 프로필 사진이 안 보인다. 또 등록. 이게 오전이다. 오후는 더 복잡하다.책임의 무게 배포일이다. 새벽 2시까지 테스트했다. 눈 감고도 테스트할 수 있다. 모든 케이스 통과했다. 배포한다. 오전 10시. 오후 3시. 슬랙에 메시지. "결제가 안 돼요." 심장이 멎는다. 어떻게 놓쳤지. 테스트했는데. 분명 했는데. 확인한다. 아이폰 13 이상에서만 발생. 내 테스트폰은 아이폰 12였다. 디바이스 커버리지 부족. 핫픽스 들어간다. CTO가 물어본다. "QA는 뭐 했어요?" 말이 안 나온다. 변명해봤자다. 내 책임이다. 그날 퇴근하면서 생각했다. QA가 놓치면 유저가 본다. 유저가 보면 회사 이미지 타격. 타격은 매출로 이어진다. 무거운 일이다. 아무나 못 한다. 보이지 않는 전문성 사람들은 모른다. 테스트 케이스 설계가 얼마나 어려운지. 어디를 찔러야 버그가 나올지 아는 감. 시스템 동작 원리 이해. HTTP 통신 안다. Charles Proxy로 패킷 잡는다. API 응답값 확인한다. 프론트 문제인지 백엔드 문제인지 구분한다. 로그 본다. 에러 코드 해석한다. 스택 트레이스 읽는다. 개발자한테 구체적으로 전달한다. SQL 쿼리 짠다. 테스트 데이터 직접 만든다. DB 상태 확인한다. 데이터 정합성 체크한다. Git 쓴다. 브랜치 전략 안다. 어느 커밋에서 버그 생겼는지 추적한다. 자동화 스크립트 짠다. Python, Selenium, Appium. Regression 테스트 자동화한다. CI/CD 파이프라인에 붙인다. 이게 클릭만 하는 일인가.개발자와의 관계 개발자랑 싸운다. 매일은 아니고 자주. "이거 버그예요." "스펙이에요." 기획서 다시 본다. 애매하다. 기획자한테 물어본다. "이건 버그 맞아요." 개발자한테 다시 간다. "기획자가 버그래요." "아, 네. 고칠게요." 이런 중재를 하루에 5번. 근데 좋은 개발자도 있다. 버그 리포트 보고 칭찬한다. "재현 스텝 완벽하네요." "덕분에 바로 찾았어요." 그럴 때 보람 있다. QA 잘했다는 생각. 애증이다. 서로 필요하다. 개발자 없으면 내가 테스트할 게 없다. QA 없으면 개발자는 유저한테 욕먹는다. 성장의 한계 고민이 있다. QA로 어디까지 갈 수 있나. 시니어 QA. QA 리드. QA 매니저. 그 다음은? 개발 전환? PM 전환? 아니면 계속 QA? 연봉도 고민이다. 같은 연차 개발자는 6000만원. 나는 4200만원. 능력 차이인가. 직무 차이인가. 회사에서 QA 가치를 모른다. "테스트 범위 줄여주세요." "일정이 빠듯해서요." 품질보다 속도. 버그보다 일정. 그럴 때마다 회의감. 내가 뭐 하는 건가. 그래도 계속한다 포기 안 한다. QA가 좋아서. 버그 찾았을 때 쾌감. 시스템 이해했을 때 만족감. 유저가 편하게 쓸 때 뿌듯함. 내가 막은 버그가 있다. 유저는 모른다. 개발자도 잊어버린다. 나만 안다. 그거면 된다. 자동화 공부한다. 더 효율적으로 일하려고. 더 많은 케이스 커버하려고. QA 커뮤니티 활동한다. 다른 QA들 만난다. 고민 공유한다. "나만 그런 거 아니구나." 블로그 쓴다. QA 노하우 정리한다. 나중에 후배 생기면 도움 될 것. 말하고 싶다 QA는 전문직이다. 아무나 못 한다. 클릭만 하는 게 아니다. 생각한다. 분석한다. 판단한다. 책임진다. 무겁다. 힘들다. 근데 필요하다. 누군가는 해야 한다. 다음에 또 들으면 말할 거다. "한번 해보시겠어요?" "테스트 케이스 100개 만들어보세요." "배포 전날 밤샘해보세요." 그럼 알 거다. QA가 뭔지.내일도 버그 찾으러 간다. 오늘보다 더 많이.
- 12 Dec, 2025
회의실 안 '스펙 토론' vs 카톡 '스펙 변경' - 소통의 미로
회의실 안 '스펙 토론' vs 카톡 '스펙 변경' - 소통의 미로 오전 10시, 기획 회의 회의실에 앉았다. 기획자, 디자이너, 개발자, 그리고 나. "이번 업데이트 스펙입니다." 기획자가 화면을 띄운다. 1시간 동안 이야기했다. 로그인 플로우 변경, 버튼 위치 수정, 에러 메시지 개선. 꼼꼼히 적었다. 엣지 케이스 질문했다. "네트워크 끊기면요?" "로그인 실패 3번 하면요?" 회의록이 공유됐다. Confluence에 올라갔다. 깔끔하다. 이제 이대로 테스트하면 된다. 그게 아니었다.오후 3시, 카톡이 울린다 "민수님~ 로그인 화면 버튼 색깔 바뀌었어요 ㅎㅎ" 기획자 카톡이다. 개인 톡으로 왔다. 아침 회의에서 파란색이라고 했는데 이제 빨간색이란다. "디자이너님이 UX 고려해서 바꿨대요~" 적었다. 메모장에. 하지만 이건 시작이었다. 4시. 개발팀 단톡방. "에러 메시지 텍스트 좀 바꿨습니다. '네트워크 오류' → '연결 실패' 더 직관적이죠?" 누가 결정했지? 회의에선 안 나온 이야기다. 그런데 이미 코드에 반영됐단다. 5시. 디자이너 개인 톡. "민수님 아이콘 사이즈 2px 줄였어요. 전체적 밸런스 위해서요." 2px. QA가 확인해야 할까? 해야 한다. 다른 화면에서 깨질 수 있다. 6시. 기획자가 전체 톡방에. "아 맞다, 로그아웃 후 자동 로그인 팝업 빼기로 했어요. CEO님 피드백이요." 언제 결정났지? 오전 회의 후 점심때 CEO랑 얘기했단다.퇴근 전, 테스트 범위 재정리 노트북 앞에 앉았다. 테스트 케이스를 다시 봤다. 아침에 정리한 거다. 이제 절반이 틀렸다. 버튼 색깔, 메시지 텍스트, 아이콘 사이즈, 팝업 제거. 전부 카톡으로 통보됐다. TestRail 들어갔다. 케이스 수정한다. 20개가 영향 받는다. 한 시간 걸렸다. 문제는 따로 있다. 내가 못 본 톡이 있을까? 개인 톡, 팀 톡, 전사 톡. 3개 채널을 다시 확인했다. 있었다. 오후 2시, 개발자 A가 개발팀 톡방에 올린 거다. "로딩 인디케이터 라이브러리 바꿨습니다. 디자인은 같은데 애니메이션이 좀 달라요." 나는 기획 톡방만 보고 있었다. 놓쳤다. 이게 3번째다. 이번 달만. 왜 카톡으로 바뀌는가 생각해봤다. 회의는 무겁다. 시간 잡아야 하고, 사람 모아야 하고, 안건 만들어야 한다. 작은 변경에는 과하다. 카톡은 가볍다. 생각나면 바로 보낸다. 30초 걸린다. "아 이거 바꿔야겠다" 싶으면 타이핑한다. 문제는 QA는 무거운 일을 한다는 거다. 작은 변경도 전체 시나리오를 확인해야 한다. 버튼 색깔 하나 바뀌어도 명암비 체크, 다크모드 확인, 장애인 접근성 검토. 가볍게 넘길 수 없다. 개발자는 코드 한 줄이다. 기획자는 문서 한 줄이다. QA는 테스트 케이스 20줄이다. 온도 차이가 크다. 그리고 실시간성. 카톡은 지금 당장이다. "이거 오늘 반영할게요~" 확인 요청이 아니라 통보다. 이미 PR 올라갔다. 내일 배포 예정이다. 회의는 합의다. "이렇게 하면 어떨까요?" 의견 묻는다. 카톡은 공지다. "이렇게 했어요." 사후 통보다.놓치지 않으려고 한 것들 처음엔 그냥 열심히 봤다. 모든 톡방을 10분마다 확인했다. 일이 안 됐다. 테스트하다가 톡 보고, 톡 보다가 테스트하고. 집중이 안 된다. 그래서 규칙을 만들었다. 1. 톡 확인 시간 정하기 오전 11시, 오후 3시, 퇴근 전. 3번만 본다. 긴급한 건 전화 오라고 했다. 실제로 긴급한 건 거의 없었다. 효과는 있었다. 테스트 집중도가 올라갔다. 하지만 변경사항 놓치는 건 그대로였다. 오후 3시에 확인하는데 2시에 올라온 변경이 4시 빌드에 들어간다. 2. '스펙 변경' 키워드 검색 퇴근 전에 했다. 모든 톡방에서 '변경', '수정', '바꿨', '추가' 키워드 검색. 30분 걸렸다. 건졌다. 개발자가 "참고로 이거 수정했습니다" 하고 지나간 거. 기획자가 "아 이거 빼는 걸로" 한 거. 전부 찾아냈다. 문제는 매일 30분이 들어간다는 거다. 그리고 키워드 없이 올라온 건 못 찾는다. "네 알겠습니다" 하고 끝난 대화. 뭘 알겠다는 건지 위로 스크롤해야 안다. 3. 변경사항 정리 스레드 만들기 팀 톡방에 제안했다. "스펙 변경은 여기에만 올려주세요." 고정 메시지로 공지했다. 일주일 갔다. 그 다음 주엔 다들 잊었다. 여기저기 흩어졌다. 습관이 안 됐다. 4. 회의록에 실시간 업데이트 Confluence 페이지를 살려보려고 했다. "변경사항 로그" 섹션을 만들었다. 카톡 내용을 직접 복사해서 붙였다. 나만 했다. 다른 사람은 안 했다. 결국 내가 모든 톡을 확인해서 옮기는 일이 됐다. 이중 작업이다. 개발자 민준이와 대화 커피 마시러 나갔다. 민준이를 만났다. 시니어 개발자다. "형, 스펙 변경 왜 톡으로만 말해요?" "아 그거? 회의록 수정하기 귀찮아서요." 솔직하다. "그런데 제가 놓치면 버그 되잖아요." "그러게요. 근데 작은 건데 또 회의 잡기는..." 이해는 간다. 회의는 무겁다. 30분 회의 잡으려면 시간 조율에 1시간 걸린다. 그냥 톡으로 끝내면 1분이다. "그럼 톡방 하나 만들까요? 변경사항 전용." "이미 톡방 10개인데요." 맞다. 전사 톡, 팀 톡, 프로젝트 톡, 배포 톡, 긴급 톡. 또 만들면 혼란만 더하다. "Jira 티켓에 코멘트는요?" "음... 티켓 번호 찾기 귀찮아요." 결국 편의성이다. 카톡이 제일 쉽다. 앱 열면 바로 있다. 생각나면 바로 친다. 그럼 QA가 적응해야 하나? 아니면 프로세스를 바꿔야 하나? 기획자 지은이와 점심 지은이는 기획 3년차다. 같이 도시락 먹었다. "지은아, 스펙 바뀔 때 QA한테 어떻게 알려주는 게 좋을까?" "음... 톡으로 말하면 안 돼요?" "그런데 제가 못 볼 수도 있잖아요." "아 그럼 멘션 달게요?" 멘션. 생각 못 했다. "근데 톡방이 여러 개라서요. 어디에 달아야 하는지..." "그것도 그렇네요." 지은이도 고민이 있었다. 작은 변경을 회의록에 쓰려면 Confluence 들어가야 한다. 로그인하고, 페이지 찾고, 수정 권한 확인하고. 5분 걸린다. "그냥 빠르게 전달하고 싶거든요. 그래야 까먹기 전에..." 까먹기 전에. 여기 핵심이 있다. 스펙은 생각의 흐름이다. 회의 끝나고 점심 먹다가 생각난다. "아 저거 이렇게 하는 게 낫겠다." 메모 안 하면 잊는다. 그래서 바로 카톡 친다. 기획자 입장에선 합리적이다. QA 입장에선 파편화다. 결국 찾은 방법들 완벽한 답은 없었다. 그래도 조금 나아졌다. Daily Sync 15분 매일 오전 10시. 서서 한다. 기획자, 개발자, QA. 어제 바뀐 것들 빠르게 공유. 톡으로 올린 것도 여기서 다시 말한다. 처음엔 귀찮아했다. "톡으로 했는데 또요?" 그래도 밀어붙였다. 2주 지나니 자연스러워졌다. 효과가 있다. 민준이가 "아 그거 로딩 바 바꿨어요" 하면 내가 바로 묻는다. "애니메이션 속도도 달라졌어요?" "네." 바로 확인된다. 톡에선 이런 대화가 안 된다. 물어보면 답이 30분 뒤 온다. 일하다가 까먹는다. 변경사항 라벨링 톡에 규칙 하나 만들었다. 스펙 변경 메시지 앞에 "[변경]" 붙이기. "[변경] 로그인 버튼 색상 빨강으로 수정" 이러면 검색이 쉽다. "[변경]" 키워드로 찾으면 다 나온다. 100% 지켜지진 않지만 60% 정도는 된다. 처음보단 낫다. 빌드 노트 강제화 개발자가 빌드 올릴 때 변경사항 써야 한다. TestRail에 자동으로 올라간다. 안 쓰면 빌드 배포 안 된다. "버튼 색상 변경", "에러 메시지 텍스트 수정", "팝업 제거". 짧아도 좋다. 있으면 된다. 민준이가 처음엔 짜증냈다. "이거 쓰는 시간에 코드 한 줄 더 쳐요." 그래도 지금은 쓴다. 익숙해졌다. QA 입장에선 생명줄이다. 빌드 받으면 제일 먼저 본다. 뭐가 바뀌었는지 알아야 테스트한다. 주간 스펙 리뷰 금요일 4시. 1시간. 이번 주 바뀐 것들 전체 리뷰. 회의록 업데이트한다. 톡에 흩어진 내용들을 정리한다. 귀찮다. 하지만 안 하면 더 귀찮다. 다음 주에 "이거 언제 바뀌었어요?" 물으면 아무도 모른다. 톡 검색하면 3주 전 나온다. 문서화는 미래의 나를 위한 거다. 여전히 어려운 것들 나아졌지만 완벽하진 않다. CEO 직접 지시는 막을 수 없다. "이거 이렇게 바꿔" 하면 기획자가 바로 반영한다. QA 거치지 않는다. 배포 전날 알게 된다. 디자이너 판단 변경도 그렇다. "이게 더 예쁘잖아요" 하면서 바뀐다. 미학적 결정은 회의 안 거친다. QA는 나중에 본다. 개발 중 발견한 기술적 한계. "이거 안 돼요. 다르게 할게요." 이미 코드 바뀌었다. QA는 테스트하면서 안다. "어? 스펙이랑 다른데?" "아 그거 안 돼서 바꿨어요." 실시간 협업이 좋은 건지 나쁜 건지 모르겠다. 빠르게 바뀌는 건 좋다. 시장 반응 보고 즉시 수정한다. 경쟁사 기능 보고 바로 추가한다. 민첩하다. 하지만 QA는 따라가기 힘들다. 품질 확인은 시간이 필요하다. 빠른 변경과 꼼꼼한 테스트는 반대 방향이다. 어디서 균형을 잡아야 할까? 결국 사람 문제 프로세스를 아무리 만들어도 안 지켜지면 끝이다. "Daily Sync 하자" → 2주 뒤 흐지부지 "변경사항 라벨 붙이자" → 반만 지켜짐 "빌드 노트 쓰자" → 형식적으로만 왜 안 될까? 귀찮아서다. 개발자는 코드 짜는 게 일이다. 문서 쓰는 건 부가 업무다. 기획자는 기획하는 게 일이다. 회의록 업데이트는 귀찮다. QA만 문서를 생명처럼 여긴다. 테스트 케이스가 없으면 일을 못 한다. 변경사항 모르면 버그를 놓친다. 그래서 QA가 더 적극적으로 물어봐야 한다. "혹시 바뀐 거 있어요?" 매일 묻는다. 귀찮게 군다. 안 그러면 놓친다. 좋은 QA의 조건: 귀찮은 사람. 농담 아니다. 계속 확인하고, 계속 물어보고, 계속 문서화한다. 안 그러면 품질이 무너진다. 다른 회사는 어떨까 QA 커뮤니티에 물어봤다. A사: Jira 티켓 필수. 스펙 변경은 무조건 티켓. 카톡 금지. 티켓 없으면 테스트 안 함. 엄격하다. 부럽다. 우리 회사는 안 될 것 같다. "티켓 만들기 귀찮아요" 할 게 뻔하다. B사: Slack 스레드 활용. 변경사항은 특정 채널에만. 봇이 자동으로 문서 업데이트. 좋다. 하지만 우리는 카톡이다. Slack 도입 제안했다가 거절당했다. "익숙한 게 카톡인데..." C사: 주간 빌드만 테스트. 일일 변경 추적 안 함. 큰 변경만 확인. 이건 포기 아닌가? QA가 할 일을 줄인 거다. 품질은? D사: QA가 기획 회의 필참. 모든 결정 자리에 있음. 이상적이다. 하지만 회의가 너무 많아진다. 하루 종일 회의만 하다가 끝날 수도. 정답은 없다. 회사마다 다르다. 우리 회사에 맞는 걸 찾아야 한다. 내가 배운 것 완벽한 프로세스는 환상이다. 사람이 하는 일이라 늘 구멍이 있다. 카톡으로 통보되고, 회의록은 늦게 업데이트되고, 작은 변경은 놓친다. 그래도 할 수 있는 것:매일 물어보기. "바뀐 거 있어요?" 빌드마다 변경사항 확인. 눈으로 직접. 톡방 검색. 매일 키워드 검색. 문서화. 내가 직접. 남 기대 안 함. 관계 유지. 개발자, 기획자랑 친하게. 그래야 먼저 말해줌.특히 5번이 중요하다. 민준이랑 친하니까 "아 민수님, 이거 바꿀 건데 확인해주세요" 미리 말해준다. 지은이랑 친하니까 "민수 오빠, 이거 변경 예정인데 큰 거예요?" 물어본다. 프로세스보다 관계가 강하다. QA는 까칠하면 안 된다. "왜 말 안 했어요?" 따지면 다음엔 더 안 말해준다. "아 그랬구나, 알려줘서 고마워요" 해야 다음에도 말해준다. 버그 찾는 일도 중요하지만, 사람 사이에서 정보 찾는 일도 중요하다. 오늘도 카톡이 온다 퇴근 10분 전이다. 카톡이 울렸다. "민수님~ 내일 배포인데 버튼 텍스트 살짝 바꿨어요. '확인' → '완료'. 뉘앙스 차이요 ㅎㅎ" 한숨 나온다. 또 케이스 수정해야 한다. 하지만 화내지 않는다. "알겠습니다~ 확인할게요" 답장 보낸다. 노트북 연다. TestRail 들어간다. '확인' 검색한다. 7개 케이스가 나온다. 전부 '완료'로 바꾼다. 10분 걸렸다. 내일 아침 빌드 받으면 확인한다. 정말 바뀌었는지. 다른 곳은 안 바뀌었는지. 버튼 크기는 괜찮은지. 이게 내 일이다. 회의실에서 결정되든, 카톡으로 통보되든, 내가 확인해야 한다. 놓치면 버그가 된다. 유저가 발견한다. 별점 1점 리뷰 올라온다. "업데이트 후 이상해요." 그게 싫다. 그래서 오늘도 톡방을 확인한다. 검색한다. 물어본다. 문서화한다. 완벽할 순 없지만 최선을 다한다.카톡 알림 끄고 싶다. 하지만 그럼 놓친다. 딜레마다.
- 11 Dec, 2025
QA도 개발자인가? - 커리어 고민 밤샘 일지
QA도 개발자인가? - 커리어 고민 밤샘 일지 새벽 2시, 자동화 코드 새벽 2시다. 파이썬 코드를 본다. Selenium 자동화 강의를 듣는다. 3개월째다. 주말마다 4시간씩 투자한다. 오늘은 로그인 자동화를 구현했다. ID 입력, 비밀번호 입력, 버튼 클릭. 10줄짜리 코드다. 근데 이게 개발인가? 아니면 그냥 스크립트인가?코드가 돌아간다. 로그인 성공. 기분이 묘하다. 수동으로 했으면 30초 걸렸을 것이다. 코드 짜는 데 2시간 걸렸다. 개발자들이 이런 기분인가. 스터디 모임에서 들은 질문 지난주 토요일. QA 자동화 스터디였다. 5명이 모였다. 다들 비슷한 고민이다. "너 나중에 뭐 될 거야? QA? 개발자?" 30대 형이 물었다. 6년차 QA다. "저는... 잘 모르겠어요." 솔직히 대답했다."나도 그랬어. 4년차 때." 형이 말했다. "근데 결국 선택해야 돼. 애매하게 가면 둘 다 안 되더라." 무겁게 다가왔다. 채용 공고를 본 날 월요일 오전. 점심시간에 사람인을 켰다. '자동화 QA 엔지니어' 공고였다. 우대사항:Python, Java 능숙자 CI/CD 구축 경험 API 테스트 자동화 성능 테스트 도구연봉 5000~6500만원. 다음 공고. '주니어 백엔드 개발자'였다. 자격요건:Python, Java 능숙자 RESTful API 개발 경험 데이터베이스 설계 Git, 협업 도구연봉 4500~6000만원. 요구사항이 비슷했다. 근데 커리어 방향은 다르다. 나는 뭘 준비해야 하나. 개발팀 민호 형과의 점심 화요일. 민호 형이랑 점심 먹었다. 4년차 백엔드 개발자다. 나랑 동갑이다. "형, 개발 재밌어?" 물었다. "재밌지. 근데 너도 코드 짜잖아. 자동화." "그게 개발이야?" "개발이지. 왜?"민호 형이 말했다. "QA도 개발자야. 요즘은. 자동화 못 하면 QA 아니잖아." "근데 나는 기능 개발은 안 하잖아." "그게 뭐 중요해? 코드로 문제 해결하면 개발자지." 설득력 있게 들렸다. 근데 마음 한구석이 불편했다. 팀장님과의 1:1 미팅 수요일 오후 4시. 팀장님과 분기 면담이었다. "민수씨 요즘 자동화 공부한다며?" "네. 주말마다 조금씩요." "좋아. 우리 팀도 자동화 전환 계획 있거든." 기대했다. 드디어 자동화를 할 수 있나. "근데 민수씨는 어떻게 가고 싶어? QA? 개발?" 똑같은 질문이었다. "저는... 아직 잘 모르겠습니다." "솔직히 말해볼까? 회사 입장에서는." 팀장님이 말했다. "자동화 QA는 애매해. 개발자만큼 대우 못 해주거든. 근데 매뉴얼 QA보다는 높게 쳐주지." 현실적인 이야기였다. "근데 자동화 잘하면 개발 전환도 가능해. 우리 회사에서 그런 케이스 있어." 선택지를 제시했다. "천천히 생각해봐. 급하지 않아." 급한 건 나였다. 연봉 계산기를 돌려본 밤 그날 밤. 연봉 계산기를 열었다. 현재: 4200만원 (세전) 실수령: 350만원 자동화 QA (5년차 예상): 5000만원 백엔드 개발자 (신입 전환 후): 4500만원 백엔드 개발자 (3년차): 6000만원 숫자만 봤다. 미래는 안 보였다. 돈만이 아니었다. QA로 10년 가면 뭐가 될까. 시니어 QA? QA 리드? 품질 관리자? 개발자로 전환하면? 주니어부터 다시 시작. 근데 천장이 높다. 머리가 아팠다. 여자친구의 질문 목요일 저녁. 지현이랑 통화했다. "오빠 요즘 고민 많지?" "어떻게 알았어?" "목소리 들으면 알지. 말해봐." 커리어 고민을 털어놨다. QA냐 개발이냐. "오빠는 뭐가 더 재밌어?" "버그 찾는 건 재밌어. 근데 코드 짜는 것도 재밌고." "그럼 둘 다 하면 안 돼?" "그게 쉽지 않대. 전문성이 떨어진다고." 지현이가 웃었다. "오빠 생각 너무 많이 해. 일단 해보고 판단하면 안 돼?" 간호사답게 현실적이었다. "나도 처음엔 내과 갈지 외과 갈지 고민했거든. 근데 둘 다 해보니까 알겠더라." 맞는 말이었다. 금요일 오전, 버그 하나 금요일 오전 10시. 새 빌드가 올라왔다. 로그인 후 프로필 화면으로 이동하는 시나리오. 테스트 시작했다. 3번째 시도. 화면이 안 넘어간다. 버그다. 재현 스텝을 정리했다. Jira에 등록했다. 우선순위 High. 재현율 100%. 민호 형한테 슬랙 보냈다. "형, 로그인 후 프로필 이동 안 돼. #1234 확인 부탁." 10분 후. 답장 왔다. "확인했어. API 응답 지연 이슈야. 30분 안에 고칠게." 30분 후. 새 빌드. 테스트 통과. 이게 내 일이다. 문제를 찾고 전달한다. 개발자는 고친다. 역할이 다르다. 근데 둘 다 필요하다. 문득 생각했다. 나는 버그 찾는 걸 좋아한다. 스터디 과제, Python 크롤러 금요일 밤. 스터디 과제를 했다. 앱스토어 리뷰 크롤링하는 스크립트다. 100줄짜리 코드를 짰다. 3시간 걸렸다. 에러가 났다. 디버깅했다. 변수명 오타였다. 고쳤다. 돌렸다. 리뷰 500개가 CSV로 저장됐다. 희열을 느꼈다. 이게 개발이구나. 근데 동시에 생각했다. 이걸 매일 하고 싶나? 기능 설계하고, 코드 짜고, 리뷰 받고, 배포하는 일. 좋아 보였다. 근데 버그 찾는 재미를 포기할 수 있나. 토요일 오후, 커뮤니티 글 토요일 오후. QA 커뮤니티에 글을 올렸다. "QA로 계속 가시는 분들, 어떤 이유인가요?" 댓글이 달렸다. "저는 품질 관리가 적성에 맞아서요. 개발보다 재밌어요." "자동화 QA 10년 했는데 후회 없습니다. 전문성 충분해요." "개발 전환했다가 다시 QA 왔어요. 제 길은 여기였어요." "둘 다 해봐야 압니다. 정답은 없어요." 다들 다른 길을 갔다. 근데 만족하는 사람도 있었다. 희망적이었다. 일요일 아침, 자동화 스크립트 수정 일요일 아침 10시. 지난주 짠 로그인 스크립트를 열었다. 개선하고 싶었다. Wait 조건을 추가했다. 에러 핸들링을 넣었다. 코드가 깔끔해졌다. 실행 속도도 빨라졌다. 뿌듯했다. 이게 코드 리팩토링이구나. 개발자가 된 기분이었다. 잠깐이지만. 그리고 생각했다. 나는 QA고 개발자다. 월요일 출근길, 결론 아닌 결론 월요일 아침 8시 30분. 2호선을 탔다. 고민이 정리됐다. 완벽하진 않지만. 나는 QA다. 버그를 찾는 게 좋다. 품질을 지키는 게 의미 있다. 근데 자동화도 한다. 코드도 짠다. 그것도 개발이다. 'QA 개발자'라는 길이 있다. 애매하지 않다. 그냥 다른 길이다. 백엔드 개발자처럼 연봉이 높진 않을 수 있다. 근데 내 적성에 맞는다. 개발 전환은 언제든 할 수 있다. 지금 당장 정할 필요 없다. 일단 자동화를 배운다. QA 전문성을 쌓는다. 코드 실력도 키운다. 그러다 보면 답이 나온다. 지현이 말대로 해보면 안다. 회사에 도착했다. 9시였다. 새 빌드를 확인했다. 테스트를 시작했다. 오늘도 버그를 찾는다. 코드로 자동화한다. 나는 QA 개발자다.정답은 없다. 그냥 내 길을 간다.
- 10 Dec, 2025
배포 날씨 예보 - 오전 9시 빌드, 오후 2시 테스트 시작
배포 날씨 예보 - 오전 9시 빌드, 오후 2시 테스트 시작 오전 7시 - 출근 전 기상 확인 눈 뜨자마자 슬랙 확인했다. 개발팀장 메시지. "민수님 오늘 2.3.1 배포 예정입니다. 9시 빌드 나갑니다." 아직 집이다. 샤워도 안 했다. 일단 답장부터. "네 확인했습니다. QA 완료 예상 시간은요?" "5시까지요. 6시 스토어 등록 목표입니다." 9시간이다. 체인지로그 확인했다. 항목 12개. 새 기능 2개, 버그 픽스 10개. 아 씨. 새 기능 있으면 시간 더 걸리는데.커피 내렸다. 진하게. 오늘 세 잔은 마실 거다. 배포 날은 전쟁이다. 아니 날씨 같다. 예보는 맑음인데 갑자기 폭우 쏟아지는 날 있잖아. 그런 날. 지난달 생각난다. "간단한 수정"이래서 1시간 보고 했더니 결제 플로우 전체가 깨졌다. 밤 11시까지 테스트했다. 배포 날은 예측이 중요하다. 체인지로그만 믿으면 안 된다. 날씨 예보처럼 여러 지표를 본다.마지막 커밋 시간 (새벽 4시면 위험) 수정한 개발자 (A개발자면 안심, B개발자면 긴장) 변경 파일 개수 (5개 넘으면 연관 버그 각오) 지난 배포 핫픽스 여부 (있었으면 이번에도 있다)오늘 체크했다. 마지막 커밋: 어제 저녁 7시. 괜찮다. 개발자: C님. 중간이다. 50% 확률. 변경 파일: 18개. 많다. 위험. 지난 배포: 핫픽스 1번. 경고. 종합 예보: 흐림. 소나기 가능성 60%. 오전 9시 - 빌드 도착, 초기 점검 회사 도착. 9시 5분. 빌드 슬랙 알림 왔다. "QA 빌드 #234 업로드 완료" 다운로드 시작. 커피 한 모금. 설치. 첫 실행이 중요하다. 크래시 나면 하루 끝이다. 앱 켰다. 로딩. 메인 화면. 됐다. 일단 한숨. 초기 점검 시작. 체크리스트 꺼냈다. 항상 똑같이 한다. 빌드 도착 직후 10분 체크리스트앱 설치/실행 (크래시 확인) 로그인 (계정 3개 돌려가며) 메인 기능 3개 (결제, 검색, 내정보) 이전 버전 Known Issue (재발 확인) 새 기능 진입 (UI 깨짐 체크)10분 만에 끝냈다. 이상 없음. 개발자한테 메시지. "빌드 받았습니다. 초기 점검 OK. 본 테스트 들어갑니다." 답 왔다. "감사합니다~" 물결 많다. 불안하다는 뜻이다.오전 10시 - 체인지로그 분석 본격 시작 전에 체인지로그 뜯어봤다. 2.3.1 변경 사항 새 기능:위시리스트 공유 기능 다크모드 UI 개선버그 픽스:iOS 결제 실패 이슈 검색 필터 안 먹히는 문제 프로필 이미지 안 나오는 버그 푸시 알림 중복 발송 리뷰 작성 시 키보드 안 내려감 상품 상세 로딩 느린 문제 장바구니 수량 변경 오류 쿠폰 적용 안 되는 케이스 로그아웃 후 재로그인 오류 설정 화면 스크롤 버벅임12개다. 4시간에 끝낼 수 있나. 우선순위 정했다. 경험상 알다. Critical (반드시)결제 관련 (1번, 8번) 로그인/로그아웃 (9번) 새 기능 전체 플로우 (위시리스트, 다크모드)High (꼭)푸시 알림 (4번) 장바구니 (7번) 검색 (2번)Medium (시간 되면)UI 버그들 (3, 5, 10번) 성능 (6번)Low는 없다. 배포 날에 Low는 없다. 다 High다. 테스트 케이스 정리했다. 엑셀 켰다. 총 87개 케이스. 새 기능 30개, 리그레션 57개. 4시간이면... 케이스당 3분. 불가능하다. 리그레션 줄였다. 변경 영향 있는 것만. 38개로. 총 68개. 케이스당 3.5분. 빡빡하지만 가능하다. 단, 버그 안 나왔을 때. 오전 11시 - 위시리스트 공유 지옥 새 기능부터 했다. 위시리스트 공유. 간단해 보였다. "공유" 버튼 누르면 링크 복사. 끝. 그게 아니었다. 테스트 시나리오 1: 기본 공유위시리스트 생성 상품 3개 추가 공유 버튼 클릭 링크 복사 확인 카톡으로 전송 링크 클릭 위시리스트 표시됐다. 다음. 테스트 시나리오 2: 비로그인 수신로그아웃 링크 클릭 로그인 유도 팝업 로그인 후 위시리스트 확인안 됐다. 로그인 후에 메인 화면으로 간다. 위시리스트 안 뜬다. 버그 1번. Jira 등록. BUG-1847: 비로그인 상태 위시리스트 링크 클릭 후 로그인 시 딥링크 미작동 재현 스텝 썼다. 스크린샷 5장 첨부. 영상도 찍었다. 개발자한테 슬랙. "위시리스트 공유 버그 올렸습니다. 확인 부탁드려요." 5분 후 답 왔다. "아 그거 스펙 아닌가요? 딥링크는 로그인 상태에서만..." 아니다. 기획서 확인했다. 명시돼 있다. "비로그인도 지원" 기획자한테 물었다. "위시리스트 공유, 비로그인도 되는 거 맞죠?" "네 맞아요. 로그인 후 자동으로 이동해야 해요." 개발자한테 다시. "기획 확인했습니다. 버그 맞습니다." "아... 네 확인할게요."30분 지났다. 아직 시나리오 2다. 테스트 시나리오 3: 품절 상품 포함위시리스트에 품절 상품 추가 공유 수신자 확인품절 상품이 안 보인다. 의도인가 버그인가. 기획자한테 또 물었다. "품절 상품도 보여야 하나요?" "당연하죠. 품절 표시하고 보여줘야죠." 버그 2번. BUG-1848: 위시리스트 공유 시 품절 상품 미표시 개발자 반응. "?? 품절은 필터링하는 게 맞는 거 아닌가요" 기획자 반응. "아니요. 보여줘야 해요." 이래서 스펙 문서가 중요하다. 근데 스펙 문서에 없다. 당연한 거라고 생각해서. 당연한 게 없다. QA한테는. 테스트 시나리오 4-10 계속했다. 엣지 케이스.위시리스트 삭제 후 링크 클릭 상품 전체 삭제된 위시리스트 공유 링크 만료 (7일) 동일 링크 재사용 위시리스트 100개 상품 (대량) 특수문자 포함 상품명 이미지 없는 상품버그 4개 더 나왔다. 11시 30분. 새 기능 하나에 1시간 반. 아직 다크모드 안 했다. 오후 12시 - 점심 거른다 식당 갈 시간 없다. 편의점 갔다. 삼각김밥 2개. 바나나우유. 에너지바. 책상에서 먹으면서 다크모드 테스트. 다크모드는 UI 테스트다. 모든 화면 봐야 한다. 다크모드 체크리스트메인 화면 (배경, 텍스트, 아이콘) 상품 리스트 (카드, 이미지 경계) 상품 상세 (리뷰, 문의, 구매) 마이페이지 (프로필, 설정) 결제 화면 (폼, 버튼) 팝업/토스트 (대비, 가독성) 에러 메시지 (빨간색 가독성)화면 50개. 하나씩 라이트/다크 전환하며. 삼각김밥 먹으면서 스크린샷 찍었다. 버그 발견. 결제 화면. 다크모드에서 입력 필드 테두리가 안 보인다. 배경이랑 같은 색. 버그 등록. BUG-1853: 다크모드 결제 화면 입력 필드 테두리 미표시 심각도 High. 결제는 Critical 경로다. 개발자 반응. "헉 확인했습니다. 바로 수정할게요" 빠르다. 좋다. 근데 또 있다. 리뷰 별점. 라이트모드에선 노란 별. 다크모드에선... 흰 별. 배경이 어두운 회색인데 흰 별이면 안 예쁘다. 이건 버그인가 디자인인가. 디자이너한테 물었다. "다크모드 별점 색상 흰색 맞나요?" "어? 노란색이어야 하는데요." 버그다. BUG-1854: 다크모드 리뷰 별점 색상 오류 (노란색→흰색) 12시 40분. 점심 시간 끝났다. 다크모드 30개 화면 남았다. 오후 1시 - 리그레션의 압박 새 기능만 하면 안 된다. 리그레션 해야 한다. 기존 기능이 안 깨졌는지. 이게 더 무섭다. "새 기능 버그는 찾아도 괜찮다. 기존 기능 버그는 QA 책임이다." 누가 그랬나. 나다. 리그레션 리스트 38개. 우선순위 높은 것부터. 결제 플로우 (30분)일반 결제 쿠폰 적용 포인트 사용 복합 결제 (쿠폰+포인트) 결제 실패 환불다 됐다. 이상 없음. 근데 이상하다. iOS 결제 실패 이슈 수정했다는데 테스트 케이스가 없다. 개발자한테 물었다. "iOS 결제 실패 이슈, 어떤 상황에서 실패했던 건가요?" "아 그거요. 카드 할부 선택 시 크래시 나던 거요." 할부? 내 테스트 케이스에 없었다. 급하게 테스트. 할부 3개월. 결제. 됐다. 할부 6개월. 결제. 됐다. 할부 12개월. 결제. 크래시. "결제 정보를 불러올 수 없습니다." 아직 안 고쳐졌다. 아니 부분만 고쳐졌다. 버그 리오픈. BUG-1799: [RE-OPEN] iOS 12개월 할부 결제 시 크래시 개발자 반응. "?? 3개월이랑 6개월은 되는데요?" "12개월은 안 됩니다. 재현 영상 첨부했어요." "아... 확인할게요." 1시 30분. 배포까지 4시간 반. 리그레션 30개 남았다. 오후 2시 - 핫픽스 빌드 온다 개발자가 급하게 수정했다. "민수님 핫픽스 빌드 올렸습니다. #235" 30분 만에 왔다. 빠르다. 불안하다. 빠른 게 좋은 게 아니다. 꼼꼼한 게 좋은 거다. 다운로드. 설치. 핫픽스 확인 항목수정된 버그 (비로그인 딥링크, 결제 필드, 별점, 12개월 할부) 주변 기능 (혹시 다른 거 깨졌나) 전체 플로우 재확인 (빠른 수정은 실수 동반)하나씩. 비로그인 딥링크: 됐다. 결제 필드: 됐다. 별점 색상: 됐다. 12개월 할부: 됐다. 좋다. 근데 방심하면 안 된다. 주변 확인. 로그인 플로우 전체 다시. 일반 로그인. 됐다. 소셜 로그인. 됐다. 회원가입. 됐다. 비밀번호 찾기. 됐다. 결제도 전체 다시. 일반 결제. 됐다. 할부 전체. 됐다. 됐다. 됐는데. 위시리스트 공유 다시 해봤다. 로그인 상태에서 링크 받기. 됐다. 근데 앱을 강제 종료하고 링크 클릭하면? 앱 실행. 로딩. 메인 화면. 위시리스트 안 뜬다. 또 버그다. BUG-1855: 앱 미실행 상태 위시리스트 딥링크 미작동 개발자 멘션. "딥링크 한 가지 더 확인 부탁드립니다." 답이 없다. 5분 후. "아... 콜드 스타트 케이스 놓쳤네요. 수정할게요." 또 기다린다. 오후 3시 - 두 번째 핫픽스 빌드 #236 왔다. 이번엔 더 꼼꼼하게. 콜드 스타트 딥링크: 됐다. 웜 스타트 딥링크: 됐다. 백그라운드 딥링크: 됐다. 모든 상황 테스트했다. 이제 진짜 됐다. 리그레션 재개. 25개 남았다. 검색 기능 (20분)키워드 검색 필터 (카테고리, 가격, 평점) 정렬 (인기순, 최신순, 가격순) 최근 검색어 자동완성됐다. 장바구니 (15분)상품 추가/삭제 수량 변경 옵션 변경 선택 삭제 전체 삭제수량 변경에서 걸렸다. 100개 입력. 저장. 확인. 수량이 1로 돌아갔다. 버그인가? 체인지로그 확인. "수량 변경 오류 수정" 이게 수정된 거다. 100개는 최대 수량 초과라서 1로 리셋. 그럼 에러 메시지가 떠야 하는 거 아닌가? 기획자한테. "장바구니 최대 수량 초과 시 동작이요?" "최대 수량으로 자동 조정하고 토스트 띄워요." 토스트 없다. 버그. BUG-1856: 장바구니 최대 수량 초과 시 안내 메시지 미표시 개발자. "토스트까지 해야 하나요? 간단한 수정인데..." 기획자. "네 사용자가 왜 수량이 바뀌었는지 알아야죠." 추가 수정 들어갔다. 3시 40분. 배포까지 3시간 20분. 리그레션 15개 남았다. 오후 4시 - 마지막 빌드의 공포 세 번째 핫픽스. 빌드 #237. 이제 지친다. 커피 네 번째. 토스트 확인. 됐다. 근데 불안하다. 세 번째 핫픽스. 경험상 알다. "세 번 고치면 네 번째 버그가 온다." 전체 플로우 다시. 처음부터. 로그인. 검색. 상품 담기. 위시리스트. 공유. 결제. 전부 됐다. 괜찮다. 이번엔 괜찮다. 리그레션 나머지. 프로필 (10분)정보 수정 이미지 업로드 배송지 관리 리뷰 목록됐다. 설정 (10분)알림 설정 약관 확인 버전 정보 로그아웃됐다. 푸시 알림 (15분) 이게 제일 귀찮다. 실제 발송 테스트 해야 한다. 개발자한테. "푸시 테스트 발송 부탁드려요." 발송 왔다. 확인. 앱 꺼진 상태: 알림 옴. 클릭. 해당 화면 이동. 됐다. 앱 켜진 상태: 인앱 알림. 클릭. 이동. 됐다. 중복 발송 확인. 안 온다. 수정 확인. 성능 체크 (10분) 상품 상세 로딩. 2초. 괜찮다. 리스트 스크롤. 부드럽다. 이미지 로딩. 빠르다. 메모리 사용량. 정상. 배터리 소모. 측정 불가. 시간 없다. 4시 50분. 리그레션 완료. 오후 5시 - 최종 보고서 테스트 끝났다. 최종 결과 총 테스트 케이스: 68개 실행: 68개 통과: 59개 실패: 9개 (모두 수정 완료) 발견 버그: 11개 Critical: 0개 High: 3개 Medium: 8개 빌드: #237 (3차 핫픽스) 배포 가능 여부: 조건부 승인 조건: 모니터링 필수 항목위시리스트 딥링크 (신규 기능) 12개월 할부 결제 (iOS) 장바구니 수량 변경 (토스트)보고서 작성. 슬랙에 공유. "QA 완료했습니다. 배포 승인합니다. 단, 위 3개 항목 모니터링 부탁드립니다." 팀장 반응. "고생하셨습니다. 6시 배포 진행하겠습니다." 개발팀장. "민수님 덕분에 큰 버그 잡았네요. 감사합니다." 기분 좋다. 이럴 때 보람 느낀다. 근데 아직 끝 아니다. 오후 6시 - 스토어 배포 모니터링 개발자가 빌드 업로드했다. 앱스토어: 심사 대기 플레이스토어: 심사 중 플레이스토어는 빠르다. 1시간이면 통과. 앱스토어는 느리다. 길면 24시간. 오늘은 빨랐다. 2시간 만에 둘 다 통과. 배포 시작. 단계별 배포. 1단계: 5% (1시간) 2단계: 25% (2시간) 3단계: 100% 5% 배포. 모니터링 시작. Firebase Crashlytics 켰다. 크래시 리포트 확인. 없다. 좋다. GA4 켰다. 실시간 사용자. 위시리스트 공유 이벤트. 5건. 성공 5건. 결제 이벤트. 12건. 성공 11건, 실패 1건. 실패 로그 확인. 카드사 오류. 우리 버그 아니다. 슬랙 모니터링. CS 문의 없다. 1시간 지났다. 이상 없음. 25% 배포. 2시간 더 모니터링. 크래시 없음. CS 문의 없음. 괜찮다. 이번 배포는 안정적이다. 오후 9시 - 퇴근 전 회고 100% 배포 완료. 총 사용자 50만. 크래시율 0.1%. 정상. 배포 성공이다. 오늘 배운 것. 배포 날 생존 법칙체인지로그를 믿지 마라. 직접 확인해라. 첫 빌드에 모든 버그가 있다. 각오해라. 핫픽스는 또 다른 버그를 부른다. 빠른 수정보다 정확한 수정이 낫다. 엣지 케이스를 놓치지 마라. 개발자와 기획자 사이에서 팩트로 말해라. 리그레션을 절대 건너뛰지 마라. 마지막까지 방심하지 마라. 모니터링까지가 배포다. 커피는 필수다.책상 정리했다. 테스트폰 5대. 노트북. 체크리스트. 여자친구한테 카톡. "끝났어. 배고파 죽겠다." "고생했어 ㅠㅠ 뭐 먹을래?" "고기. 무조건 고기." 가방 챙겼다. 불 껐다. 내일 출근하면 또 버그 리포트가 쌓여 있겠지. CS팀에서 "이거 버그 아닌가요?" 하는 문의. 개발자는 "다음 버전에 넣을게요" 하는 답변. 그게 QA 일상이다. 그래도 오늘은 잘했다. 큰 버그 다 잡았다. 사용자는 모를 거다. 모르는 게 최고다. 모르게 하는 게 QA 실력이다.배포 날씨는 예보할 수 있다. 100% 정확하진 않지만. 대비는 할 수 있다. 그게 경력이다.
- 04 Dec, 2025
Jira 티켓 200개, 어디부터 시작해야 할까?
월요일 아침의 선물 출근했다. Jira 열었다. 미해결 티켓 203개. 금요일에 180개였는데. 주말 사이 23개가 더 생겼다. 핫픽스 배포했다가 새 버그가 나온 거다. 예상했다. 커피 한 잔 마시고 화면을 봤다. P1, P2, P3, P4가 뒤섞여 있다. 어떤 건 상태가 "재확인 필요", 어떤 건 "개발 완료 대기". 정리 안 된 티켓이 반은 넘는다. 팀장이 슬랙 보냈다. "민수야, 이번 주 목표 티켓 30개 처리. 가능하지?" 30개. 하루에 6개씩이다. 재현 시간, 확인 시간, 리포트 작성 빼면 불가능하다. 하지만 "네" 라고 답장했다. 어차피 할 거니까.우선순위라는 이름의 정치 P1부터 봤다. 41개다. 심각도 높음, 긴급 처리. 그런데 진짜 긴급한 건 10개도 안 된다. 나머지는 누군가 급하다고 우긴 것들이다. "로그인 안 됨" - P1 맞다. "프로필 이미지 안 뜸" - P2인데 기획자가 P1 박았다. "특정 기종에서 폰트 이상" - P3이다. 근데 대표님 폰이라서 P1. 우선순위는 기술적 판단이 아니다. 정치다. 개발팀장은 자기 팀 버그는 P3로 낮추고 싶어 한다. 기획팀은 자기가 만든 기능 버그는 P1로 올리고 싶어 한다. 영업팀은 클라이언트가 말한 건 뭐든 P1이다. 결국 내가 판단해야 한다. 실제 사용자 영향도로. 기준을 만들었다. 엑셀에 정리했다. P1 (10개)앱 크래시 핵심 기능 동작 안 함 데이터 손실 가능성 보안 이슈P2 (35개)주요 기능 오작동 특정 기종 크래시 UI 심각하게 깨짐 결제 관련 오류P3 (98개)부가 기능 오류 텍스트 오타 디자인 의도와 다름 특정 상황에서만 재현P4 (60개)개선 제안 극히 드문 케이스 차기 버전 고려 스펙 논의 필요재분류했다. 기획자한테 메신저 왔다. "민수님, 제가 P1 올린 건데요?" "사용자 영향도 낮아서 P2로 조정했습니다." "근데 팀장님이 중요하다고 하셨거든요." "팀장님께 제가 말씀드릴게요." 이런 대화를 5번 했다. 점심 전에.현실적인 처리 계획 10개 P1부터 시작했다. 하지만 순서가 있다. 재현 가능한 것부터다. "특정 조건에서 크래시" - 재현 스텝 불명확. 개발자한테 물어봐야 함. 나중. "로그인 실패" - 바로 재현 가능. 지금. "결제 오류" - QA 서버에서 테스트 가능. 지금. 엑셀에 컬럼 추가했다.재현 가능 여부 예상 소요 시간 의존성 (다른 티켓이나 개발자 답변 필요) 테스트 환경 (Dev/QA/Prod)P1 10개 계획 세웠다.즉시 처리 가능: 4개 (2시간) 개발자 확인 필요: 3개 (대기 후 1시간) 특수 환경 필요: 2개 (내일 오전) 재현 불가: 1개 (리포터 추가 정보 요청)4개부터 시작했다. 첫 번째 버그. 로그인 화면에서 백버튼 누르면 크래시. 재현했다. Charles로 네트워크 확인했다. API 응답은 정상. 앱 로그 확인. Null Pointer Exception. 스크린샷 3장, 로그 파일, 재현 스텝 정리해서 Jira 업데이트. 개발자 assign. 20분 걸렸다. 두 번째 버그. 결제 완료 후 화면 멈춤. 재현 안 됨. QA 서버에서는. Prod에서만 발생한다는 리포트. 운영팀한테 Prod 로그 요청. 대기. 세 번째로 넘어갔다. 효율이다. 막힌 건 넘어가고 진행 가능한 것부터. 하루 종일 한 티켓만 붙잡고 있을 수 없다. 오후 3시. P1 4개 처리했다. P2 시작했다.리소스 관리의 현실 하루에 처리 가능한 티켓 수는 정해져 있다. 단순 계산. 근무 8시간.회의 1시간 점심 1시간 이메일/슬랙 응대 1시간 실제 작업 시간 5시간버그 하나당 평균 소요 시간.재현: 15분 원인 파악: 20분 리포트 작성: 15분 개발자 커뮤니케이션: 10분 총 60분하루 5개가 현실적이다. 근데 예상 밖 변수가 있다.재현 안 되는 버그: +30분 디바이스 세팅 시간: +20분 긴급 이슈 터짐: +1시간 기획 스펙 확인: +30분실제로는 하루 3-4개다. 주 5일이면 15-20개. 팀장이 원하는 30개가 안 된다. 솔직하게 말했다. "30개는 어렵습니다. 현실적으로 20개 목표 잡겠습니다." "왜 안 돼?" "평균 처리 시간이 1시간인데, 예상 외 이슈 대응 시간 빼면 하루 4개가 한계입니다." "야근하면 되지 않아?" "야근해도 집중력 떨어지면 버그 놓칩니다. 그럼 배포 후 더 큰 문제 됩니다." 팀장 표정이 안 좋았다. 하지만 인정했다. "알았어. 20개 목표로 하자." 숫자로 말하니까 통했다. 감정이 아니라 데이터로. 배치의 기술 200개를 20개씩 나눴다. 10주 걸린다. 현실성 없다. 그 사이 새 티켓이 100개는 더 생긴다. 다른 방법이 필요하다. 배치 처리. 비슷한 버그끼리 묶었다. 로그인 관련 (8개)한 번에 테스트 환경 세팅 연속으로 처리하면 컨텍스트 스위칭 없음 2시간 안에 끝결제 플로우 (12개)QA 서버 결제 테스트 계정 필요 한 번에 몰아서 테스트 3시간UI 버그 (25개)디바이스별 확인 스크린샷 찍으면서 체크리스트 2시간특정 기종 이슈 (15개)해당 디바이스 세팅 한 번만 4시간월요일: 로그인 + 회원가입 관련 화요일: 결제 플로우 수요일: UI 버그 집중 목요일: 특정 기종 테스트 금요일: 긴급 이슈 대응 + 정리 효율이 올라갔다. 컨텍스트 스위칭이 줄었다. 테스트 환경 세팅을 반복 안 해도 됐다. 첫 주에 23개 처리했다. 목표보다 3개 더. 커뮤니케이션 비용 버그 처리보다 시간 많이 드는 게 있다. 설명이다. 개발자: "이거 재현 안 되는데요?" 나: "재현 스텝 Jira에 있습니다." 개발자: "그대로 했는데 안 돼요." 나: "화면 공유 해드릴까요?" 개발자: "네." 화면 공유 10분. 재현 보여줌. 개발자: "아 제 빌드가 달라서 그런가 봐요." 나: "..." 이런 일이 하루에 5번. 그래서 리포트 양식 만들었다. [재현 스텝] 1. 앱 실행 2. 로그인 (테스트 계정: qa_test01) 3. 마이페이지 진입 4. 프로필 수정 버튼 탭 5. 닉네임 입력 (20자 이상) 6. 저장 버튼 탭 → 크래시 발생[환경] - 빌드: v2.3.1 (build 451) - OS: Android 13 - 기기: Galaxy S23 - 서버: QA 서버[로그] (첨부)[기대 동작] 닉네임 저장 후 완료 토스트 메시지[실제 동작] 앱 크래시, 재실행 시 닉네임 변경 안 됨[추가 정보] iOS에서는 정상 동작 확인이렇게 쓰니까 "재현 안 돼요" 가 줄었다. 하지만 여전히 질문은 온다. 기획자: "이거 버그예요 스펙이에요?" 나: "스펙 문서에는 A인데 실제는 B입니다." 기획자: "음... 원래 B가 맞는 것 같은데." 나: "그럼 스펙 문서 수정해주세요." 기획자: "네, 근데 이미 개발된 거 바꾸기 애매한데..." 이런 대화 20분. 결론은 "다음 회의 때 논의". 티켓 상태를 "Pending - 스펙 확인 중"으로 바꿨다. 내 할 일 목록에서 뺐다. 안 그러면 계속 신경 쓰인다. 포기의 기술 200개를 다 할 수 없다는 걸 인정했다. P4 60개는 사실상 안 한다. "차기 버전 검토" 라벨 붙이고 백로그로 보냈다. P3 중에서도 "재현 불가" 30개는 "추가 정보 필요" 상태로 리포터한테 돌려보냈다. 1주일 안에 답 안 오면 자동 종료. 실제 처리 대상은 110개. 이것도 많다. 하지만 200개보다 심리적으로 낫다. 팀장한테 보고했다. "P4 60개는 다음 분기로 이관하겠습니다." "왜?" "리소스 대비 사용자 영향도가 낮습니다. 대신 P1, P2를 2주 안에 정리하겠습니다." "음... 알았어." 전부 다 하려고 하면 중요한 것도 못 한다. 포기할 걸 정하는 것도 능력이다. 진행 상황 추적 매일 아침 30분. 엑셀 업데이트했다. [주간 목표] 목표: 20개 완료: 23개 진행중: 5개 블록: 3개[티켓 상태] Open: 176개 (203→176, -27) In Progress: 8개 Pending: 12개 Resolved: 15개 (이번 주)숫자가 보이니까 뿌듯했다. 203에서 176. 한 주만에 27개 줄었다. 물론 새로 생긴 것도 있다. 하지만 처리 속도가 더 빠르다. 팀장한테 주간 리포트 보냈다. 슬랙에 공유했다. 개발팀장이 답했다. "오 민수님 고생 많으시네요." 인정받는 기분. 나쁘지 않다. 자동화의 유혹 P3 중에 반복 작업이 많다. "5개 기종에서 UI 확인" - 30분씩 5번, 2시간 반. "20개 화면 레이아웃 체크" - 1시간. 자동화하면 30분으로 줄어든다. 문제는 자동화 스크립트 짜는 데 5시간 걸린다는 거다. 계산했다. 이 테스트를 앞으로 10번 이상 할 거면 본전이다. UI 회귀 테스트는 매 배포마다 한다. 2주에 한 번. 1년이면 26번. 투자 가치 있다. 퇴근 후 집에서 Appium 튜토리얼 봤다. 2시간. 간단한 스크립트 짰다. 5개 화면 자동 캡처. 1시간 걸렸다. 아직 완벽하지 않다. 하지만 시작했다. 다음 주부터 하나씩 자동화 케이스 늘리기로 했다. 실전 팁 200개 티켓 앞에서 멘붕 안 오려면. 1. 일단 분류부터 우선순위 재조정. 30분 투자해서 전체 보기. 2. 배치 처리 비슷한 것끼리 묶어서. 컨텍스트 스위칭 줄이기. 3. 블로킹 이슈 따로 관리 진행 안 되는 건 Pending 처리. 내 리스트에서 빼기. 4. 매일 목표 작게 하루 5개. 달성 가능한 숫자. 5. 숫자로 추적 엑셀이든 뭐든. 진행 상황 시각화. 6. 커뮤니케이션 효율화 리포트 템플릿. 반복 질문 줄이기. 7. 포기할 것 정하기 P4는 과감히 백로그로. 집중력 분산 방지. 8. 자동화 조금씩 반복 작업부터. 5시간 투자해서 20시간 아끼기. 한 달 후 4주 지났다. Jira 티켓 128개. 203에서 75개 줄었다. 물론 새로 생긴 것도 있다. 하지만 관리 가능한 수준이다. 팀장이 말했다. "민수야, 이번 달 티켓 처리율 좋던데?" "네, 배치 처리 방식 바꿔서요." "다른 팀원들도 좀 공유해줘." 오후에 팀 회의. 내 방법 설명했다. 15분. 신입 QA가 물었다. "그럼 우선순위는 누가 정해요?" "우리가 정해야죠. 사용자 영향도 기준으로." "근데 기획팀에서 P1 올리면요?" "데이터로 설명하세요. 사용자 몇 명한테 영향 가는지, 얼마나 자주 발생하는지." 신입이 고개 끄덕였다. 회의 끝나고 슬랙에 정리 문서 공유했다. 내가 쓴 엑셀 템플릿이랑 우선순위 기준표. 3명이 따봉 달았다.티켓은 계속 쌓인다. 하지만 이제 안다. 전부 다 할 필요 없다는 걸. 중요한 것부터, 효율적으로, 숫자로 증명하면서. 그게 프로고 살아남는 방법이다.
- 03 Dec, 2025
금요일 오후 5시 59분, 배포 요청이 들어왔다
5시 59분 금요일 오후 5시 59분. 슬랙이 울렸다. "민수님, 급한 배포 건이 있어서요. 월요일 아침까지 올려야 해요." 기획팀 김과장이다. 배포는 내일 토요일 오전 10시래. 내일. 10시. 지금부터 15시간.무슨 변경인데 "어떤 기능이요?" "결제 플로우 일부 수정이요. UX 개선." 결제. 플로우. 가장 건드리면 안 되는 부분이다. "스펙 문서 있어요?" "아, 지금 정리 중이에요. 30분 뒤에 드릴게요." 30분. 6시 30분이면 된다는 거다. 개발은 언제 끝나냐고 물었다. "밤 10시쯤요? 늦어도 11시?" 밤 11시. 그럼 테스트 시작은 자정. 토요일 새벽부터 오전 10시까지. 10시간. 결제 플로우 전체를 10시간 안에. 계산 책상 앞에 앉았다. 계산기를 켰다. 결제 테스트 케이스: 총 147개. 풀 테스트하면 8시간. 리그레션까지 하면 12시간. 시간이 4시간 부족하다. 범위를 줄여야 한다. 어디를.스펙 문서 7시 10분. 스펙이 왔다. 40분 늦었다. 열어봤다. 4페이지. "결제 버튼 위치 변경" "카드 선택 UI 개선" "쿠폰 적용 로직 수정" 로직 수정? "쿠폰이랑 포인트 동시 사용 가능하게" 이건 단순 UI가 아니다. 비즈니스 로직이다. 쿠폰, 포인트, 할인율, 최종 금액. 경우의 수가 몇 개지. 쿠폰 3종류, 포인트 전액/일부, 상품 할인... 최소 20개 케이스. 개발자 호출 개발팀 이대리한테 전화했다. "대리님, 쿠폰이랑 포인트 동시 사용. 테스트 어디까지 해야 돼요?" "음... 일단 정상 케이스만요. 시간 없잖아요." 정상 케이스만. "근데 쿠폰 여러 개 적용은요?" "아, 그건 원래 안 되는 거라 괜찮아요." 원래 안 되는 게 괜찮다는 게 아니라, 이번에 안 건드렸다는 거다. "포인트 부족하면요?" "그것도 기존 로직 그대로요." 기존 로직. 그럼 새로 테스트 안 해도 되나. "근데 화면은 바뀌잖아요." "네, 화면만요." 화면만. 그래도 확인은 해야 한다. 범위 결정 화이트보드에 적었다. 필수:쿠폰+포인트 동시 사용 (정상) 결제 버튼 위치 확인 카드 선택 UI 동작준필수:포인트 부족 시나리오 쿠폰 단독 사용 최종 금액 계산 검증제외:쿠폰 여러 개 조합 배송지 변경 (이번 건 무관) 리워드 적립 (서버 로직, 별도)제외 항목을 보니 불안하다. 배송지는 정말 무관할까. 최종 금액이 배송비에 영향 주지 않나.PM한테 물었다 "배송비 로직은 변경 없죠?" 기획팀 김과장이 답했다. "네, 그건 안 건드렸어요." "확실해요?" "...개발팀한테 확인할게요." 5분 뒤. "아, 배송비 무료 조건이 '할인 전 금액' 기준으로 바뀌었대요." 바뀌었다고. "그럼 쿠폰 쓰면 배송비 나올 수 있다는 거네요?" "네... 그렇네요?" 그렇네요가 아니다. 테스트 케이스 15개 추가다. 8시 30분 여자친구한테 문자 왔다. "저녁 먹자. 치킨?" "오늘 야근. 미안." "또? 금요일인데." "배포." "배포가 뭐길래 매번." 설명할 기운이 없다. "내일 저녁에. 내가 살게." "...ㅇㅇ" ㅇㅇ. 화났다는 거다. 빌드 대기 밤 10시. 빌드를 기다렸다. 개발팀 단톡방을 봤다. "빌드 언제 나와요?" "조금만요. 충돌 해결 중." "11시는 될 것 같아요." 11시. 또 늦는다. 컵라면을 끓였다. 사무실 비상 재고. 매운 맛. 밤샘할 때 먹는 맛. 11시 47분 빌드가 올라왔다. 바로 다운로드. 설치. 앱 실행. 로그인. 상품 담기. 결제 화면 진입. UI가 바뀌었다. 버튼 위치가 아래로. 카드 선택 탭이 깔끔해졌다. 쿠폰 선택. 포인트 입력. 최종 금액 확인. 정상이다. 첫 번째 케이스 통과. 시간은 자정 넘어 12시 3분. 두 번째 케이스 포인트만 사용. 쿠폰 없이. 결제 진행. "오류가 발생했습니다." 터졌다. 재현해봤다. 또 터진다. 찰스 프록시 켰다. 로그 확인. "couponId: null" null을 못 받는다. 개발팀 단톡에 올렸다. "포인트만 쓰면 에러나요. couponId null 처리 안 됨." 이대리가 답했다. "아... 수정할게요. 30분?" 새벽 1시에 30분. 1시 30분이면 다시 빌드. 대기 시간 책상에 엎드렸다. 30분. 잘 수는 없다. 테스트 케이스를 다시 봤다. 우선순위를 재조정했다. null 처리 버그. 심각도 높음. 다른 곳에도 있을까. 배송지 null, 카드 정보 null, 쿠폰 코드 invalid... 체크리스트를 만들었다. Null/Empty 체크:쿠폰 미선택 포인트 0원 배송 메모 없음 카드 없을 때전부 확인해야 한다. 2시 10분 빌드가 또 올라왔다. 1시 30분 약속은 지켰다. 다시 설치. 로그인. 포인트만 사용. 테스트. 통과. 쿠폰만 사용. 통과. 둘 다 사용. 통과. 쿠폰+포인트+배송비. 금액 계산 확인. 9,800원 상품. 2,000원 쿠폰. 3,000원 포인트. 결과: 4,800원 + 배송비 3,000원. 맞다. 근데 할인 전 금액 기준 배송비 무료는 10,000원부터. 9,800원은 300원 모자라니까 배송비 나온다. 이게 맞나. 유저는 혼란스러울 것 같은데. PM한테 물었다 새벽 2시 30분에 슬랙을 보냈다. "배송비 무료 기준이 할인 전 금액이면, 9,800원 상품에 쿠폰 써도 배송비 나와요. 의도 맞아요?" 답이 없다. 당연하다. 잘 시간이다. 기획 의도를 모르겠으면 테스트를 어떻게 하나. 일단 버그는 아니니까 통과 처리. 이슈로 남겼다. "배송비 정책 UX 혼란 가능성 있음. 기획 검토 필요." 3시 47분 결제 완료까지 갔다. 주문 내역 확인. 정상. 쿠폰 차감됨. 포인트 차감됨. 리워드 적립. 확인. 여기까지 8개 케이스 완료. 남은 건 7개. 배송지 변경 케이스, 카드 여러 개 케이스, 할부 개월 수... 눈이 감긴다. 커피를 마셨다. 네 번째. 결제 취소 환불 테스트를 시작했다. 쿠폰 쓴 주문 취소. 쿠폰 복구돼야 함. 취소 완료. 쿠폰함 확인. 없다. 쿠폰이 안 돌아왔다. 다시 해봤다. 또 안 돌아온다. 심각하다. 단톡에 올렸다. "결제 취소 시 쿠폰 복구 안 됨. Blocker." 4시 21분 개발자가 답했다. 이대리가 아니라 팀장이다. "확인했습니다. 수정 중. 5시까지." 5시. 배포까지 5시간 남았다. 5시 13분 빌드 올라왔다. 다시 테스트. 쿠폰 결제. 취소. 쿠폰함 확인. 돌아왔다. 포인트도 확인. 정상. 통과. 남은 케이스 6개. 시간은 5시간. 할 수 있다. 7시 카드 할부 케이스 테스트 중. 3개월 할부. 정상. 6개월. 정상. 12개월. 금액 계산 이상함. 수수료가 두 번 붙었다. 또 버그다. 심각도는 중간. Blocker는 아니다. 12개월 할부 쓰는 사람 많지 않음. 하지만 금액 오류는 민감하다. 올렸다. "12개월 할부 수수료 중복 계산." 답이 없다. 아직 개발팀이 안 왔다. 8시 40분 개발팀이 출근했다. 이대리가 단톡 확인했다. "12개월 할부 버그는 배포 후 핫픽스 가능할까요?" 가능할까요가 아니라. PM이 답했다. "일단 배포하고 다음 주에 수정해요." 다음 주. 유저가 12개월 할부 쓰면 손해 본다. 그냥 배포한다고. 9시 20분 남은 케이스 2개. 배송 메모 특수문자, 긴 텍스트. 둘 다 통과. 테스트 완료. 총 15개 케이스. 버그 3건. Blocker 1건 수정 완료. 중간 심각도 1건 다음 주 수정. 낮은 심각도 1건 이슈 등록. 배포 승인 PM한테 보고했다. "테스트 완료. 배포 가능합니다. 단, 12개월 할부 버그 있음. 다음 주 수정 예정." "고생하셨어요. 10시에 배포 진행할게요." 고생하셨어요. 15시간 일하고 듣는 말. 10시 배포 앱스토어에 올라갔다. 배포 완료. 모니터링 시작. 슬랙, 센트리, 파이어베이스 크래시 리포트. 에러 없다. 30분 지났다. 아직 조용하다. 1시간. 여전히 조용하다. 다행이다. 11시 30분 집에 왔다. 샤워하고 침대에 누웠다. 여자친구한테 문자 보냈다. "끝났어. 저녁 먹자. 7시?" 답이 바로 왔다. "ㅇㅇ 어디?" 아직 화났나. "네가 고르면 내가 살게." "그럼 스테이크." 비싸다. 근데 어쩔 수 없다. "ㅇㅇ" 월요일 출근했다. 슬랙에 알림 하나. CS팀이다. "결제 관련 문의 들어왔어요. 12개월 할부 금액이 이상하대요." 시작됐다. 개발팀 단톡에 포워딩했다. "금요일에 리포트한 버그입니다. 수정 일정 알려주세요." 이대리가 답했다. "오늘 수정해서 내일 배포 가능해요." 내일 배포면 내가 또 테스트한다.금요일 5시 59분. 그 1분이 주말을 날렸다. 근데 배포는 성공했다. 그게 다행인 건가, 불행인 건가. 모르겠다.
- 03 Dec, 2025
엣지 케이스 사냥꾼 일지 - 버그는 디테일에 숨어있다
엣지 케이스 사냥꾼 일지 - 버그는 디테일에 숨어있다 오늘도 엣지 케이스가 날 찾아왔다 출근했다. 테스트 빌드가 와 있다. 개발팀에서 "간단한 수정"이라고 했다. 간단한 수정일수록 더 무섭다는 걸 4년 차면 안다. 빌드 설치하고 앱 켰다. 정상 시나리오부터 돌린다. 문제없다. 이제부터가 진짜다. 나는 엣지 케이스 사냥꾼이다. 정상 사용자가 절대 안 할 것 같은 동작. 그게 내 테스트 범위다.네트워크를 미친 듯이 끊어봤다 첫 번째 타겟. 네트워크. 앱 실행 → 로그인 → 메인 화면. 여기서 와이파이 껐다. 정상 사용자는 안 그런다고? 지하철 타면 터널이다. 계속 끊긴다. 엘리베이터 타도 끊긴다. 이게 엣지 케이스가 아니라 일상이다. 데이터 로딩 중에 끊었다. 로딩 표시가 멈췄다. 무한 로딩. 뒤로 가기도 안 된다. 앱 죽일 수밖에. 버그 등록했다. 재현 스텝 꼼꼼히 적었다. "데이터 로딩 시작 후 2초 시점에 네트워크 차단 → 무한 로딩 → 사용자 액션 불가" 개발자 답변 왔다. "실제로 그럴 일이 있나요?" 있다. 매일 있다.텍스트 필드에 미친 짓을 했다 두 번째 타겟. 입력 필드. 회원가입 화면 띄웠다. 이름 입력란이 보인다. 정상 입력: "홍길동" 내 입력: 이모지 100개. 🎉🎉🎉🎉🎉🎉🎉... 계속. 앱이 버벅거렸다. 입력은 됐다. 다음 버튼 눌렀다. 서버 에러. 500. 또 입력했다. 이번엔 특수문자. !@#$%^&*() 되긴 된다. 저장도 된다. 마이페이지 가서 확인했다. 레이아웃 깨졌다. 글자가 화면 밖으로. 버그 두 건 등록. "이모지 100자 이상 입력 시 서버 에러" "특수문자 포함 이름 저장 시 UI 깨짐" 개발자가 물었다. "누가 이름에 이모지 100개를 넣어요?" 몰라. 근데 막을 거 아니면 처리해야지. 전화번호 입력란도 테스트했다. 숫자 말고 문자 넣어봤다. "가나다" 입력이 된다. 막혀야 하는데. 인증번호 요청 눌렀다. 당연히 실패. 근데 에러 메시지가 이상하다. "undefined error occurred" 세 번째 버그 등록. "전화번호 필드 문자 입력 허용, 에러 메시지 미정의" 오전에 버그 3개. 아직 점심 전이다. 화면 회전을 미친 듯이 돌렸다 점심 먹고 왔다. 세 번째 타겟. 화면 회전. 결제 화면 띄웠다. 가로로 돌렸다. 세로로 돌렸다. 가로. 세로. 가로. 세로. 5번쯤 돌렸을 때 앱이 죽었다. 재현했다. 또 죽었다. 버그 등록. "결제 화면에서 화면 회전 반복 시 앱 크래시" 개발자 반응. "누가 결제 중에 화면을 돌려요?" 누가 알아. 근데 돌릴 수 있으면 대응해야지.동시에 눌러봤다 네 번째 타겟. 동시 액션. '저장' 버튼이 있다. 한 번 누르면 저장된다. 정상. 양손으로 동시에 눌렀다. 연타했다. 5번. 저장 완료 메시지가 5번 떴다. 데이터 확인했다. 같은 데이터가 5개 저장됐다. 중복 저장 방지 안 됨. 버그 등록. "저장 버튼 연타 시 중복 저장 발생" 개발자: "그렇게 빨리 누를 수가 있나요?" 있다. 터치 반응 느리면 사용자가 연타한다. 실제로 CS에서 중복 결제 문의 들어온 적 있다. 좋아요 버튼도 테스트했다. 연타했다. 숫자가 이상하게 올라간다. 1 → 3 → 2 → 5 → 4 API 호출 타이밍 문제인 듯. 버그 추가 등록. 오후에 버그 2개 더. 백그라운드에서 복귀했다 다섯 번째 타겟. 앱 상태 전환. 앱 켜고 로딩 중에 홈 버튼. 10초 기다렸다. 앱 복귀. 화면이 하얗다. 데이터가 안 보인다. 앱 죽이고 다시 켜야 한다. 버그 등록. "백그라운드 복귀 시 데이터 미표시" 개발자: "생명주기 처리 놓쳤네요" 알고 있었다. QA가 없으면 배포됐을 버그다. 푸시 알림도 테스트했다. 앱 켜진 상태에서 푸시 받았다. 알림 탭했다. 해당 화면으로 이동. 뒤로 가기 눌렀다. 앱이 종료됐다. 스택이 잘못 쌓였다. 버그 등록. 하루에 버그 7개. 평균치다. 권한을 미친 듯이 껐다 여섯 번째 타겟. 권한. 카메라 권한 필요한 기능이다. 권한 거부했다. 안내 팝업 뜬다. 정상. 설정 가서 권한 껐다. 앱으로 돌아왔다. 카메라 실행 버튼 눌렀다. 앱이 죽었다. 권한 체크 안 함. 버그 등록. "카메라 권한 거부 상태에서 크래시" 위치 권한도 테스트했다. '항상 허용'에서 '앱 사용 중에만' 변경. 지도 화면 갔다. 내 위치가 업데이트 안 된다. 권한 변경 감지 안 함. 버그 추가. 알림 권한 껐다. 앱에서 알림 설정 화면 들어갔다. 스위치가 다 켜져 있다. 실제론 안 오는데 UI는 켜진 상태. 또 버그. 오늘 10개. 오래된 데이터를 불러왔다 일곱 번째 타겟. 데이터 상태. 1년 전 테스트 계정이 있다. 로그인했다. 마이페이지 들어갔다. 프로필 이미지가 안 보인다. URL이 만료됐나 보다. 오래된 게시글 눌렀다. 댓글이 이상하게 보인다. 탈퇴한 사용자 표시가 안 됨. 찜 목록 들어갔다. 삭제된 상품이 그대로 있다. 눌렀더니 404 에러. 버그 3개 더 등록. "만료된 이미지 URL 처리 미흡" "탈퇴 사용자 댓글 표시 오류" "삭제된 상품 찜 목록 표시" 개발자들이 안 보는 데이터. 오래된 것, 삭제된 것, 만료된 것. 여기서 버그가 나온다. 이상한 조합을 시도했다 여덟 번째 타겟. 기능 조합. 검색하면서 필터 바꿨다. 정렬하면서 새로고침 했다. 동영상 재생 중에 화면 잠갔다. 검색어 입력 중에 필터 변경. 검색어가 사라졌다. 입력 상태 초기화. 버그. 동영상 재생 중 화면 잠금. 5분 후 해제. 동영상이 계속 재생 중이다. 소리는 안 나는데 재생은 됨. 배터리가 닳는다. 버그. 장바구니에 담고 로그아웃. 다른 계정으로 로그인. 장바구니가 이전 계정 거다. 데이터 안 지워짐. 심각한 버그. 오늘 15개. 배포 전이라 다행이다. 개발자와의 대화 버그 리포트 15건 올렸다. 개발자가 채팅 보냈다. "민수님, 이거 다 고쳐야 해요?" "네." "근데 이런 상황 실제로 일어나나요?" "네. 다 재현했어요." "우선순위 좀 정해주세요." 버그 심각도 다시 봤다. Critical: 3개 (앱 크래시, 데이터 유실) High: 7개 (기능 동작 안 함) Medium: 5개 (UI 깨짐, 불편) "Critical 3개는 배포 전에 필수요." "High는 다음 배포까지요." 개발자가 물었다. "이런 엣지 케이스를 어떻게 다 생각해요?" 몰라. 그냥 생각난다. 앱 쓰다 보면 자동으로 떠오른다. '이렇게 하면 어떻게 될까?' '여기서 끊으면?' '이걸 동시에 누르면?' 4년 차 직업병이다. 엣지 케이스가 일상이 된 순간 퇴근길 지하철. 유튜브 보다가 터널 들어갔다. 네트워크 끊겼다. 버퍼링. 터널 나왔다. 재생 재개. '이거 우리 앱은 어떻게 되지?' 테스트했었다. 버그 있었다. 고쳐졌을까? 내일 확인해야지. 편의점 들렀다. 결제 앱 켰다. 바코드 표시. '화면 밝기 최저일 때는?' '화면 회전하면?' '배터리 1%일 때는?' 다 테스트해봐야겠다. 내일 할 일이 또 생겼다. 집 와서 배달 앱 켰다. 주문하다가 앱이 튕겼다. '재현 가능한가?' 다시 켰다. 또 튕겼다. 리뷰 남겼다. "주문 중 앱 크래시, 아이폰 14 Pro, iOS 17.2, 재현 가능" 재현 스텝까지 적었다. 친구가 물었다. "너 왜 리뷰를 버그 리포트처럼 써?" 습관이다. 고칠 수가 없다. QA의 자부심 사람들은 묻는다. "QA가 뭐 하는 건데요?" "버그 찾는 거요." 틀렸다. 우리는 사용자를 보호한다. 정상 사용자가 안 할 동작을 내가 대신 한다. 앱이 죽을 수 있는 상황을 내가 먼저 찾는다. 엣지 케이스는 엣지가 아니다. 누군가에겐 일상이다. 네트워크가 불안정한 사람. 터치를 빨리 하는 사람. 화면을 자주 돌리는 사람. 백그라운드 전환이 잦은 사람. 그 사람들이 버그를 만나기 전에 내가 먼저 만난다. 개발자들은 정상 시나리오를 만든다. 나는 비정상 시나리오를 만든다. 둘 다 필요하다. 오늘 찾은 버그 15개. 배포 후 사용자가 만났을 버그 15개. 내가 막았다. 내일의 엣지 케이스 내일 테스트 계획 세웠다. 메모리 부족 상황 테스트. 앱 여러 개 켜놓고 우리 앱 실행. 백그라운드에서 죽는지 확인. 저장 공간 부족 상황. 파일 다운로드 시도. 에러 처리 되는지 확인. 시간대 변경 테스트. 해외 시간대로 바꾸고 날짜/시간 표시 확인. 언어 변경 테스트. 영어로 바꿨을 때 레이아웃 깨지는지 확인. 접근성 테스트. VoiceOver 켜고 스크린 리더로 사용 가능한지. 할 게 많다. 엣지 케이스는 끝이 없다. 그래도 좋다. 버그 찾을 때 짜릿하다. '이거 아무도 생각 못 했을 텐데' 싶은 버그 찾으면 이상하게 기분이 좋다. 나는 엣지 케이스 사냥꾼이다. 디테일에 숨은 버그를 찾는다. 그게 내 일이다.오늘도 버그 15개. 내일은 몇 개나 찾을까.