본문으로 건너뛰기
피드

애플워치 지도 UI 하나에 6년을 갈아 넣은 이야기

frontend 약 8분

Pedometer++ 개발자가 애플워치용 지도 경험을 6년 동안 다듬어 온 과정을 풀어낸 글이다. 서버 렌더링 지도에서 시작해 SwiftUI 기반 커스텀 렌더링 엔진, 전용 베이스맵, Liquid Glass 대응, 최종 UI 구조까지 실제 제품 설계의 시행착오가 꽤 생생하게 담겨 있다.

  • 1

    watchOS 6 이후 SwiftUI 덕분에 애플워치에서 현실적인 지도 앱 구현이 가능해짐

  • 2

    초기 서버 렌더링 방식은 검증용으로는 괜찮았지만 오프라인 탐색이나 실사용 내비게이션에는 한계가 컸음

  • 3

    최종 디자인은 지도 위에 운동 지표를 겹쳐 올리고, 탭으로 탐색 모드에 들어가는 구조로 정리됨

  • 4

    Liquid Glass와 다크 모드에 맞추기 위해 아예 커스텀 지도 타일까지 제작함

  • 5

    MapKit 대신 자체 엔진을 택한 이유는 Pedometer++가 원하는 수준의 제어력과 유틸리티 때문임

손목 위 지도라는 꽤 빡센 문제

  • 글쓴이는 야생 하이킹을 자주 하는 개발자고, 길을 잃지 않는 핵심 습관으로 “이동하면서 위치를 자주 확인하는 것”을 꼽음

    • 그래서 가장 좋은 인터페이스는 폰을 꺼내는 게 아니라 손목에서 바로 지도를 보는 방식이었다고 함
    • 이 목표를 위해 Pedometer++의 애플워치 지도 경험을 6년 넘게 다듬어 왔고, Pedometer++ 8 출시와 함께 어느 정도 결론에 도달했다고 봄
  • 초반에는 서버에서 지도를 만들어 애플워치로 보내는 방식부터 시작함

    • 운동 데이터를 서버로 왕복시켜 지도 이미지를 갱신하는 구조였음
    • 아이디어 검증에는 쓸 수 있었지만, 내비게이션처럼 자주 확인해야 하는 용도에는 느리고 불편했음
    • 오프라인에서도 당연히 동작할 수 없어서 “실사용 지도”로 가기엔 구조적으로 한계가 컸음

중요

> 이 글의 재미는 “지도 앱 만들었음”이 아니라, 작은 화면에서 실전 내비게이션이 되려면 렌더링, 지도 스타일, UI 전환, 폰트까지 전부 같이 맞아야 한다는 데 있음.

SwiftUI로 직접 지도 엔진을 만든 이유

  • 전환점은 watchOS 6에서 SwiftUI가 들어오면서 시작됨

    • 이때부터 애플워치에서 좀 더 현실적인 “진짜 앱”을 만들 수 있게 됐다고 봄
    • 다만 초기 애플워치는 화면도 작고 프로세서도 느려서 원하는 수준까지 가기엔 여전히 빡셌음
  • 글쓴이는 결국 더 낮은 레벨에서 제어해야 한다고 판단하고 SwiftUI 네이티브 지도 렌더링 엔진을 직접 만듦

    • watchOS에서 쓸 수 있는 선택지가 SwiftUI 중심이었고, 위젯도 SwiftUI만 지원했기 때문에 이 방향이 자연스러웠음
    • 2021년쯤에는 타일 기반 지도를 안정적으로 렌더링하고, 그 위에 위치 정보를 얹을 수 있는 수준까지 도달함
  • MapKit을 쓰지 않은 것도 단순 취향 문제가 아니었음

    • 글쓴이는 MapKit이 기본적인 지도 용도에는 훌륭하지만, Pedometer++가 원하는 설정 가능성과 유틸리티에는 부족하다고 봄
    • 특히 운동 기록, 지도 타일, 위치 오버레이, 작은 화면 UI를 세밀하게 맞추려면 자체 엔진이 더 맞는 선택이었다는 쪽임

