앱 개발보다 앱 출시가 더 어려운 이유

홈페이지를 개발하는 사람들은 종종 앱 개발도 비슷할 것이라고 생각합니다. 하지만 실제로는 전혀 다릅니다. 홈페이지는 개발이 끝나면 서버에 업로드하는 순간 바로 서비스가 가능합니다. 반면 앱은 개발이 끝난 후에도 넘어야 할 과정이 많습니다. 홈페이지는 내가 결정한다 홈페이지는 개발자가 수정하고 서버에 업로드하면 바로 반영됩니다. 문제가 있으면 다시 수정해서 업로드하면 됩니다. 누군가의 승인을 받을 필요도 없습니다. 앱은 스토어가 결정한다 앱은 개발이 끝났다고 바로 공개할 수 없습니다. Apple App Store와 Google Play Store의 심사를 통과해야 합니다. 개발자가 보기에는 아무 문제가 없어도 심사 과정에서 수정 요청이 들어올 수 있습니다. 경우에 따라서는 기능 삭제나 정책 변경이 필요할 수도 있습니다. 개발보다 심사가 더 오래 걸릴 수 있다 특히 최근 구글 플레이 신규 개인 개발자 계정은 비공개 테스트 절차까지 거쳐야 합니다. 제가 최근 출시한 앱의 경우는 개발보다 출시 절차에 더 많은 시간이 소요되었습니다. 내부 테스트, 비공개 테스트, 프로덕션 심사, 스토어 반영까지 거치다 보니 실제 정식 출시까지 약 20일 정도가 필요했습니다. 출시 후에도 끝이 아니다 정식 출시가 완료되면 모든 것이 끝날 것 같지만 그렇지 않습니다. 실제 사용자가 앱을 사용하기 시작하면 다양한 의견과 수정 요청이 들어옵니다. 문구 수정, 안내 메시지 변경, 사용 방법 개선 등 작은 요청들이 이어집니다. 개발자는 수정뿐 아니라 테스트와 검증도 함께 진행해야 합니다. 그래서 앱은 홈페이지와 다르다 홈페이지는 개발이 끝나면 바로 공개할 수 있습니다. 하지만 앱은 개발이 끝난 후부터가 진짜 시작이라고 해도 과장이 아닙니다. 심사, 출시, 운영, 유지보수까지 모두 포함해서 생각해야 하기 때문입니다. 그래서 많은 개발자들이 "앱 개발보다 앱 출시가 더 어렵다"는 말을 하게 되는 것 같습니다.

“location.href vs replace 차이 때문에 삽질한 이야기”

 하이브리드 앱을 개발하면서 단순한 페이지 이동 로직을 만들었다.

버튼을 누르면 location.href로 다른 페이지로 이동하고,
이전 버튼을 누르면 다시 돌아오는 구조였다.

웹에서는 이전 버튼을 자주 사용하지 않기 때문에
이 부분을 깊게 테스트 해 본적이 없다.

그런데 하이브리드 앱(WebView)에서 테스트하는 순간
문제가 바로 드러났다.

뒤로가기를 누르면 이전 페이지로 돌아가는 것이 아니라
같은 페이지를 계속 반복하면서
무한루프처럼 동작하기 시작했다.

처음에는 WebView 문제라고 생각했다.
하지만 원인은 location.href와 히스토리 스택 구조였다.

location.href로 이동할 때마다
히스토리에 페이지가 계속 쌓이고
뒤로가기를 눌렀을 때 페이지가 다시 로드되면서
이동 스크립트가 또 실행되는 구조가 만들어진 것이다.

흐름은 이렇게 반복된다.

A 페이지 → location.href → B 페이지
B 페이지 → 뒤로가기 → A 페이지
A 페이지 로드 → location.href 실행 → B 페이지

이 과정이 계속 반복되면서
하이브리드 앱에서는 뒤로가기 무한루프가 발생한다.

웹에서도 발생하는 문제지만
하이브리드 앱에서는 시스템 하단의 뒤로가기 버튼이 존재하기 때문에
이 문제가 훨씬 쉽게 드러난다.

특히 Android 물리 백버튼이나
iOS 제스처 뒤로가기와 결합되면
사용자는 앱이 고장난 것처럼 느끼게 된다.

해결 방법은 간단하다.

첫 번째는 location.href 대신
히스토리를 남기지 않는 location.replace를 사용하는 것이다.

location.replace('pageB.php');

이렇게 하면 히스토리가 쌓이지 않아
뒤로가기 루프가 발생하지 않는다.

두 번째는 자동 이동 로직이 한 번만 실행되도록
조건을 추가하는 방법이다.


if (!sessionStorage.getItem('moved')) {
    sessionStorage.setItem('moved', '1');
    location.href = 'pageB.php';
}

이렇게 하면 뒤로가기로 돌아왔을 때
다시 이동하지 않는다.

하이브리드 앱에서는 단순한 location.href 이동도
히스토리 스택을 반드시 고려해야 한다.

웹에서는 잘 드러나지 않던 문제가
하이브리드 앱에서는 바로 사용자 경험 문제로 이어질 수 있다.

댓글