Notice
Recent Posts
Recent Comments
Link
거의 알고리즘 일기장
React Native를 이용한 사이드 프로젝트 만들기 -9. firebase auth에 있는 user info 데이터 firestore로 데이터 마이그레이션하기 (with 오늘의 그림일기) 본문
react-native
React Native를 이용한 사이드 프로젝트 만들기 -9. firebase auth에 있는 user info 데이터 firestore로 데이터 마이그레이션하기 (with 오늘의 그림일기)
건우권 2023. 5. 2. 00:10요즘 계속해서 프로젝트를 수정하고 있는데, 기존에 생각안하고 짠 부분이 많아서ㅠ 건드려야 할 부분이 많다.
그 중 하나가 auth 과정을 firebase auth만 사용하면서 그 user정보를 firebase auth에다가만 넣어둔 상황이다 ㅎㅎ
이 user 정보 데이터들이 firestore에 있어야 이제 뭔가 이후작업을 하기 편하기 때문에, 이 작업을 하였다.
(작은 프로젝트에서는 auth만 이용한다고 해도 문제가 될건 없다. displayname, photoUrl 등은 넣어둘수 있다. 하지만, 더 많은 유저정보를 저장하고 싶다거나 firebase console에서는 이 정보들을 볼수 없는 문제가 있어서 바꾸게 되었다.)
어떻게 할것인가?
사실 이 부분은 간단한 일이다.
auth에 있는 모든 친구들을 firestore의 users collection에 때려 박아 넣으면 될일이다.
1. firebase의 서비스어카운트에서 key를 json 형식으로 다운받는다.
https://console.firebase.google.com/project/_/settings/serviceaccounts/adminsdk?hl=ko
2. migration script를 작성한다.
const admin = require('firebase-admin');
var serviceAccount = require('./너의 서비스 어카운트키.json');
// 다운로드한 서비스 계정 키 파일의 경로를 사용할것.
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: '너의 database url',
});
const auth = admin.auth();
const firestore = admin.firestore();
// 사용자 데이터를 가져오고 Firestore에 저장하는 함수
async function migrateUsers() {
let users = [];
let nextPageToken;
// 모든 사용자를 가져옵니다.
do {
const result = await auth.listUsers(1000, nextPageToken);
users = users.concat(result.users);
nextPageToken = result.pageToken;
} while (nextPageToken);
console.log(`Migrating ${users.length} users to Firestore...`);
// 가져온 사용자 데이터를 Firestore에 저장합니다.
const batch = firestore.batch();
let count = 0;
for (const user of users) {
const userRef = firestore.collection('users').doc(user.uid);
batch.set(
userRef,
{
//재량것
displayName: user.displayName,
email: user.email,
photoURL: user.photoURL,
uid: user.uid,
}
);
count++;
if (count === 500) {
// 한 번에 최대 500개의 작업만 가능하므로, 일괄 처리를 나누어서 실행합니다.
await batch.commit();
count = 0;
}
}
if (count > 0) {
await batch.commit();
}
console.log('Migration completed!');
}
// 마이그레이션을 시작합니다.
migrateUsers().catch((error) => {
console.error('Error during migration:', error);
});
3. 성공을 즐긴다.
신기능 하나 넣으려고 할때마다 1년전의 내가 막아선다.ㅋㅋ
이래서 레거시가 어려운가보다.
반응형
'react-native' 카테고리의 다른 글
React Native를 이용한 사이드 프로젝트 만들기 -11. skia renderer를 이용한 drawing canvas로 바꾸다.(with 오늘의 그림일기) (3) | 2023.05.09 |
---|---|
React Native를 이용한 사이드 프로젝트 만들기 -10. 움직이는 차의 바퀴를 바꾸는건 어렵다ㅠ (with 오늘의 그림일기) (0) | 2023.05.04 |
React Native를 이용한 사이드 프로젝트 만들기 -8. 오랜만의 수정 또 수정 (with 오늘의 그림일기) (0) | 2023.04.27 |
react native 약 1년간 사용해본 얕은 후기 (0) | 2022.11.26 |
react native invoke tmap bridge (0) | 2022.11.14 |
Comments