(앱 처음 시작 시에는 출시 전까지의 영화데이터를 .db파일로 만들어 놓은 db파일을 사용하여 영화 초기데이터로 사용한다. (.db파일로 내부 db를 구성)

그리고 앱 사용을 하면서, 업데이트 버튼을 눌러 최신 영화 데이터를 받아 내부 db를 업데이트하는 방식이다.)

 

 

이 글의 메인 캐릭터(?)

 

 

얻은 영화 데이터들을 어딘가에 저장해야 한다.

(사용할 때마다 API 호출하고, ors에서 정보 가져오는 것은 매우 낭비)

 

내 로컬 컴퓨터의 DB에 저장할 경우, 앱에 데이터를 보내주려면 컴퓨터를 하루종일 켜놔야 해서 클라우드 DB 서비스를 사용하기로 결정했다.

 

최신 영화 데이터들을 클라우드 DB에 저장하고, 앱에서 영화 데이터를 업데이트해야 할 때, 데이터를 가져올 수 있도록 한다.

 

클라우드 db는 Firebase의 Firestore를 사용하기로 한다.

 

이유는 다음과 같다.

  1. 무료 사용량이 매우 널널하고, 무료 사용량을 넘어도 요금이 크지 않음
  2. 문서화가 잘 되어 있어서 사용법을 익히기 편함
  3. python과 dart&flutter에서 사용가능하고, 관련 라이브러리의 업데이트가 주기적으로 되고 있음
  4. 늘 사용하던 구글 꺼

 

Firebase의 Firestore를 사용하는 법은 다음과 같다.

 

1. Firebase의 프로젝트 추가

프로젝트 추가 ㄱㄱ

프로젝트 추가를 누르고 다음 > 다음 > 프로젝트 생성 누르면 끝

 

2. database 생성

맨 위의 firestore database

맨 위의 Firestore Database를 클릭한다.

프로젝트를 처음 생성하고 클릭하면 '데이터베이스 만들기' 버튼이 있을 거다.

버튼 누르고 보안규칙 설정하고, cloud firestore 위치 설정을 하면 firestore사용이 가능하다.

(나는 한국에 사니까 한국(서울)을 위치로 설정함)

 

 

이렇게 하면 firestore를 사용할 수 있다.

컬렉션, 문서 추가해서 사용하면 됨

 

저장해야 하는 영화 데이터는 많은데, 이것들을 일일이 타자 쳐서 적는 건 말이 안되므로 영화 데이터를 얻는 즉시 firestore에 저장하도록 만들어보자. 

 

 

아래는 firestore 문서이다. (공식 문서는 신이다)

 

https://firebase.google.com/docs/firestore/quickstart?hl=ko#python

 

Cloud Firestore 시작하기  |  Firebase

Demo Day를 위해 일정을 비워두고 Firebase의 새로운 소식과 기능들을 확인해 보세요. 자세히 알아보기 의견 보내기 Cloud Firestore 시작하기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠

firebase.google.com

 

 

python에서 firebase firestore를 사용하기 위한 과정은 다음과 같다.

 

  1. firebase admin sdk추가 (python에서는 라이브러리 다운)
  2. cloud firestore 인스턴스 초기화 
  3. CRUD

 

1. firebase admin sdk 추가

 

파이썬에서는 간단하게 firebase-admin 라이브러리 설치만 해주면 된다.

# python에서 firebase서비스를 사용하려면 다운받아야함
pip install --upgrade firebase-admin

 

2. cloud firestore 인스턴스 초기화

 

뒤에서 서술하겠지만 영화 데이터 API 호출 및 저장을 클라우드 서버에서 실행할 생각이기 때문에 

인스턴스를 서버에서 초기화해야 한다. 따라서 비공개 키가 필요하다.

 

-비공개 키 파일 얻는 법-

프로젝트 개요 옆의 톱니바퀴 누르고 프로젝트 설정 클릭 > 서비스 계정 클릭 > firebase admin sdk에서 '새 비공개 키 생성' 클릭 (key 파일 다운로드 됨)

 

인스턴스 초기화 코드

import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore

# 위에서 다운받은 key파일(.json)의 위치를 인자로 넣어준다.
cred = credentials.Certificate('path/to/serviceAccount.json')

app = firebase_admin.initialize_app(cred)

db = firestore.client()

이제부터 firestore 사용이 가능하다.

 

3. CRUD

 

CRUD 기본 사용법

import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore

cred = credentials.Certificate(firestore_key)
firebase_admin.initialize_app(cred)
db = firestore.client()
data = {"a" : 1}


# Create
db.collection('collection id').document('document id').set(data)
#or
db.collection('collection id').add(data)


# Read
# collection에 있는 문서 다 가져오기 (.to_dict()는 값을 dict type으로 리턴)
documents = db.collection(collection_id).list_documents()
for document in documents:
    dic = document.get().to_dict()

# 특정 문서 가져오기
db.collection('collection id').document('document id').get().to_dict()


# Update
db.collection('collection id').document('document id').update({"a" : 100})


# Delete
db.collection('collection id').document('document id').delete()

 

컬렉션 및 문서 생성, 읽기, 업데이트, 삭제 등은 위의 공식문서에 아주 자세히 나와있다.

 

firebase-admin라이브러리의 클래스, 함수 등의 자세한 정보는 아래 링크에서 확인 가능하다.

https://firebase.google.com/docs/reference/admin/python

 

Firebase Admin Python SDK

 

firebase.google.com

 

 

아래의 함수는 영화 정보( [dict, dict, dict,...] )와 collection_id를 인자로 받아, collection_id를 가지는 collection에 정보(dict)를 저장한다.

def insert_data(dicts, collection_id, firestore_key):
	# 인스턴스 초기화
    cred = credentials.Certificate(firestore_key)
    firebase_admin.initialize_app(cred)
    db = firestore.client()

    for dic in dicts:
    	# 인자로 받은 id를 가지는 collection에 dic를 문서로 저장함
        # document()에 인자를 안넘겨주면 자동으로 문서 id를 생성함
        document = db.collection(collection_id).document()
        document.set(dic)

    return 1

 

이렇게 해서 firebase firestore의 사용준비 끝

 

 

이렇게 해서 영화 정보 가져오기 + 클라우드 DB에 저장까지 끝났다.

문제는 이 과정을 본인이 하루에 한 번씩 프로그램 실행을 해야 한다는 것이다. (물론 다 함수화 되어있어서 딸깍 한 번이면 되지만)

매일 하는 건 매우 귀찮고 비효율적이므로 위의 과정을 자동화하기로 한다.

 

다음 글에서는 클라우드 서비스를 사용하여 위의 과정을 자동화하는 법에 대해 글을 쓰겠다.