이번 강의에서는 Firebase와 Flutter를 연결하고, Firestore와 Storage를 설정하여 사용자가 입력한 데이터를 저장하고, 이후 생성된 음악 파일을 저장할 준비를 합니다.
Firebase Console에서 프로젝트 생성
Flutter 앱에서 Firebase 설정
google-services.json 파일을 다운로드하여 Flutter 프로젝트의 android/app 디렉터리에 위치시킵니다.build.gradle 파일에 추가합니다.android/build.gradle 파일의 dependencies 섹션에 다음을 추가:classpath 'com.google.gms:google-services:4.3.10'android/app/build.gradle 파일의 최하단에 다음을 추가:apply plugin: 'com.google.gms.google-services'Firebase SDK 패키지 추가
pubspec.yaml 파일에 Firebase SDK 관련 패키지를 추가합니다.dependencies:
firebase_core: latest_version
cloud_firestore: latest_version
firebase_auth: latest_version
firebase_storage: latest_versionflutter pub get 명령어로 패키지를 설치합니다.Firebase 초기화 코드 추가
main.dart 파일에서 Firebase를 초기화하고, Flutter 앱을 실행합니다.
아래 코드를 참고하여 main.dart에 추가합니다:
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
title: 'Music Generator',
home: Scaffold(
appBar: AppBar(title: Text('Music Generator')),
body: Center(child: Text('Firebase Initialized!')),
),
);
}
}
Firebase 초기화 테스트
Firestore 데이터베이스 구조
keywords라는 컬렉션을 생성하여 사용자가 입력한 키워드를 저장합니다.keyword: 사용자가 입력한 키워드 (String)status: 현재 상태 (예: “pending”, “generated”, “registered” 등)fileUrl: 생성된 음악 파일의 URL (String)Firestore에 데이터 저장
사용자가 키워드를 입력하고 Firestore에 저장하는 코드를 작성합니다. 예시 UI와 코드:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
class KeywordInputPage extends StatelessWidget {
final TextEditingController _controller = TextEditingController();
Future<void> _saveKeyword(String keyword) async {
await FirebaseFirestore.instance.collection('keywords').add({
'keyword': keyword,
'status': 'pending',
});
}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Enter a Keyword')),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
TextField(
controller: _controller,
decoration: InputDecoration(labelText: 'Enter keyword'),
),
ElevatedButton(
onPressed: () {
final keyword = _controller.text;
if (keyword.isNotEmpty) {
_saveKeyword(keyword);
_controller.clear();
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text('Keyword saved!'),
));
}
},
child: Text('Save'),
),
],
),
),
);
}
}
Firebase Storage 설정
storage.rules에서 인증된 사용자만 접근할 수 있도록 규칙을 설정합니다:rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}fileUrl을 통해 음악 파일을 접근하고, 이를 사용자가 재생 및 다운로드할 수 있도록 준비합니다.다음 강의에서는 사용자 입력 처리 및 음악 생성 요청 과정을 다루며, Flutter 앱에서 사용자가 입력한 키워드를 FastAPI 서버로 전달하여 음악 생성 프로세스를 시작하도록 설정하겠습니다.