Firebase Auth: 개념, 인증 방법 및 로그인 제공자

저자: IT Sectr 게시일: 2026-04-28 읽는 시간: 9 분

Firebase Auth는 모바일 및 웹 애플리케이션에서 사용자 인증을 위한 Google의 클라우드 서비스로, 이메일, 전화 및 소셜 네트워크를 통한 즉시 사용 가능한 로그인 방법을 제공합니다. SDK는 등록, 로그인, 토큰 갱신 및 로그아웃의 전체 세션 수명 주기를 관리합니다. Google, 2026에 따르면 Firebase Auth는 기본적으로 10개 이상의 인증 제공자를 지원합니다. 이 서비스는 인증된 사용자 수에 제한 없이 무료로 제공됩니다.

핵심 사항

  • Firebase Auth는 이메일, Google, Apple, Facebook, Twitter 및 전화 로그인을 지원하는 통합 SDK입니다.
  • 서비스가 액세스 및 갱신 토큰을 자동으로 관리하므로 개발자가 JWT 로직을 구현할 필요가 없습니다.
  • FirebaseUI Auth는 앱 브랜드에 맞게 사용자 지정할 수 있는 즉시 사용 가능한 로그인 화면 라이브러리입니다.
  • 사용자 지정 claims을 통해 Admin SDK를 사용하여 역할과 권한을 할당할 수 있습니다.
  • 익명 인증은 등록 없이 임시 UID를 제공하며, 이후 영구 계정에 연결할 수 있습니다.

Firebase Auth란

Firebase Auth는 Firebase SDK의 일부로 제공되는 Google의 백엔드 인증 서비스입니다. 비밀번호 해시 저장, JWT 토큰 생성, OAuth 2.0 및 OpenID Connect 흐름 처리 등 모든 서버 측 계정 관리 로직을 처리합니다. 개발자는 자체 인증 서버를 배포하거나, 갱신 토큰을 관리하거나, 확인 프로토콜을 구현할 필요가 없습니다 — Firebase가 모든 것을 처리합니다.

서비스 아키텍처

Firebase Auth는 통합 사용자 저장소를 갖춘 연합 아키텍처를 사용합니다. 각 사용자는 로그인 제공자에 의존하지 않는 고유 식별자(UID)를 받습니다. Google과 이메일로 등록하면 두 개의 연결된 계정(제공자)이 있는 단일 사용자가 생성됩니다. Firebase는 추가 서버 요청 없이 클라이언트 측에서 계정 연결을 자동으로 처리합니다.

Firebase Auth 토큰은 UID, 발급 시간, 만료 시간 및 사용자 지정 claims를 포함하는 페이로드가 있는 JWT(JSON Web Token)입니다. 액세스 토큰은 1시간 동안 유효하며, 갱신 토큰은 무제한입니다(관리 콘솔에서 취소 가능). SDK는 Firebase 서비스에 대한 모든 HTTP 요청에서 토큰을 자동으로 갱신합니다. Google(2026)에 따르면 Firebase Auth는 하루에 5억 건 이상의 인증을 처리합니다.

가격 및 제한

Firebase Auth는 Spark 요금제(무료)와 Blaze 요금제(종량제)에서 완전히 무료입니다. 유일한 제한은 Spark에서 하루 1만 건의 익명 인증입니다(Blaze에서는 무제한). 이메일/전화 및 OAuth 인증에는 제한이 없습니다. 전화 확인의 경우 Spark는 월 1만 건의 확인을 제공하고, Blaze는 사용량에 따라 요금을 부과합니다(처음 1만 건 이후 확인당 $0.01). 이로 인해 Firebase Auth는 시장에서 가장 저렴한 솔루션 중 하나입니다.

Firebase Auth 인증 제공자

Firebase Auth는 기본적으로 12개의 인증 제공자를 지원합니다. 각 제공자는 미리 정의된 흐름을 가진 별도의 ID 서비스로 구현됩니다 — 개발자는 Credential 객체를 생성하여 signInWithCredential에 전달하기만 하면 됩니다. Firebase는 사용자가 신규인지 기존인지 자동으로 판단하고, 이메일이 중복된 경우 계정 연결을 제안합니다.

이메일 및 비밀번호

