2P by GN⁺ 4일전 | ★ favorite | 댓글 1개
  • 아이폰 알람 앱의 시간 선택 방식은 원형 디자인이 아님
  • 겉보기에는 회전형 인터페이스처럼 보이지만 실제로는 긴 리스트 구성임
  • 사용자가 스크롤하는 방식이 끝이 없는 것처럼 느껴지게 만듦
  • 개발자나 UX 디자이너에게 UI 착시 효과 사례로 주목받음
  • 실제 구현 방식에 대한 이해가 앱 개발에 참고됨

아이폰 알람 앱의 시간 선택기 구조

  • 아이폰의 알람 앱에서 시간 설정을 위한 선택기는 표면적으로는 원형(회전휠) 형태처럼 보임
  • 하지만 해당 선택기는 실제로 시작과 끝이 정해진 매우 긴 리스트로 구현되어 있음
  • 사용자가 스크롤할 때 위나 아래로 계속 돌릴 수 있는 듯한 착각을 줌
  • 이러한 구현 방식은 직접적인 원형 인터페이스를 적용하지 않고도 유사한 사용자 경험을 제공하기 위한 디자인임
  • 개발자는 무한 스크롤형 리스트를 활용하여 원처럼 보이도록 사용자 인터페이스를 설계함

개발자 및 UX 설계 관점

  • 이 방식을 통해 단순 리스트만으로 복잡한 원형 인터페이스를 대체 가능함
  • 실제로는 리스트의 양 끝에서 반대 방향으로 이동하지 않음, 다만 리스트 항목이 많아져 사용자가 한계에 도달하기 어렵게 됨
  • 이러한 디자인은 UI 착시 효과를 이용해 사용자가 기대하는 경험을 제공함
  • 앱 개발 시 리스트 구현만으로 원형 효용성과 사용성을 확보할 수 있는 사례임

결론

  • 아이폰 알람 앱의 시간 선택기는 긴 리스트를 돌리는 방식으로 원형 효과를 줌
  • 이는 개발자 및 UI/UX 디자이너에게 직관적이면서도 효율적인 인터페이스 설계 방향성을 제시함