UI는 계속 망하고, 그래서 계속 바뀜

  • watchOS 앱 디자인의 핵심 난제는 화면이 작고 한 손으로 조작해야 한다는 점임

    • 지도는 읽기 쉬워야 하고, 팬과 줌도 되어야 함
    • 동시에 운동 거리, 시간, 페이스 같은 지표도 보여줘야 함
    • 둘 다 중요하지만 같은 화면에 우겨 넣으면 바로 복잡해지는 조합임
  • 처음에는 지도 화면과 지표 화면을 버튼으로 전환하는 “모달” 방식에 정착했음

    • 왼쪽 위 버튼으로 지도와 메트릭 화면을 오가는 구조였음
    • 지도 화면에서는 자유롭게 팬과 줌을 하고, 지표 화면에서는 watchOS의 일반적인 탭 페이지 UI를 활용할 수 있었음
    • 실제로 출시까지 했지만, 글쓴이는 계속 타협안 같은 느낌을 받았다고 함
  • 이후에는 지표를 하단에 두는 방식 등 여러 레이아웃을 계속 시도함

    • 문제는 대부분의 디자인이 한 번에 고정된 필드 몇 개만 보여줄 수밖에 없었다는 점임
    • 설정 가능하게 만들 수도 있었지만, watchOS에서는 몇 초 이상 걸리는 조작 자체가 별로임
    • 손목 위에서 설정을 만지작거리는 UX는 너무 번거롭기 때문에 좋은 해법으로 보기 어려웠음

지도 타일까지 새로 만든 이유

  • watchOS 26과 Liquid Glass도 큰 변수였음

    • Liquid Glass는 반투명 레이어를 겹쳐 올리는 디자인 언어라, 배경이 되는 지도 색감과 대비가 UI 가독성에 직접 영향을 줌
    • 기존에는 Thunderforest Outdoors를 베이스맵으로 썼는데, 유리 느낌 요소를 올리니 잘 어울리지 않았다고 함
  • 그래서 아예 커스텀 지도 타일을 의뢰함

    • 지도 제작자 Andy Allen과 함께 Pedometer++에 맞는 새 베이스맵을 만듦
    • 시각 요소를 단순화하고, 대비를 높이고, 색을 더 선명하게 조정함
    • 목적은 유리 UI 아래에서도 지도가 탁하게 뭉개지지 않게 만드는 것이었음
  • 이 작업 덕분에 다크 모드 지도도 제대로 만들 수 있게 됨

    • iOS에서도 도움이 되지만, 손목 거리에서 읽어야 하는 watchOS에서는 효과가 훨씬 큼
    • 핵심은 “예쁜 지도”가 아니라 팔을 뻗은 거리에서도 지형과 경로가 읽히는 지도였음

최종 해법은 레이어링과 탐색 모드

  • 디자인 파트너 Rafa Conde가 제안한 레이아웃에서 최종 방향이 잡힘

    • 운동 지표를 지도 위 왼쪽 상단에 레이어처럼 올림
    • 지도는 세로 스택의 맨 위 페이지로 두는 구조를 택함
    • 평소에는 지표와 지도를 같이 보고, 지도를 탭하면 별도의 “탐색 모드”로 들어가 팬과 줌을 할 수 있음
  • 이 방식은 watchOS의 제약을 꽤 영리하게 피함

    • 지도 조작과 페이지 스와이프가 충돌하지 않도록, 먼저 탭해서 지도 조작 모드에 들어가게 함
    • 지표는 항상 중요한 위치에 남기되, 지도를 완전히 가리지 않도록 올려둠
    • 작은 화면에서 정보량과 조작성을 동시에 챙기려면 이런 상태 전환이 필요했던 셈임
  • 글쓴이는 이 프로토타입을 실제로 몇백 마일 걸으며 검증했다고 함

    • 책상 위에서 예뻐 보이는 UI가 아니라, 야외에서 계속 확인해도 읽히고 쓸 수 있는지를 본 것임
    • 이후 폰트와 세부 디자인을 더 다듬어 Pedometer++ 8에 최종 반영함

ℹ️참고

> 이 사례는 웨어러블 앱에서 “설정 가능성”이 항상 좋은 게 아니라는 걸 잘 보여줌. 손목에서는 사용자가 오래 조작하지 않는다는 전제가 제품 구조를 완전히 바꿔버림.