Email/Password는 Firebase 서버에 저장된 비밀번호 해시(bcrypt)를 사용하는 기본 인증 방법입니다. 등록, 로그인, 이메일을 통한 비밀번호 재설정 및 이메일 확인을 지원합니다. Firebase는 자동으로 비밀번호 강도를 확인하고(최소 6자), N회 실패 후 로그인을 차단할 수 있습니다(무차별 대입 공격 방지).

소셜 제공자

Google, Apple, Facebook, Twitter, Microsoft, Yahoo, GitHub — 모든 OAuth 2.0 제공자는 Firebase 콘솔에서 5분 이내에 구성할 수 있습니다. 각 제공자에 대해 제공자 자체 콘솔에서 Client ID와 Client Secret을 받아야 합니다. Apple Sign In은 App Store 애플리케이션에 필수입니다(2020년부터 Apple 요구 사항). Firebase Auth는 JWT 확인과 함께 Apple Sign In 흐름을 완전히 지원합니다.

제공자프로토콜Client Secret 필요
GoogleOAuth 2.0아니요
AppleOAuth 2.0 + OpenID
FacebookOAuth 2.0
TwitterOAuth 1.0a
GitHubOAuth 2.0

전화 인증

Phone Auth는 사용자의 전화번호로 전송된 SMS 코드를 통한 인증입니다. Firebase는 Silent APN(iOS) 또는 SMS Retriever API(Android)를 사용하여 키보드 입력 없이 코드를 자동으로 읽습니다. Android에서 SMS Retriever API는 Google Play 서비스가 있는 기기에서만 작동합니다. SMS를 사용할 수 없는 지역에서는 Firebase가 대체 방법으로 reCAPTCHA 확인을 지원합니다. 전화 인증은 전화번호 바인딩이 필요한 앱(음식 배달, 차량 호출, 뱅킹)에 중요합니다.

Android에 Firebase Auth 통합

Android에 Firebase Auth 추가하려면 build.gradle에 firebase-auth-ktx 종속성을 추가하고 Firebase App을 초기화해야 합니다(Google Services 플러그인을 통해 자동으로 수행됨). 그런 다음 FirebaseAuth 객체는 정적 메서드 getInstance()를 통해 사용할 수 있습니다 — 전체 앱에 대한 싱글톤입니다. 추가 구성이 필요하지 않습니다.

groovy
// build.gradle (app-level)
dependencies {
    implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
    implementation("com.google.firebase:firebase-auth-ktx")
    implementation("com.google.android.gms:play-services-auth:21.0.0")
}

이메일로 사용자 등록

createUserWithEmailAndPassword는 등록의 주요 메서드입니다. 이메일과 비밀번호를 받아 Firebase Auth에 사용자를 생성하고 UID가 포함된 AuthResult 객체를 반환합니다. 이 이메일을 가진 사용자가 이미 있는 경우 Firebase는 ERROR_EMAIL_ALREADY_IN_USE 오류를 반환합니다. 성공적인 등록 후 SDK는 자동으로 SharedPreferences에 토큰을 저장하고 다음 앱 실행 시 signIn을 호출하지 않고 세션을 복원합니다.

kotlin
class AuthViewModel {
    private val auth = FirebaseAuth.getInstance()

    suspend fun register(email: String, password: String): Result<User> {
        return try {
            val result = auth.createUserWithEmailAndPassword(email, password).await()
            Result.success(result.user?.toUser() ?: throw Exception("User is null"))
        } catch (e: FirebaseAuthException) {
            Result.failure(e)
        }
    }
}

Google 로그인

Google Sign In은 2단계 프로세스를 사용합니다: Credential Manager(Android) 또는 Google Sign-In SDK를 통해 ID Token을 가져온 다음 토큰을 Firebase 자격 증명에 전달합니다. Firebase는 자체 서버에서 토큰을 확인하고(Google의 RSA 키로 서명 확인) 기존 사용자를 생성하거나 반환합니다. 이 프로세스는 클라이언트에 비밀을 저장할 필요가 없습니다 — 모든 인증은 암호화 토큰 확인을 통해 수행됩니다.

사용자 관리 및 세션

Firebase Auth는 세션 수명 주기를 자동으로 관리합니다. 로그인 후 SDK는 갱신 토큰을 로컬 저장소에 저장하고, 앱이 다시 시작될 때마다 자동 로그인을 통해 세션을 복원합니다. 개발자는 토큰 저장소, 만료 처리 또는 갱신을 구현할 필요가 없습니다 — Firebase Auth SDK가 모든 것을 처리합니다.