Hacker News 의견
  • 알람 앱에서 진짜로 불편한 버그(혹은 기능인지는 모르겠음)는 시간 다이얼이 튕기며 멈추기까지 기다려야만 AM/PM 설정이 제대로 적용된다는 점임. 그냥 스와이프하고 저장을 누르면 이전 설정이 그대로 남아서, 중요한 7am 알람이 7pm으로 유지되어 회사에 지각하게 되는 경험이 생김
    • 요즘은 메뉴 코딩조차 제대로 못 하는 느낌임. 예를 들어 macOS 리마인더 앱 메인 리스트 화면에서 시간 드롭다운 메뉴를 선택할 때, 원하는 시간 위에서 마우스 버튼을 놓고 플래시 애니메이션이 작동 중일 때 커서를 위아래로 살짝 움직이면 갑작스럽게 다른 시간이 선택됨. macOS에서 1984년부터 항상 같았던 동작 방식과 전혀 일치하지 않음. 몇 년 전에 버그 리포트했지만, 아마 더 중요하게 처리하는 일이 많을 거라고 봄
    • 이 버그 때문에 몇 번 고생하다가 결국 모든 기기에서 24시간제로 완전히 전환하게 됨. 매일 사용하는 인터페이스 치고 iOS의 세로 스크롤 다이얼 UI는 사용성과 미관 측면에서 정말 별로라고 생각함. 그래도 다이얼 가운데를 탭하면 숫자 키패드가 뜨는 기능이 생겨서 정말 다행이었음. 키패드로 시간 입력하는 방식은 매우 잘 설계되어 있어 효율적임
    • 이게 나만 그런 줄 알았는데 아니었군. 그 긴 시간 동안 Apple이 알람 하나 제대로 못 만드는 현실임
    • Android에서 iPhone으로 바꾸면서 생긴 문제 중 가장 큰 이슈가 이거임. 그런데 더 열받는 건, 개발자나 프로그래머에게 이런 이슈를 이야기하면 항상 "너가 제대로 안 하고 있는 거 아냐", "그게 뭐 그리 중요한가?" 식으로 대충 넘김. (중요하니까 나도 늦잠 자기 싫고, 결국 이런 대화가 생기는 거임!) 우리 연봉 10만 달러 이상씩 받으면서 이런 자잘한 것조차 빠르게 고치지 못한다는 게 참 답답함. 자부심도 가지고 간단한 버그는 과감히 고쳐주길 바람. 그래도 이 세상은 계속 UX가 더 복잡해지고 있음. 단순함을 외치면서 알람과 타이머 UI가 서로 달라지고 시각적으로만 비슷하거나, 중복 캘린더 이벤트가 정규식 한 줄로 사라질 수 있는데 노출된 채 남아있는 경우, 동명이인 연락처를 못 찾아서 수동 병합 절차가 숨겨져 있는데 어렵게 병합하면 생일 이벤트가 하나 더 추가되어 삭제조차 안 되는 경험 등등. (실제 내 경험임.) 우리 모두 소프트웨어를 더 나쁘게 만들고 있다고 생각함. AI가 생산성이 올라서 일자리를 차지하는 게 아니라 우리가 품질 기준을 너무 낮췄기 때문이라고 생각함. 이제 Perl이나 Brainfuck으로 안 짜는 것만 해도 감탄스러울 정도임
    • 그래서 수면/기상 알람 기능이 있는 것임. 이 기능 UI는 정말 괜찮음. 주간 스케줄을 설정할 수 있고, 알람 시간을 조정할 때 원형 시계 UI를 통해 얼마나 더 잘 수 있을지도 시각적으로 보여줌
  • 10년 전만 해도 좋은 스마트폰 알람 앱은 이런 모습이었음 Nokia N9 알람 시계 UI 참고. 그리고 이를 다룬 Hacker News 토론글도 있음
    • Google Clock 앱도 비슷한 기능을 제공함. 메인 화면에 슬라이더, 원형 시간 선택기(개인적으로 선호하진 않음), 알람까지 남은 시간을 알려주는 토스트 알림이 있음. 매일/사용 안함 옵션만 빠짐
    • Android 시계 앱은 꽤 괜찮고, Nokia N9 알람 앱과 비슷한 모습임. 올해 초 iPhone으로 전환했는데 다양한 UI 문제가 너무 불편함. 느린 회전 다이얼에 질렸고, 알람 설정 후 Android에서 제공하는 "알람까지 x시간 남음" 같은 확인 메시지가 너무 그리움. 특히 숫자 스피너는 정말 별로임. Hilton 앱에서 아이들 나이를 계속 설정해야 할 때마다 숫자 다이얼 돌리느라 스트레스 쌓임. iOS가 왜 마법같고, 즐거우며, 직관적이라는 평판이 생겼는지 모르겠음. 이제 Pixel로 돌아가고 싶어짐
    • 재밌게도 iOS에서 Health 앱 통해 들어가는 수면 스케줄 설정화면이 Nokia N9 알람 시계랑 매우 비슷하게 생김
    • 제대로 된 스마트폰이란 게 중요함. Nokia가 최고의 제품을 내놓은 직후 사업을 포기했다는 게 정말 아쉬움
    • 요즘 젊은 사람들 중에 시계 바늘을 읽을 줄 모르는 경우가 많아서, 대중을 겨냥하려면 이런 점도 고려해야 한다고 생각함
  • 최소한 분/초는 짧은 리스트로 설정되어 한 번에 00에 빠르게 갈 수 있었으면 좋겠음. BigClock이라는 PalmOS 앱에선 숫자 각 자리의 상단을 탭하면 1씩 증가, 하단을 탭하면 1씩 감소하는 방식이었는데 아주 빠르고 예측 가능한 입력이 가능했음. 스크롤 휠의 튕김 같은 시각적 피드백 없이도 원하는 시간 선택이 쉬웠음. BigClock 소개1, BigClock 소개2
    • 그냥 키보드(화상 키패드도 좋고 물리 키패드도 상관 없음)만 있으면 좋겠음. 최대 네 번 입력이면 끝남
  • iOS 시계 앱은 정말 별로임. 이제 iOS 26에 AlarmKit이 들어오니까 나만의 커스텀 알람 앱을 만들 수 있게 되어 정말 기쁨. "반복 알람은 유지하면서 내일만 잠깐 끄기" 같은 아주 당연한 기능이 빠져 있었고, 캘린더 연계 알람 같은 것도 없었음
    • 수면 기능을 사용하면 일반 알람 대신 이런 "내일만 끄기" 기능을 몇 년 전부터 이미 쓸 수 있었음. 수면 일정 변경 시 전체 스케줄을 바꿀지, 한 번만 끌지 물어봄
    • Apple이 직접 알람 앱 제작 권한을 오픈한다는 게 보안문제의 큰 구멍처럼 느껴짐
    • 수면 스케줄을 쓰면 다음 알람만 스킵하거나, 요일에 따라 서로 다른 기상 시간을 지원함. 일반 알람과 같은 곳에서 바로 설정 가능함
    • 나는 별로 나쁘다고 생각하지 않고 오히려 단순해서 기본앱으로서 이해가 잘됨
  • 이 코드는 작성 이후 정말로 다시는 안 들여다봤던 걸까, 아니면 코드 리라이트 이후까지 살아남았던 걸까 궁금함. 옛날 iPhone은 알람 타임존이 꼬이거나 서머타임 바뀔 때 제대로 울리지 않는 악명이 있었음 iPhone 알람 버그 – 타임존/서머타임 문제
    • 이건 타임존이나 Clock 앱 문제와는 별개임. 이 한계는 UIPickerView라는 시스템 레벨 UI 컴포넌트에서 생긴다고 봄. 내 앱에도 비슷한 "버그"가 있음
    • 자연 성장적으로 생긴 결과라고 봄. 처음엔 AZ리스트였겠지만, 누군가가 이를 회전형으로 만들려고 하면서 UI 레벨에서 가장 간단한 해결책이 유한한 리스트를 여러 번 반복시키는 방식이라 그냥 이런 방식이 유지됨. 예를 들어, HTML의 유한 리스트는 정말 간단하게 만들 수 있지만, 가상화된 JS 무한 리스트는 프레임워크 바꿀 때마다 다시 포팅해야 할 거임(SwiftUI로 바뀐다든지)
    • 동일한 몇 개 컴포넌트를 반복해서 재활용하는 원형, 무한 리스트를 만드는 게 너무 어렵기 때문에, 직접적으로 (0..60).times(50).flatten() 식의 흉폭한 코드가 99% 문제를 1% 노력으로 다 해결해줌. QA에서 리스트 끝까지 스크롤할 때만 이슈가 생기면 Product에서나 이걸 이슈로 들고올 듯. 누가 신경이나 쓰겠나
  • 이건 커스텀 위젯 개발을 피하려고 쓴 훌륭한 해킹 방법임. 무작위 엔지니어에게 박수를 보냄
  • 10년 넘게 이런 방식이 숨겨져 있었음. 실질적인 해결책에 대해 생각해볼만 함
    • 실용주의가 완벽주의보다 낫다고 생각함
  • 내가 흥미롭다고 생각하는 점 중 하나는, 타이머와 알람이 서로 멀리 떨어진 별도 구현을 갖고 있다는 것임. 알람에선 분 단위가 순환이 되는데 타이머에선 안 됨. 왜 비슷한 인터페이스임에도 다르게 구현되었는지 모르겠음. 원형도 아닌 게 의문임. 불필요하게 복잡도만 더하는 코드라고 봄
  • 여기 댓글에 iOS 알람 버그에 질린다는 사람들이 많아서 혹시 비슷한 사람들을 위해 팁을 하나 남김. Sharp에서 저렴하면서 괜찮은 알람시계를 여러 개 판매함. 5~12달러면 이런 버그에서 영원히 해방될 수 있음. 덤으로 아침에 첫 손이 가는 기기가 두뇌를 망치는 스마트폰이 아니라는 점이 가장 큰 장점임. 개인적으로 Walmart에서 산 Sharp Twin Bell 모델이 가장 고가였는데도 12.63달러임
    • 같은 모델을 쓰고 있음. 예전 디지털 알람에서 경험하지 못한 최고의 특징은 매일밤마다 직접 알람을 설정해야 한다는 것임. 알람은 온오프 스위치만 있고 알람이 울리기 시작하면 꺼야 하고, 최소 12시간 뒤에 다시 켜야 함(아니면 저녁 8시에 울릴 수도 있음). 그래서 밤마다 일정 확인 후 알람 스위치를 켜는 루틴이 생활화 되었고, 이제 휴일이나 이른 시간 알람 설정을 깜박할 걱정이 없어짐. 그리고 정말 소리가 크기 때문에 알람 소리 듣고 다시 잔 적이 없음
  • 알람과 타이머에서 스누즈와 정지 버튼 위치가 반대인 이유를 도저히 모르겠음. 어떤 건 정지 버튼이 화면 중앙이고, 어떤 건 하단임. 왜 이런 부분이 표준화되지 않았는지 의문임
    • 아침에 반쯤 잠든 채 휴대폰을 더듬을 때, 평소에 익숙한 곳에 크고 밝은 주황색 스누즈 버튼이 있어 손쉽게 눌러버림. 완전히 깨서 알람을 끄려면 위치가 달라진 회색 정지 버튼을 눌러야 하는데 그때만 겨우 알람이 멈춤. 알람 설정서 스누즈를 끄면 타이머와 마찬가지로 중앙에 큰 주황색 정지 버튼을 쓸 수 있음. 그런데 이 디자인이 너무 직관적이라서인지 iOS 26에서는 두 버튼이 서로 다르게 생겼다는 이유로 없어진다고 들음. 이제 알람에서 가장 중요한 게 예쁘게 보이는 거라니 참 아쉬움
    • 형제여 정말 고맙다는 말을 전하고 싶음. 이런 사소한 디테일의 부족 때문에 몇 년간 너무 힘들었음