<aside> 💡
한 줄 요약: 둘 다 Flutter/Dart에서 Google Gemini를 쓰는 방법이지만, Firebase AI Logic은 앱(클라이언트) 안에서 직접 호출하고, Genkit은 서버/백엔드에서 AI 워크플로우를 오케스트레이션한다. 실행 위치와 목적이 완전히 다르다.
</aside>
| 구분 | Genkit (Dart) | Firebase AI Logic (firebase_ai) |
|---|---|---|
| 실행 위치 | 서버/백엔드 (Dart 서버, Cloud Functions) | 클라이언트 앱 (Flutter 앱 안에서 직접) |
| 목적 | AI 워크플로우(flow) 오케스트레이션, 툴 콜링, 구조화 출력 | 앱에서 Gemini/Imagen 직접 호출 |
| API 키 관리 | 서버가 보관 (앱에 노출 안 됨) | Firebase가 프록시 → 앱에 키 안 박음 |
| 패키지 | genkit, genkit_google_genai |
firebase_ai |
| 백엔드 선택 | Google AI / Vertex AI | Google AI backend 또는 Vertex AI backend |
| 추가 도구 | 코드젠(schemantic, build_runner) 필요 |
별도 코드젠 불필요 |
firebase_ai. 서버 없이 가장 빠름.firebase_ai로 직접 호출, 무거운 건 Genkit flow를 서버에 두고 앱이 호출.firebase_aiFlutter 앱이라면 보통 이쪽. 앱 안에서 Gemini를 직접 호출하되 API 키는 Firebase가 관리한다.
| Google AI 통로 | Vertex AI 통로 | |
|---|---|---|
| 비유 | 편의점 (바로 이용) | 대형 계약 창고 (계약·설정 필요) |
| 시작 | 지금 바로, 무료로 됨 | GCP에서 Vertex AI 활성화 필요 |
| 누구용 | 개발 · 테스트 · 프로토타입 | 대규모 서비스 · 회사 프로덕션 |
| 코드 | FirebaseAI.googleAI() |
FirebaseAI.vertexAI() |
import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
// A) Google AI backend (빠른 시작, 무료 티어)
final model = FirebaseAI.googleAI().generativeModel(model: 'gemini-2.5-flash');
// B) Vertex AI backend (프로덕션, 리전 지정)
final model = FirebaseAI.vertexAI(location: 'us-central1')
.generativeModel(model: 'gemini-2.5-flash');
final response = await model.generateContent([Content.text(prompt)]);
print(response.text);
final responses = model.generateContentStream([Content.text(prompt)]);
await for (final response in responses) {
print(response.text); // 조각조각 도착
}