「돌아가기」를 두 번 고쳤습니다
9월 8일에 신고가 하나 들어왔습니다. 개인정보처리방침 화면에서 「돌아가기」가 안 된다고요. 원인을 찾아 고치고 배포했습니다.
이틀 뒤, 같은 화면에서 같은 신고가 다시 들어왔습니다. 문장까지 똑같았어요. 「돌아가기 버튼 눌러도 돌아가기가 안 돼.」
처음엔 8일 조치가 실패한 줄 알았습니다. 아니었어요. 첫 번째 관문이 열리자 그 뒤에 있던 두 번째 관문이 드러난 것이었고, 두 결함은 원인이 아무 상관도 없었습니다.
첫 번째 — 버튼이 눌리지 않았다
아이폰은 화면 꼭대기에 시계·신호·배터리를 그립니다. 그 자리에 앱이 뭘 그려 넣으면 보이기는 하는데 눌리지 않습니다. 그 영역의 터치는 운영체제가 가져가거든요.
주소를 갖고 통째로 열리는 화면들이 그 자리를 비우지 않고 있었습니다. 「돌아가기」 버튼 윗선이 화면 맨 위에서 19.8px 지점에 있었는데, 상태바가 덮는 높이는 59px입니다. 버튼이 통째로 그 안에 들어가 있었어요.

점검해 보니 주소를 가진 화면 23개 중 21개가 그 자리를 비우지 않고 있었고, 그중 12곳에서는 실제로 나갈 방법이 없었습니다.
여기서 한 가지가 겹칩니다. 홈 화면에 추가해서 쓰는 앱에는 주소창이 없습니다. 브라우저라면 주소창의 뒤로 버튼이라도 있는데, 설치형 앱에서는 화면 안의 그 버튼이 유일한 출구예요. 눌리지 않으면 갇힙니다.
이 결함이 몇 달을 간 이유도 거기 있습니다. 브라우저로 열면 주소창이 화면을 정직하게 줄여 주기 때문에 재현되지 않아요. 만드는 쪽은 브라우저로 보고, 갇히는 쪽은 설치해서 쓰는 사람입니다.
23개를 고쳐서 배포했습니다. 버튼이 눌리게 됐어요.
두 번째 — 눌리는데 아무 일이 없었다
이제 버튼은 눌립니다. 눌리는데 화면이 그대로입니다.
버튼 안에 있던 코드는 「브라우저 기록을 한 칸 되감아라」였습니다. 「뒤로 가라」가 아니에요. 이 둘은 대개 같은 결과를 내지만, 되감을 칸이 없으면 갈라집니다. 그때는 예외도 오류도 없이 그냥 아무 일도 일어나지 않습니다. 조용해서 자동 검사로도 안 잡혀요.
되감을 칸이 없는 상황이 드물 줄 알았는데, 세어 보니 흔했습니다.
| 어떻게 들어왔나 | 왜 되감을 칸이 없나 |
|---|---|
| 앱 안에서 연 새 탭 | 「개인정보 처리 안내 자세히」 같은 링크를 일부러 새 탭으로 엽니다. 쓰던 글을 잃지 않으려고요. 새 탭의 기록은 한 칸뿐입니다 |
| 검색 결과·북마크·공유 링크 | 우리 앱 안에서 이동한 적이 없습니다 |
| 설치형 앱을 그 주소에서 시작 | 시작점이 곧 첫 칸이고, 주소창도 없습니다 |
반대로 마이페이지나 랜딩 푸터를 거쳐 들어오면 칸이 있어서 잘 됩니다. 화면을 만드는 사람은 앱 안에서 눌러 보니까 늘 멀쩡해 보였어요. 첫 번째 결함과 재현되지 않는 이유가 달랐을 뿐, 개발 중에는 안 보인다는 점은 똑같았습니다.
「기록이 몇 칸인가」로는 못 가릅니다
고칠 때 처음 떠올린 방법은 «브라우저 기록이 한 칸뿐이면 홈으로 보낸다»였습니다. 이건 틀립니다.
구글 검색 결과를 거쳐 들어온 탭은 기록이 이미 두 칸이에요. 검색 결과 페이지가 한 칸을 차지하고 있으니까요. 그 상태에서 되감으면 우리 사이트 밖으로 나갑니다. 사용자는 「돌아가기」를 눌렀는데 구글로 튕겨 나가는 거죠.
그래서 «기록이 몇 칸인가»가 아니라 «우리 앱 안에서 이동한 적이 있는가»를 봐야 합니다. 라우터가 그 값을 따로 적어 두고 있어서, 그걸 읽어 판단하도록 바꿨습니다.
이 값은 라우터 내부 구현이라 언제든 형태가 바뀔 수 있습니다. 그래서 틀리는 방향을 골라 뒀어요. 값을 못 읽으면 「돌아갈 자리가 없다」로 읽고 홈으로 내보냅니다. 어느 쪽으로 틀려도 버튼은 무언가를 합니다. 반대로 「자리가 있다」로 잘못 읽으면 아무 일도 안 하는 원래 결함으로 되돌아가고요.
라벨도 같이 바꿨습니다. 돌아갈 자리가 없는데 「돌아가기」라고 적어 놓고 홈으로 보내면 그건 그것대로 거짓말이에요. 자리가 없으면 로그인 상태에 따라 「앱으로」나 「홈으로」로 글자가 바뀝니다.
남은 것
두 결함을 각각 기계 검사로 막아 뒀습니다. 하나는 「그 버튼이 눌리는 자리에 있는가」를 보고, 다른 하나는 「눌렀을 때 나가는가」를 봅니다. 같은 버튼의 두 관문이라 한자리에 뒀어요.
그런데 정작 오래 남은 건 검사가 아니라 이겁니다. 사용자가 보내는 한 문장은 증상이지 원인이 아닙니다.
「돌아가기가 안 돼」라는 같은 여섯 글자가 이틀 간격으로 두 번 왔고, 하나는 터치가 운영체제에 먹히는 문제였고 다른 하나는 기록을 되감을 자리가 없는 문제였습니다. 공통점은 버튼이 화면 위 같은 자리에 있다는 것뿐이에요.
그래서 이제 이 신고가 오면 먼저 묻습니다. 눌리기는 하나요?