왜 HIG에는 토스트가 없을까?

toast-grid

아이폰을 사용하다 보면 위와 같은 토스트 메시지를 종종 볼 수 있습니다. 에어팟이 연결되거나, 에어태그를 발견하거나, 혹은 메모 앱에서 복사한 텍스트가 사파리에 자동으로 붙여넣어질 때 등 다양한 상황에서 등장하는데요. 이런 토스트 메시지들은 iOS 전반에서 널리 사용되고 있지만, 사실 애플은 해당 기능을 공식적으로 제공하고 있지 않습니다. 공식 문서 어디에도 관련 컴포넌트는 등장하지 않으며, HIG(Human Interface Guidelines)에도 토스트에 대한 내용은 찾아볼 수 없습니다.

왜 애플은 Toast를 HIG에 포함시키지 않았을까요?

Toast

토스트는 짧은 시간 동안 화면에 나타났다 사라지는 일종의 피드백 UI 컴포넌트입니다. 주로 오류 메시지나 상태 변화를 알리는 데 사용되며, 화면에서 필요한 공간만 잠깐 차지한 뒤 자동으로 사라집니다. 진행 중인 작업을 방해하지 않으면서 유저와의 상호작용도 계속 유지돼요.

토스트 메시지는 유저가 수행한 작업의 결과를 보여주거나 오류가 발생했을 때 그 이유와 해결 방법을 간단히 안내하는 용도로 쓰이기 때문에, HIG 기준으로 보면 Feedback 패턴의 일종이라고 할 수 있습니다.

HIG - Feeback에 대한 정리 보러가기


왜 Toast는 HIG가 아닐까?

토스트와 유사한 HIG 컴포넌트로는 Alert가 있습니다. Alert는 유저에게 중요한 정보를 바로 전달하거나, 중요한 결정을 내리기 전에 재확인을 요청할 때 사용합니다. 예를 들어, 데이터를 삭제하거나 상품을 결제할 때와 같은 경우죠. 정보를 전달한다는 측면에서는 토스트와 비슷하지만, 차이점도 분명히 존재합니다.

예를 들어, 전달해야 할 정보가 많다면 3~5초 내에 사라지는 토스트는 적합하지 않아요. 이럴 땐 Alert처럼 명확하게 전달하고, 상황에 따라 액션 버튼을 제공해주는 방식이 더 유용합니다.

물론 토스트에도 버튼을 추가할 수 있지만, 짧은 시간 안에 유저가 그 버튼이 어떤 의미인지 파악하고 반응하기는 쉽지 않기 때문에, 좋은 UX라고 보기는 어렵습니다.

반면, 토스트의 가장 큰 장점은 유저가 보고 있는 흐름(context)을 방해하지 않는다는 점입니다. Alert는 사용자의 흐름을 차단하지만, 토스트는 자연스럽게 메시지를 전달하고 바로 사라지기 때문에 훨씬 더 부드러운 경험을 제공합니다.

그렇다면 왜 애플은 이처럼 유용한 컴포넌트를 HIG에 포함시키지 않았을까요?

제가 생각하는 이유는 바로 화면의 일부를 가린다는 점 때문입니다. 애플은 유저가 보고 있는 화면, 즉 맥락(context)을 매우 중요하게 여기기 때문에, 화면을 가리는 어떤 요소라도 신중하게 도입합니다.

토스트는 정보 전달에 효과적이긴 하지만, 화면의 일부를 덮는 방식으로 나타나기 때문에 애플의 UX 철학과는 다소 맞지 않는 면이 있습니다. 대신 에어팟이 연결되거나 에어태그가 감지되는 등의 경우처럼, 유저의 현재 맥락과 직접적으로 관련되지 않은 시스템 레벨의 피드백 상황에서만 토스트 메시지를 제한적으로 사용하고 있는 것으로 보입니다.

no-toast

안드로이드의 Toast를 살펴볼까요?

