React Native 네이버 로그인 연동: Expo부터 심사까지

React Native(Expo/Bare)에서 네이버 로그인 붙이는 방법. @react-native-seoul/naver-login 4.x, iOS URL Scheme, Android 설정, 네이버 개발자 센터 앱 등록과 검수 요청까지 실전 정리.

한국 로그인/React Native 네이버 로그인 연동: Expo부터 심사까지

KR 로그인 SDK

React Native 네이버 로그인 연동: Expo부터 심사까지

네이버 로그인 React Native 연동 실전 가이드. Expo Config Plugin, iOS URL Scheme, Android Proguard, 네이버 개발자 센터 검수 요청까지 한 번에 정리했습니다.

한 줄 답: React Native에서 네이버 로그인은 @react-native-seoul/naver-login 4.x + EAS Build + Config Plugin으로 연동하고, 프로덕션 배포 전 반드시 네이버 개발자 센터 검수를 완료해야 합니다.

Boaz · Product Engineer

네이버 로그인은 카카오만큼 자주 쓰이지만, 공식 문서가 Objective-C 기준이라 React Native에 적용할 때 막히는 부분이 한두 군데가 아닙니다. 특히 iOS에서 네이버 앱이 설치된 경우와 없는 경우 동작이 달라지고, Android는 Release 빌드에서 Proguard 설정을 빠뜨리면 프로덕션에서만 조용히 깨집니다.

Expo에서 네이버 로그인은 카카오와 마찬가지로 EAS Build 또는 Bare Workflow가 필요합니다. Expo Go에서는 동작하지 않습니다.

네이버 개발자 센터 앱 등록부터 시작

코드를 건드리기 전에 네이버 개발자 센터에서 애플리케이션을 먼저 등록해야 합니다.

  1. 개발자 센터 로그인 → Application → 애플리케이션 등록
  2. 애플리케이션 이름 입력
  3. 사용 API: 네이버 로그인 선택
  4. 로그인 오픈 API 서비스 환경에서 iOSAndroid 각각 추가
    • iOS: Bundle ID (예: com.yourcompany.yourapp)
    • Android: 앱 패키지 이름 (예: com.yourcompany.yourapp) + 마켓 URL (선택)
  5. 등록 완료 후 Client IDClient Secret 발급

여기서 나오는 Client ID가 consumerKey, Client Secret이 consumerSecret입니다. 헷갈리기 쉬운 네이밍이라 한 번은 바꿔 입력해서 인증 실패를 겪습니다.

패키지 설치와 Config Plugin 설정

최신 버전은 4.2.4(2026년 1월 기준)입니다.

yarn add @react-native-seoul/naver-login

Expo 프로젝트라면 app.config.ts에 플러그인을 추가합니다.

import { ExpoConfig, ConfigContext } from 'expo/config';

export default ({ config }: ConfigContext): ExpoConfig => ({
  ...config,
  plugins: [
    [
      '@react-native-seoul/naver-login',
      {
        urlScheme: 'naverlogin-yourapp',
      },
    ],
  ],
});

urlScheme 값은 다른 앱과 겹치지 않도록 앱 패키지명을 변형해서 쓰는 게 좋습니다.

앱 초기화와 로그인 구현

App.tsx 또는 최상위 컴포넌트에서 네이버 로그인을 초기화합니다. 로그인 버튼을 렌더링하기 전에 반드시 호출해야 합니다.

import NaverLogin, { NaverLoginResponse } from '@react-native-seoul/naver-login';
import { useEffect } from 'react';

const NAVER_URL_SCHEME = 'naverlogin-yourapp';

export default function App() {
  useEffect(() => {
    NaverLogin.initialize({
      appName: '내 앱 이름',
      consumerKey: process.env.NAVER_CLIENT_ID ?? '',
      consumerSecret: process.env.NAVER_CLIENT_SECRET ?? '',
      serviceUrlSchemeIOS: NAVER_URL_SCHEME,
      disableNaverAppAuthIOS: false,
    });
  }, []);

  const handleLogin = async () => {
    const { successResponse, failureResponse }: NaverLoginResponse = await NaverLogin.login();
    if (successResponse) {
      const profile = await NaverLogin.getProfile(successResponse.accessToken);
      console.log('이름:', profile.response.name);
    }
  };
}

