42.1 PWA로 다 되는 거 아닌가요?
PWA를 배우고 나면 다들 이런 생각을 해요. "설치도 되고 오프라인도 되고 푸시도 오는데, 이제 네이티브 앱(운영체제 전용으로 만든 앱)은 안 만들어도 되겠네?" 마음은 알겠는데, 딱 잘라 말하면 아니에요. PWA는 강력하지만 분명한 천장이 있어요. 그 천장을 모르고 시작하면 뒤늦게 갈아엎게 돼요.
이번 편은 코드보다 판단이 주인공이에요. PWA가 어디서 무너지는지 구체적으로 짚고, 내 프로젝트를 PWA로 갈지 네이티브로 갈지 고르는 기준을 잡아볼게요. 저는 예전에 블루투스 기기랑 연동하는 서비스를 신나게 PWA로 절반쯤 만들다가, 아이폰에선 블루투스가 아예 안 된다는 걸 뒤늦게 알고 통째로 엎은 적이 있어요. 그 삽질을 여러분은 안 하시길 바라며 시작할게요.
42.2 아이폰에서 왜 자꾸 막히죠?
PWA의 가장 큰 벽은 언제나 아이폰이에요. 세 가지만 짚을게요. 첫째, 푸시 알림이에요. 아이폰도 iOS 16.4(2023년 봄)부터 웹 푸시가 되긴 하는데, 조건이 붙어요. 반드시 홈 화면에 설치한 사용자에게만 와요. 사파리 탭으로 그냥 열어 쓰는 사람에겐 푸시가 아예 안 가요. 안드로이드는 탭에서도 잘 오는 것과 딴판이죠.
둘째, 저장 공간이 야박해요. 아이폰은 캐시 용량 한도가 낮고, 게다가 사용자가 한동안 안 들어오면 저장해둔 데이터를 스스로 지워버려요. 그래서 "오프라인에 다 담아뒀으니 안심"이라는 계산이 아이폰에선 깨질 수 있어요. 셋째, 설치를 자동으로 유도하는 기능(beforeinstallprompt)도 없어서, 손으로 "공유 → 홈 화면에 추가"를 안내하는 수밖에 없죠. 사용자층에 아이폰이 많은 서비스라면 이 세 가지가 실제로 발목을 잡아요. 그래서 방향을 정하기 전에 "우리 사용자 중 아이폰 비율이 얼마인가"부터 데이터로 확인하는 걸 저는 늘 먼저 해요. 그 숫자 하나가 판단을 많이 바꿔요.
42.3 웹으로는 아예 못 건드리는 게 뭐예요?
브라우저는 보안 때문에 하드웨어에 깊이 손대는 걸 막아요. 대표적으로 안 되거나 반쪽만 되는 걸 목록으로 볼게요.
웹에서 막히거나 반쪽인 대표 기능
- NFC(근거리 무선 통신): 안드로이드 크롬만 됨, 아이폰 불가
- 블루투스 기기 제어: 아이폰 사파리 불가
- 백그라운드 위치 추적: 앱을 벗어나면 끊김
- 연락처, 문자 읽기, 통화 제어: 대부분 불가
- 정밀 카메라 제어(수동 초점 등): 반쪽만 됨
그러니까 NFC 출입증, 블루투스 체온계 연동, 배달 기사 실시간 위치 추적 같은 걸 하려면 웹만으로는 안 돼요. 여기서 판단 기준이 딱 나와요. 이런 하드웨어 기능이 있으면 좋은 정도라면 PWA로 가도 되지만, 서비스의 심장이라면 그 순간 네이티브 후보로 넘어가는 거예요. 애매하면 종이에 "이 기능 없이도 서비스가 성립하나"라고 적어보면 답이 나와요.
42.4 백그라운드 작업은 왜 못 믿나요?
웹은 앱이 화면에 떠 있을 때 잘 돌도록 설계됐어요. 사용자가 탭을 닫거나 다른 앱으로 넘어가면, 브라우저는 배터리를 아끼려고 우리 코드를 슬그머니 멈춰요. 이게 실무에서 은근히 사고를 내요.
상황: "앱을 닫아도 30초마다 서버에 위치를 보내주세요."
- 네이티브: 백그라운드 서비스로 가능(권한 필요)
- PWA: 화면 벗어나면 곧 멈춤, 실행 보장 안 됨
밀린 요청을 연결이 돌아왔을 때 대신 보내주는 Background Sync(백그라운드 동기화) 같은 기능도 크롬 계열에서만 되고 아이폰은 빠져 있어요. 그래서 "꺼져 있어도 정확한 시간에 반드시 실행돼야 하는" 일은 웹에 맡기면 안 돼요. 알람 앱, 지속 위치 추적, 정해진 시각의 예약 실행 같은 게 여기 해당해요. 반대로 "열려 있을 때만 잘 돌면 되는" 일은 PWA로 충분하고요. 굳이 웹으로 우겨넣으면, 개발할 땐 되는 것처럼 보이다가 실제 사용자 폰에서 몰래 멈춰 "왜 어떤 사람만 알림이 안 와요" 같은 재현 안 되는 버그로 돌아와요. 저도 이걸로 며칠 날려봤어요.
42.5 스토어에 없으면 뭐가 아쉬운가요?
기능 말고 사업 쪽 한계도 있어요. 첫째, 발견 가능성이에요. "앱스토어에서 검색해서 깐다"에 익숙한 사용자에겐 스토어에 없는 서비스가 낯설게 느껴져요. 다만 웹이라서 검색·링크 공유에 강한 건 PWA만의 장점이라, 이 항목은 서비스 성격에 따라 유불리가 갈려요.
둘째, 인앱 결제예요. 게임 아이템이나 유료 구독을 스토어 결제 시스템으로 팔아야 하는 사업이라면 웹만으로는 그 통로가 없어요. 셋째, 회사에 따라 "앱스토어에 정식 등록된 앱"이라는 신뢰 자체가 마케팅이 되기도 하죠. 이런 건 코드 실력으로 못 넘는 벽이라, 처음 방향을 정할 때 기능 목록과 함께 같이 계산해둬야 해요.
42.6 그래서 언제 PWA가 맞나요?
이제 판단표예요. 아래 항목에 "그렇다"가 많으면 PWA 쪽이에요.
PWA가 잘 맞는 신호
1. 특별한 하드웨어(NFC, 블루투스) 없이 화면과 데이터가 주력이다
2. 빠르게 널리 퍼뜨리고 검색에 걸리는 게 중요하다
3. 업데이트를 자주, 심사 없이 즉시 내보내고 싶다
4. 예산과 인력이 넉넉하지 않다
5. 아이폰 푸시가 없어도 서비스가 굴러간다
뉴스, 블로그, 커뮤니티, 사내 관리 도구, 예약 페이지, 간단한 쇼핑몰이 딱 이래요. 이런 서비스에 굳이 아이폰용·안드로이드용 네이티브를 두 벌 만드는 건 대부분 비용 낭비예요. PWA 한 벌이면 PC까지 세 곳을 한 번에 덮으니까요. 예를 들어 사내 재고 관리 도구라면, 직원이 사내 링크로 바로 열어 쓰고 자주 오는 사람만 홈 화면에 설치하면 끝이에요. 스토어 등록·심사·두 벌 개발이 통째로 사라지죠.
42.7 반대로 네이티브가 맞는 건 언제예요?
앞에서 본 한계들을 그대로 뒤집으면 네이티브 신호가 돼요. NFC·블루투스 같은 하드웨어가 핵심이거나, 꺼져 있어도 도는 백그라운드가 필요하거나, 고사양 3D 게임처럼 성능을 극한까지 쥐어짜야 하거나, 스토어 결제·노출이 사업의 뼈대라면 네이티브가 맞아요.
정밀 센서를 쓰는 헬스케어, 실시간 영상 편집, 지도 기반 배달 기사용 앱 같은 게 대표적이에요. 여기서 딱 하나만 기억하면 돼요. "요즘 다들 앱 만드니까"는 이유가 아니에요. 위 목록 중 진짜로 걸리는 게 있을 때만 네이티브로 가는 거지, 분위기로 정하면 돈과 시간을 그냥 태우게 돼요.
42.8 꼭 하나만 골라야 하나요?
아니에요. 현실에선 섞어 쓰는 길이 제일 많아요. 웹으로 만든 앱을 얇은 껍데기로 감싸 스토어에 올리는 방식인데, Capacitor(캐패시터) 같은 도구를 쓰면 같은 웹 코드를 스토어용 앱으로 포장하고, 아이폰 푸시나 특정 하드웨어처럼 아쉬운 부분만 네이티브 기능으로 보강할 수 있어요. 웹 주소로 들어온 사람에겐 PWA로, 스토어에서 깐 사람에겐 껍데기 앱으로 같은 코드를 보여주는 조합이라, 코드를 두 벌 관리하는 부담도 크지 않아요.
정리할게요.
1. PWA는 빠르고 싸고 넓게 퍼지는 데 강해요.
2. 네이티브는 하드웨어·백그라운드·성능·스토어에 강해요.
3. 아이폰의 푸시·저장·설치 제약을 늘 먼저 확인하세요.
4. 일단 PWA로 빠르게 검증하고, 명확한 이유가 생겼을 때 필요한 부분만 네이티브로 얹으세요.
둘은 경쟁이 아니라 도구일 뿐이에요. 내 사용자가 누구고 어떤 기능이 정말 필요한지를 따져 알맞은 도구를 고르는 판단력, 그게 이번 이야기에서 여러분이 가져갔으면 하는 진짜 알맹이예요.