안드로이드는 iOS와 달리 자체적으로 Toast 기능을 제공합니다.
👉🏻 Developer 문서

안드로이드 문서에서도 토스트를 “작업에 대한 피드백을 주는 간단한 팝업”으로 정의하고 있는데요. 흥미롭게도, 구글은 토스트보다는 Snackbar를 더 권장하고 있습니다. 스낵바는 유저가 직접 액션을 취할 수 있는 옵션을 함께 제공할 수 있어서 더 유연하고 유용한 UI 요소로 여겨집니다

android-snapbar


그럼에도 불구하고 Toast를 사용하면 좋은 상황

앞서 이야기한 것처럼, 애플이 HIG에서 토스트를 제외한 이유는 유저가 보고 있는 맥락을 해치지 않기 위한 철학 때문입니다. 하지만 그럼에도 불구하고, 특정한 상황에서는 토스트가 오히려 더 좋은 사용자 경험을 제공할 수 있습니다.

☠️ 오류메시지

오류 메시지를 전달하는 방식은 크게 두 가지입니다.

  1. 텍스트 필드 아래에 작은 문구로 오류를 표시하는 방법
  2. Alert를 띄워 명시적으로 사용자에게 오류를 알리는 방법

하지만 복잡한 입력 화면처럼 입력 필드가 많은 경우에는 모든 오류를 UI에 녹여내기 어렵습니다. 또한 "등록할 수 없는 카드 정보예요. 확인 부탁드립니다."처럼 간단한 문구는 굳이 Alert를 띄우지 않아도, 토스트를 통해 자연스럽게 전달하는 것이 훨씬 효율적입니다.

특히 복잡한 서비스일수록 토스트는 개발 측면에서도, 디자인 측면에서도 훨씬 경제적이에요. 반대로 Alert는 화면 전환처럼 느껴져 부담이 커질 수 있습니다.

단, 중요한 정보는 절대로 토스트로만 처리하면 안 됩니다. 예를 들어, 사용자가 글을 작성 중인데 실수로 뒤로가기를 눌렀다면 “삭제했습니다” 같은 토스트 메시지가 아닌, 반드시 취소할 기회를 제공하는 Alert가 필요해요.

error-toast

♻️ 자동 상태 변경

블루투스 연결, 수면 모드 진입, 비행기 모드 전환 등 자동으로 상태가 변경되는 경우, 유저에게 상태 변경을 알리는 것은 중요하지만, 그렇다고 Alert를 띄워 흐름을 끊는 것도 좋은 방식은 아닙니다.

이런 경우엔 토스트 메시지를 사용해 자연스럽고 간결하게 상태를 전달하는 것이 적절합니다.

auto-toast


마무리

이 글은 iOS에서 토스트의 베스트 프랙티스가 무엇일까에 대한 고민에서 출발했습니다. 토스트는 HIG에 명시되어 있지 않지만, 잘 사용하면 더 나은 사용자 경험을 제공하는 컴포넌트임은 분명합니다. 특히 오류 메시지의 전달에 있어서는 절대 무시할 수 없는 존재예요.

많은 개발자들이 Swift로 토스트 라이브러리를 제작해 두었으며, 아래에 그 중 일부를 소개합니다. UX를 고민할수록 “애플은 왜 이렇게 만들었을까?“라는 질문을 하게 되고, 그 고민 끝에 나만의 기준을 세우는 과정은 언제나 즐거운 경험이라고 생각합니다.

✅ Toast Library

✅ 토스에서 소개한 좋은 오류메시지를 만드는 방법 6가지

  • https://toss.tech/article/how-to-write-error-message

  • 최고의 에러는 발생하지 않는 것

  • 적절한 컴포넌트 쓰기

  • 스스로 해결할 수 있는 방법 알려주기

  • 사용자 입장에서 이해할 수 있는 언어로 쓰기

  • 쉽게 해결할 수 있게 도와주기

  • 부정적인 감정 최소화하기


Reference

;