지금까지 여러 사이드 프로젝트를 하면서 에러를 겪은 적은 많았다.
그러나 대부분의 사이드 프로젝트가 그렇듯 유저가 없었기에 나와 팀원들이 (혹은 지인들이) 발견해서 고쳤다.
또 대부분의 에러가 심각한 문제는 아니었다. 주요 기능을 사용할 수 있는 선에서 조금 불편해지는 정도였다.
그러나 이번엔 메인 기능을 사용할 수 없을 정도의 큰 에러를 제보받게 되었다.
반려동물의 이름 입력이 안된다는 제보였다.
나는 쭉(ZOOC)이라는 팀에서 핏어팻(fitapat)이라는 서비스를 운영하는 안드로이드 개발자다.
핏어팻은 유저 반려동물의 이름, 종, 사진을 입력 받고 AI를 통해 반려동물 커스텀 굿즈를 만들어 판매하는 서비스다.
반려동물을 등록해야 제품을 구매할 수 있는데, 반려동물 이름 입력이 안된다는 것이었다.
즉, 유저가 제품 구매로 이어질 수가 없었다.
제보를 듣고 정말 식은 땀을 흘렸다.
오늘도 개발하면서 반려동물 이름을 몇 번이나 입력했는데, 유저 기기에서는 안된다고?
에러 로깅 툴을 살펴봤지만 아무 일도 없었다.
그럴 리가 없는데.. 진짜 그런 적이 없었는데 대체 이유가 뭐지?
반려동물 정보를 입력받으면 위 사진처럼 서비스 이곳저곳에서 반려동물의 이름을 사용한다.
또 자연스러운 문장을 위해 반려동물 이름에 알맞은 조사를 붙여준다.
그래서 반려동물의 이름을 입력받을 때 정규식과 InputFilter를 이용해 한글만 입력할 수 있도록 제한했다.
내가 작성한 정규식은 모든 자음과 모음을 포함한다. 아니 그렇다고 생각했다.
val ps: Pattern = Pattern.compile("^[ㄱ-ㅣ가-힣]*$")
그때 다음 내용이 내 머리를 스쳐 지나갔다.
어? 그럼 천지인 키보드는..? 천지인 중 천(미들닷)이 찍히나? (천: ㆍ / 지: ㅡ / 인: ㅣ)
저 정규식에 미들닷은 포함이 안 될 것 같은데
바로 키보드 형식을 천지인으로 변경하고 테스트해 본 결과 미들닷이 입력되지 않았다.
평소 나와 팀원들 모두 쿼티 키보드를 사용했기에 전혀 예상치 못한 내용이었다.
정규식에 미들닷을 추가했고 잘 작동하는 것을 확인했다.
val ps: Pattern = Pattern.compile("^[ㄱ-ㅣ가-힣\\u318D\\u119E\\u11A2\\u2022\\u2025\\u00B7\\uFE55]+$")
수정한 내용을 이전 배포 버전에 추가하여 급하게 업데이트를 올렸고 한숨 돌릴 수 있었다.
쿼티 키보드가 생긴 이후로 늘 쿼티만 써왔던 지라 천지인의 미들닷이 원인이었다는 것을 깨닫고 난 뒤 머리가 띵 했다.
작은 규모의 창업팀이라 QA 부서가 따로 존재하지 않고, 팀원 중에서도 안드로이드 기기를 사용하는 것이 나 한 명인지라 내가 더 상세하게 확인했어야 했다. 그래도 배운 점은 앞으로는 기능 개발 후 여러 키보드 형식을 확인해 봐야 한다는 것이다.
이번 경험을 하면서 사이드 프로젝트가 아닌 프로덕트를 운영하고 있다는 것을 더욱 실감할 수 있었다.
사이드 프로젝트에서는 에러가 발생해도 여유롭게 기간을 잡고 작업할 수 있었지만, 나 때문에 유저가 제품을 구매하지 못하고 떠나간다고 생각하니 정말 식은땀이 흐르고 끔찍했다.
앞으로 이런 사고를 어떻게 줄일 수 있을지 생각해 봤지만.. 아직 잘 모르겠다.
그래도 한 가지 떠올려본 것은 테스트 코드다.
지금까지는 테스트 코드에 대해 부정적인 마음이 더 컸다. 새로운 기능 개발하기도 벅찼기 때문이다.
서비스가 빠르게 성장해야 하는 시점에서 테스트 코드는 사치라고 생각했다.
그러나 이번 일을 통해 생각이 조금 바뀌게 되었다.
QA를 자세히 할 인원이 없는 상황이기 때문에 테스트 코드로 조금의 에러라도 거르는 것이 필요하다는 생각이 들었다.
아직 안드로이드 코드에 대한 테스트가 없는데 우선 유닛 테스트라도 작성해 봐야 할 것 같다.
물론 이번 에러는 유닛 테스트로는 해결되지 않는 부분이겠지만, 그래도 앞으로 발생할 에러들을 줄여볼 수 있을 것 같다.
'트러블 슈팅' 카테고리의 다른 글
한글 변수는 나쁠까? (0) | 2024.02.12 |
---|---|
액티비티와 프레그먼트간 데이터를 주고 받는 방법들 (3) | 2023.08.25 |