현재 사용자

FirebaseAuth.getInstance().currentUser는 세션이 활성화된 경우 FirebaseUser 객체를 반환하고, 사용자가 로그아웃한 경우 null을 반환합니다. FirebaseUser에는 UID, 이메일, displayName, photoUrl, phoneNumber, providerData 및 claims 목록이 포함됩니다. 프로필 업데이트(updateProfile) 후 변경 사항은 자동으로 서버와 동기화됩니다. FirebaseUser 객체는 메모리에 캐시되고 모든 인증 작업에서 업데이트됩니다.

익명 인증

signInAnonymously는 등록 없이 임시 사용자를 생성합니다. 익명 사용자에게는 UID가 있지만 이메일, 이름 또는 제공자가 없습니다. 이는 등록 전에 콘텐츠를 사용할 수 있는 앱(장바구니, 즐겨찾기, 기록)에 유용합니다. 사용자가 등록하기로 결정하면 linkWithCredential을 통해 익명 계정이 영구 계정에 연결됩니다. Spark 요금제에서는 하루 1만 건의 익명 인증 제한이 있습니다.

Google(2026)에 따르면 약 40%의 사용자가 익명으로 앱 사용을 시작하며, 이 중 25%가 나중에 익명 계정을 영구 계정에 연결합니다. 이는 익명 인증이 사용자를 등록 사용자로 전환할 때 데이터를 잃지 않음을 의미합니다.

로그아웃 및 계정 삭제

signOut() 메서드는 로컬 세션을 지우고 저장된 토큰을 제거합니다. signOut을 호출한 후 currentUser는 null이 됩니다. delete() 메서드는 Firebase Auth에서 사용자 계정을 완전히 제거합니다 — 연결된 모든 제공자가 연결 해제되고 Firebase 서비스에 대한 액세스가 차단됩니다. 사용자 삭제는 되돌릴 수 없으며 무단 계정 삭제를 방지하기 위해 재인증이 필요합니다.

사용자 지정 Claims 및 역할 관리

Custom Claims은 Firebase Auth가 사용자의 JWT 토큰에 추가하는 사용자 지정 속성입니다. 표준 프로필 필드(이메일, displayName)와 달리 claims는 서버 측에서만 사용할 수 있습니다 — Admin SDK를 통해 또는 Firestore 및 Realtime Database에 대한 Firebase Security Rules의 규칙을 통해. claims는 클라이언트에 직접 표시되지 않지만 user.getIdTokenResult()를 통해 읽을 수 있습니다.

일반적인 사용 사례

역할 및 액세스 권한은 claims의 가장 일반적인 사용 사례입니다. Admin SDK를 사용하면 서버의 맵을 통해 “admin”, “moderator” 또는 “premium_user” 역할을 할당할 수 있습니다. 이러한 claims는 자동으로 토큰에 포함되며 액세스 제어를 위해 Firestore Security Rules에서 사용할 수 있습니다. Google(2026)에 따르면 Firebase 프로젝트의 65%가 별도의 역할 서버 대신 데이터 액세스 관리를 위해 사용자 지정 claims를 사용합니다.

kotlin
// Admin SDK (Node.js) — 사용자에게 claims 할당
const admin = require("firebase-admin")

await admin.auth().setCustomUserClaims(uid, {
    role: "premium",
    tier: "pro",
    maxProjects: 50
})

// 클라이언트에서 claims 읽기
val claims = FirebaseAuth.getInstance()
    .currentUser?.getIdTokenResult(true)
    ?.await()?.claims

Claims 제한 사항

사용자 지정 claims에는 제한 사항이 있습니다: 사용자당 전체 JSON claims 객체의 최대 1000바이트, 객체에 20개 이하의 키. claims는 동적 데이터 저장을 위해 설계되지 않았습니다 — Admin SDK를 통해서만 업데이트되며 실시간으로 동기화되지 않습니다. claims를 업데이트한 후 사용자는 토큰을 갱신하거나(getIdTokenResult(true)) 앱에 다시 로그인해야 합니다. claims는 클라이언트에 캐시되지 않습니다 — 새 로그인할 때마다 서버에서 최신 토큰을 받습니다.

인증 보안

