pile·
모바일·카카오 스타일 (지그재그)카카오 스타일 (지그재그)·

iOS에서 년도를 구할 때 비정상적인 값이 나오는 문제

지그재그 앱에서 나이를 입력받아 태어난 연도로 저장했더니 일부 사용자의 값이 10 이하나 2500 이상으로 찍히던 버그를 추적한 짧은 기록이다. 원인은 시간 조작도 입력 오류도 아닌 iOS 의 캘린더 설정이었다.

핵심 포인트
  • 나이는 매년 달라지므로 고정값인 태어난 연도로 변환해 저장하는 구조였는데, 일부 값이 비정상적으로 튀었다.
  • 처음에는 사용자가 게임 등을 위해 폰 시간을 바꿔서라고 봤지만, 값이 너무 튀는 데다 종류가 다양하지 않아 설명이 안 됐다.
  • 이상값이 전부 iOS 라는 공통점을 발견하고, 2500~2600 이라는 범위를 단서로 "ios year 2500" 을 검색해 원인을 찾았다.
  • iOS 는 그레고리력 외에 일본력과 불교력도 지원한다. 일본력으로 헤이세이 28년이므로 20살을 입력하면 연도가 9가 되고, 불기로는 2560년이라 2541이 된다.
  • 검증: 이상값 사용자의 사용 언어를 다시 보니 일본력은 일본어, 불교력은 태국어 사용자였다.
상세 정리
  • 배경은 사용자 분석을 위해 최근 업데이트에 나이 입력 화면을 추가한 것이었다.
  • 해결은 코드 한 줄을 바꾸는 것이었다. 기본 캘린더를 쓰던 부분을 명시적으로 지정하도록 바꾸자 사용자가 설정한 캘린더와 무관하게 기대한 값이 반환됐다.
  • 부수적으로 얻은 것도 남긴다. 한국·한국어에 특화된 서비스라고 여겼는데 드물게 외국어 사용자가 있다는 사실을 데이터로 확인하게 됐다.
  • 유사 증상이 있으면 캘린더 설정을 한번 의심해 보라는 조언으로 맺는다.
왜 읽나날짜 계산 결과가 일부 사용자에게만 이상하게 나오는 버그를 만난 iOS 개발자에게, 기기 로케일이 캘린더 체계까지 바꾼다는 사실을 알려준다.
카카오 스타일 (지그재그)
카카오 스타일 (지그재그) 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 모바일·당근당근 테크블로그·

    웹뷰 다음의 레일을 깔다: 당근이 Lynx를 선택한 이유

    당근 프론트엔드코어팀이 WebView 기반 화면의 첫 프레임 렌더링 문제를 해결하기 위해 Lynx를 도입한 기록이다. 레퍼런스가 거의 없는 기술을 코드베이스 직접 분석으로 검증한 뒤 프로덕션에 적용했고, 1.9백만 사용자 A/B에서 Android 18%, iOS 37%의 첫 프레임 단축을 달성했다.

    요약 이어보기
    #cross-platform#webview#mobile-performance+2
  2. 모바일·토스 SLASH토스 SLASH·

    토스의 디바이스 팜 만들기

    토스가 각 팀이 각자 운영하던 작은 디바이스 팜을 하나의 중앙 플랫폼 '네뷸라(Nebula)'로 통합한 과정을 다룬다. Appium 대신 자체 드라이버를 개발해 클릭 13.5배, 텍스트 입력 10배의 성능을 달성했고, Android와 iOS 미러링도 직접 내재화해 실기기 원격 조작과 화면 실시간 공유를 동시에 가능하게 만들었다. 현재 100대를 넘어 수백 대를 향해 24시간 가동 중이다.

    요약 이어보기
    #android#ios#appium+2