기술 맥락

  • 이 글에서 제일 큰 선택은 MapKit에 기대지 않고 SwiftUI 기반 커스텀 지도 렌더링 엔진을 만든 거예요. 기본 지도 표시만 필요했다면 MapKit이 훨씬 빠른 길이었겠지만, Pedometer++는 운동 데이터와 지도 타일, 위치 오버레이를 손목 화면에 맞춰 세밀하게 조합해야 했거든요.

  • 서버에서 지도 이미지를 만들어 보내던 초기 방식은 아이디어 검증에는 괜찮았지만, 내비게이션 제품에는 맞지 않았어요. 위치를 자주 확인해야 하는데 매번 서버 왕복이 필요하면 반응성도 떨어지고, 산이나 외딴 지역처럼 네트워크가 불안정한 곳에서는 바로 약점이 드러나거든요.

  • UI 쪽 선택도 비슷해요. 지도와 운동 지표를 한 화면에 그냥 넣으면 작고 복잡해지고, 설정 화면을 많이 만들면 watchOS 사용 패턴과 안 맞아요. 그래서 지도는 탭했을 때 탐색 모드로 들어가게 하고, 평소에는 핵심 지표를 레이어로 얹는 구조가 나온 거예요.

  • 커스텀 베이스맵을 만든 이유도 단순한 브랜딩이 아니에요. Liquid Glass처럼 반투명 UI를 지도 위에 올리면 배경 색과 대비가 가독성을 크게 흔들어요. 그래서 색을 더 선명하게 하고 요소를 단순화한 지도 타일이 필요했던 거예요.

작은 화면일수록 ‘기능을 넣는 것’보다 ‘언제 어떤 맥락에서 보여줄지’가 훨씬 빡센 문제라는 걸 보여주는 글이다. 특히 웨어러블 앱을 만드는 팀이라면 지도, 운동 지표, 조작성을 어떻게 같이 살릴지 꽤 참고할 만함.

댓글

댓글

댓글을 불러오는 중...

frontend

Figma의 'Sketch 모멘트'가 온다 — Claude Design이 바꾸는 디자인 도구 지형

디자이너 Sam Henri Gold가 Claude Design을 체험한 뒤 디자인 도구의 source of truth가 다시 코드로 이동할 것이라고 주장했다. Figma의 폐쇄적 포맷은 LLM 학습 데이터에서 사실상 제외됐고, agentic 시대에는 HTML/JS 같은 모델이 잘 아는 매체에서 작업하는 Claude Design류가 우위를 가져간다는 예측이다.

frontend

구글, '뒤로가기 버튼 하이재킹' 공식 스팸 정책 위반으로 지정 — 6월 15일부터 시행

구글이 브라우저 뒤로가기 버튼을 가로채는 행위를 스팸 정책의 '악의적 관행' 위반으로 명시했음. 위반 사이트는 수동 스팸 조치나 자동 검색 순위 강등을 받게 되며, 서드파티 라이브러리나 광고 플랫폼이 원인이어도 사이트 소유자 책임. 시행일은 2026년 6월 15일.

frontend

안드로이드, 사진 위치 정보를 전방위로 차단 중 — 웹 개발자들 울상

구글 안드로이드가 사진의 EXIF 위치 정보를 웹 업로드, 블루투스, 이메일 등 거의 모든 경로에서 자동 제거하고 있음. 위치 기반 사진 서비스를 운영하는 개발자가 웹에서는 더 이상 사진 위치 정보를 받을 방법이 없어 네이티브 앱 개발이 불가피하다고 호소함.

frontend

관용적 디자인을 되돌려줘 — 데스크톱 시대의 일관성이 그립다

데스크톱 소프트웨어 시대에는 File/Edit/View 메뉴 같은 디자인 관용구 덕분에 처음 보는 프로그램도 바로 쓸 수 있었지만, 브라우저 시대에는 앱마다 인터페이스가 전부 달라서 매번 '이거 어떻게 쓰지?'를 반복하게 됐다. 모바일 전환과 프론트엔드 프레임워크의 빠른 변화가 원인이며, Apple처럼 강한 디자인 시스템을 밀어붙이는 곳에서 여전히 관용적 디자인의 성공을 볼 수 있다.

frontend

나는 앱 안 깔아, 웹이면 충분한데 왜 자꾸 강요하는 건데

웹에서 잘 되는 서비스를 굳이 앱으로 써야 하는 현실에 대한 개발자의 비판. 대부분의 앱은 JSON 렌더링하는 씬 클라이언트일 뿐인데 100MB+ 설치와 권한을 요구하고, 크로스플랫폼 프레임워크로 만든 앱 퀄리티도 네이티브에 못 미침. 웹 사용자를 앱으로 몰아넣는 엔시티피케이션 루프의 구조적 문제를 지적함.