Android Proguard: 프로덕션에서만 깨지는 이슈

Release 빌드에서 R8 코드 압축을 사용한다면 네이버 SDK 클래스가 난독화되면서 런타임에 ClassNotFoundException이 발생합니다. android/app/proguard-rules.pro에 추가합니다.

-keep public class com.navercorp.nid.** { *; }

개발 중에는 debug 빌드를 사용하니 이 문제가 안 보이다가 Play Store 배포 후 처음 알게 되는 경우가 많습니다. 미리 Release 빌드로 테스트해두세요.

네이버 개발자 센터 검수 요청

네이버 로그인은 개발 단계에서는 등록한 네이버 계정으로만 테스트가 됩니다. 실제 서비스를 위해서는 검수를 통과해야 합니다.

심사에서 가장 자주 거절되는 이유는 불필요한 개인정보 권한 요청입니다. 서비스에 꼭 필요한 항목만 요청하세요.

에러 메시지 → 원인 매핑

에러 / 증상 원인 해결 방법
로그인 후 앱으로 돌아오지 않음 (iOS) AppDelegate URL 핸들러 미설정 openURL:options: 핸들러에 NaverThirdPartyLoginConnection 추가
The operation couldn't be completed (iOS) URL Scheme 불일치 Info.plist의 CFBundleURLSchemes와 serviceUrlSchemeIOS 값 일치 확인
프로덕션에서 ClassNotFoundException (Android) Proguard 설정 누락 -keep public class com.navercorp.nid.** { *; } 추가
개발 계정 외 로그인 불가 검수 미완료 네이버 개발자 센터에서 검수 요청 제출

자주 묻는 질문

네이버 앱이 설치된 경우와 없는 경우 동작이 다른가요?+

disableNaverAppAuthIOS: false로 설정하면 네이버 앱이 설치된 경우 앱 연동으로, 없으면 웹뷰로 인증합니다. 두 경우 모두 동작하려면 LSApplicationQueriesSchemes에 naversearchapp과 naversearchthirdlogin이 모두 등록되어 있어야 합니다.

검수 없이 개발 테스트는 어떻게 하나요?+

네이버 개발자 센터에서 앱을 등록한 계정은 검수 없이도 로그인 테스트가 가능합니다. 팀원 계정으로 테스트하려면 개발자 센터 내 애플리케이션 설정에서 멤버를 추가해야 합니다.

프로덕션 배포 후 Android에서 네이버 로그인이 크래시납니다.+

Release 빌드에서 R8 코드 압축으로 네이버 SDK 클래스가 난독화되어 발생하는 ClassNotFoundException입니다. android/app/proguard-rules.pro에 -keep public class com.navercorp.nid.** { *; } 를 추가하세요.

iOS에서 로그인 후 앱으로 돌아오지 않습니다.+

AppDelegate.mm의 application:openURL:options: 메서드에 NaverThirdPartyLoginConnection 핸들러가 없거나, Info.plist의 CFBundleURLSchemes 값과 NaverLogin.initialize()의 serviceUrlSchemeIOS 값이 다를 때 발생합니다. 두 값이 정확히 일치하는지 확인하세요.

네이버 로그인 검수에서 자주 거절되는 이유는 무엇인가요?+

가장 흔한 거절 사유는 불필요한 개인정보 권한 요청입니다. 서비스에서 실제로 사용하지 않는 생년월일, 성별, 전화번호 등을 필수로 요청하면 거절됩니다. 이메일과 닉네임만 요청하는 경우 심사 통과율이 높습니다.

B

Boaz 씀

10년차 풀스택 개발자. LINE에서 일하다 퇴사 후 한 달 만에 네이티브 앱 4개를 App Store에 출시했어요. 그 과정을 시스템으로 만든 게 AI App Factory입니다.

이어서 읽기

앱 개발, 시스템으로 끝내세요.

React Native + NestJS + Supabase + AI 에이전트 17개. 1회 결제로 끝나는 인디해커 시스템입니다.

AI App Factory한국 로그인React Native 네이버 로그인 연동: Expo부터 심사까지