728x90
반응형
Firebase는 Flutter와 환상의 궁합을 자랑한다.
특히 인증 처리(Firebase Auth)는 몇 줄의 코드로 시작할 수 있지만,
실전에서는 그 구조와 패턴 설계가 앱의 확장성과 유지보수성에 큰 영향을 준다.
이번 글에서는 단순 연동을 넘어서 고급 구조와 인증 처리 패턴을 소개한다.
🔐 Firebase Auth의 기본 흐름
Firebase 인증은 이메일/비밀번호, 구글, 애플, 카카오 등 다양한 로그인 방식을 지원한다.
기본 플로우는 다음과 같다:
- Firebase 콘솔에서 인증 방식 활성화
- firebase_auth 패키지 설치
- 로그인/로그아웃 처리 구현
final auth = FirebaseAuth.instance;
// 로그인
await auth.signInWithEmailAndPassword(
email: 'test@email.com',
password: '123456',
);
// 로그아웃
await auth.signOut();
🧱 실전 구조 — AuthService 패턴
비즈니스 로직과 UI 로직을 분리하기 위해 AuthService 클래스를 만든다.
class AuthService {
final FirebaseAuth _auth = FirebaseAuth.instance;
Stream<User?> get userStream => _auth.authStateChanges();
Future<UserCredential> signIn(String email, String password) async {
return await _auth.signInWithEmailAndPassword(email: email, password: password);
}
Future<void> signOut() async {
await _auth.signOut();
}
}
이 서비스 클래스를 Provider 또는 Riverpod 등 상태 관리 도구와 함께 사용하면 재사용성과 테스트 용이성이 높아진다.
🧑💻 로그인 상태 유지 및 리다이렉트 처리
앱 실행 시 사용자의 로그인 상태에 따라 홈 화면 또는 로그인 화면으로 분기하려면 다음과 같이 구현할 수 있다:
StreamBuilder<User?>(
stream: authService.userStream,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return LoadingScreen();
}
if (snapshot.hasData) {
return HomeScreen();
} else {
return LoginScreen();
}
},
)
이 구조는 로그인 유지, 자동 리다이렉션을 유연하게 처리해준다.
📱 Firebase + 구글 로그인 연동 (예시)
// pubspec.yaml
dependencies:
firebase_auth: ...
google_sign_in: ...
// 연동 로직
final googleUser = await GoogleSignIn().signIn();
final googleAuth = await googleUser!.authentication;
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
await FirebaseAuth.instance.signInWithCredential(credential);
구글 로그인을 통해 Firebase 사용자로 인증할 수 있다.
🧼 실무에서 유용한 패턴
- AuthService + Provider 패턴: UI와 로직 분리
- authStateChanges + StreamBuilder: 로그인 유지 및 리다이렉트
- Credential 기반 로그인 추상화: 구글, 애플 등 추가 연동이 쉬워짐
궁극적으로 인증은 단순 동작이 아니라 '보안 흐름 설계'다.
🧘 마무리하며
Firebase는 Flutter의 날개를 달아주는 존재다.
하지만 제대로 구조화하지 않으면 오히려 앱이 불안정해질 수 있다.
이번 글을 통해 인증 로직을 단단하고 우아하게 설계해보자.
간단하지만 강력한 것, 그게 Firebase다.
✍️ 이 글은 터미널 밖으로 나온 개발자의 Flutter 심화과정입니다.
728x90
반응형
'Flutter' 카테고리의 다른 글
Flutter Web과 Desktop 대응 — 코드 한 번으로 모든 플랫폼? 현실은? (2) | 2025.05.26 |
---|---|
Flutter 앱 성능 최적화 — 빌드 최적화와 오버렌더링 잡아내기 (0) | 2025.05.26 |
Flutter에서 비동기 완전 이해하기 — Future, Stream, Isolate 이야기 (0) | 2025.05.26 |
애니메이션을 더 깊게 — AnimatedBuilder부터 Tween까지 완전 정복 (0) | 2025.05.23 |
Flutter에서 Custom Widget 제대로 만들기 — 재사용 가능한 컴포넌트 설계 (0) | 2025.05.23 |