Firebase Auth는 다층 계정 보호를 구현합니다: 트래픽 암호화(TLS 1.3), 비밀번호 해싱(bcrypt, 비용 10), Adaptive Pricing을 통한 무차별 대입 공격 방지(의심스러운 활동 시 자동 응답 지연), 웹 로그인을 위한 reCAPTCHA 통합. 또한 Firebase Auth는 의심스러운 활동(다른 IP에서의 대량 로그인, 잘못된 비밀번호 시도, 의심스러운 이메일 주소)이 있는 경우 계정을 비활성화합니다.

보호 방법

Account Lockout — 일정 횟수의 로그인 실패 후 자동 계정 잠금. 임계값은 Firebase 콘솔에서 구성할 수 있습니다(기본값 10회). Email Enumeration Protection — 이메일 주소 열거 방지. 활성화하면 Firebase가 존재하는 이메일과 존재하지 않는 이메일 모두에 대해 동일한 오류를 반환합니다. Trusted Domains — 설정에 지정된 이메일 도메인이 있는 사용자로만 로그인을 제한합니다.

사용자 지정 토큰 보안

추가 사용자 지정 인증은 Firebase 서비스 계정으로 서명된 JWT인 Custom Tokens를 사용하여 구축할 수 있습니다. 클라이언트가 사용자 지정 토큰을 signInWithCustomToken()에 전달하면 Firebase가 서명을 확인하고 세션을 생성합니다. 이를 통해 사용자 데이터베이스를 복제하지 않고 Firebase Auth를 기존 서버 측 인증(예: 자체 OAuth 2.0 서버)과 통합할 수 있습니다. 토큰은 1시간 동안 유효하며, 이후 SDK가 Firebase 갱신 토큰을 통해 자동으로 세션을 갱신합니다.

자주 묻는 질문

Firebase Auth 비용은 얼마인가요?

Firebase Auth는 Spark 및 Blaze 요금제 모두에서 모든 제공자에 대해 완전히 무료입니다. 제한: 일 1만 건의 익명 등록(Spark) 및 월 1만 건의 SMS 확인(Spark).

여러 제공자를 하나의 계정에 연결하려면 어떻게 해야 하나요?

linkWithCredential을 사용하세요 — 현재 익명 또는 이메일 사용자에게 새 제공자를 연결하는 메서드입니다. 사용자가 Google로 로그인한 다음 linkWithCredential을 통해 이메일을 연결합니다.

인터넷 없이 Firebase Auth를 사용할 수 있나요?

Firebase Auth는 로그인에 인터넷이 필요하지만 세션을 로컬에 캐시합니다. 로그인 후 토큰 갱신이 필요할 때까지(1시간에 한 번) 앱이 오프라인 모드에서 작동합니다.

사용자 토큰을 취소하려면 어떻게 해야 하나요?

Firebase 콘솔에서 Authentication 섹션으로 이동하여 사용자를 찾고 “Revoke Tokens”를 클릭하세요. 모든 활성 사용자 세션이 30분 이내에 무효화됩니다.

사용자가 삭제되면 어떻게 되나요?

콘솔 또는 Admin SDK를 통한 계정 삭제는 모든 Firebase 서비스에 대한 액세스를 즉시 차단합니다. 토큰이 작동을 중지합니다. Firestore, Realtime Database 및 Storage의 데이터는 자동으로 삭제되지 않습니다.

요약

  • Firebase Auth는 Android, iOS 및 Web을 위한 통합 SDK를 갖춘 Google의 클라우드 인증 서비스입니다.
  • 기본적으로 12개의 로그인 제공자를 지원합니다: 이메일, 전화, Google, Apple, Facebook, Twitter 등.
  • SDK가 JWT 토큰(저장, 갱신, 재시작 시 세션 복원)을 자동으로 관리합니다.
  • Admin SDK를 통한 사용자 지정 claims로 별도의 서버 없이 역할 기반 액세스 모델을 구현할 수 있습니다.
  • 익명 인증은 나중에 영구 계정에 연결할 수 있는 임시 UID를 제공합니다.
  • Android 통합에는 추가 구성 없이 하나의 종속성(firebase-auth-ktx)만 필요합니다.
  • 서비스에는 무차별 대입 공격, 이메일 열거 방지 및 의심스러운 계정 자동 차단을 위한 기본 보호 기능이 포함되어 있습니다.

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기