"ChatGPT와 몇 년 대화하며 알게 된 AI의 한 가지 특성"

 ChatGPT를 사용한 지도 꽤 오래되었다. 처음에는 단순히 코드를 물어보는 용도로 시작했지만, 지금은 개발, 사업, 계약, 투자 등 정말 다양한 주제로 대화를 나누고 있다. 그러다 문득 한 가지 특성을 발견했다. ChatGPT는 사람이나 회사를 쉽게 비난하지 않는다. 예를 들어 내가 실제 경험을 이야기하면 AI는 내 말을 무시하지 않는다. "그럴 가능성도 있습니다." "그렇게 느끼셨을 수 있습니다." "그런 해석도 가능합니다." 이런 식으로 대답한다. 하지만 그 다음 단계로 넘어가지는 않는다. 예를 들어, "그 회사는 원래 악덕 회사입니다." 또는 "상대방이 일부러 그렇게 한 것입니다." 처럼 의도나 악의를 단정해서 말하지 않는다. 처음에는 답답하다고 생각했다. '내가 실제로 겪은 일인데 왜 이렇게 조심스럽게 말하지?' 하지만 오랫동안 사용하면서 이유를 조금은 이해하게 되었다. AI는 누군가의 경험을 존중하면서도, 그 경험만으로 상대방의 의도까지 사실처럼 단정하지 않으려는 성향이 있었다. 생각해 보면 이것은 꽤 합리적인 방식이다. 같은 사건이라도 서로의 입장은 다를 수 있고, AI는 한쪽 이야기만 듣고 상대를 비난하는 도구가 되어서는 안 되기 때문이다. 그렇다고 사용자의 말을 무조건 부정하는 것도 아니다. 확인 가능한 사실은 사실대로 인정하고, 확인할 수 없는 의도는 가능성으로만 표현한다. 오랫동안 사용해 보니 이것이 ChatGPT의 일관된 답변 방식이라는 인상을 받았다. AI를 사용하다 보면 가끔은 너무 신중하다고 느껴질 수도 있다. 하지만 한편으로는 이런 특성 덕분에 AI가 근거 없는 비난이나 명예훼손에 쉽게 이용되지 않는다는 장점도 있다고 생각한다. 결국 AI는 사람처럼 편을 드는 존재라기보다, 사실과 추측을 최대한 구분하려는 도구 에 더 가까운 것 같다.

“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 이동도
히스토리 스택을 반드시 고려해야 한다.

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

댓글