모바일 앱에 구글 로그인을 붙이는 일은 웹과 복잡도가 다릅니다. 웹이라면 URL 한 번 이동하면 끝이지만, 모바일은 외부 브라우저에서 인증을 마친 뒤 다시 내 앱으로 정확히 돌아오는 딥링크 과정이 필요합니다. 이 되돌아오는 길을 제대로 깔지 못해 막히는 경우가 많습니다.
React Native(Expo) 환경에서 Supabase로 구글 로그인을 구현하고, 실제 기기 빌드 과정에서 마주칠 수 있는 에러까지 해결한 과정을 적어둡니다.
1. 기술 스택 구성
이번 구현에 쓴 도구들과 선택 이유입니다.
영역
선택 기술
이유
Framework
Expo (React Native)
빠른 생산성 및 강력한 라이브러리 생태계
Auth / Backend
Supabase
Firebase 대비 높은 자유도와 PostgreSQL 기반의 강력한 인증 기능
Authentication
Google OAuth
가장 대중적이고 사용자 접근성이 높은 인증 방식
Browser
expo-web-browser
앱 내에서 안전한 인증 세션을 열기 위한 표준 라이브러리
Linking
expo-linking
인증 완료 후 앱으로 복귀하기 위한 딥링크 제어
핵심 흐름은 단순합니다. expo-web-browser로 인증 창을 열고 expo-linking으로 다시 앱으로 받아냅니다. 나머지 설정은 모두 이 왕복을 매끄럽게 만들기 위한 준비 작업입니다.
2. 핵심 설정: 딥링크
모바일 앱에는 localhost가 없습니다. 인증을 마치고 앱으로 돌아오려면 앱만의 고유 주소(Scheme)가 필요합니다.
딥링크 일관성부터 확인하세요. app.json의 scheme, 코드 안의 redirectTo, Supabase 대시보드의 주소가 셋 다 정확히 일치해야 합니다. 하나라도 어긋나면 되돌아오는 길이 끊깁니다. 다음으로 Google Cloud Console에서 Web Client ID를 생성해 Supabase에 등록했는지 점검하고, 외부 테스트를 할 때는 빌드 모드를 --configuration Release로 두세요.
6. 결론
React Native에서 Supabase와 구글 로그인을 연동하는 일은 코드 작성보다 네트워크 환경과 빌드 구조를 이해하는 쪽이 더 큰 비중이었습니다. 딥링크의 왕복 구조와 디버그/릴리즈 빌드의 차이를 한 번 제대로 잡아두면 다음 프로젝트에서는 훨씬 빠르게 넘어갈 수 있습니다.