로컬 컴퓨터에서만 구동되는 자동화 스크립트는 다른 PC나 스마트폰과 데이터를 실시간으로 주고받는 데 한계가 있습니다. 수집한 데이터나 제어 명령을 전 세계 어디서나 접근할 수 있는 클라우드 공간에 저장하고 관리하고 싶다면, 구글의 파이어베이스(Firebase)가 훌륭한 대안이 됩니다. 파이어베이스의 ‘실시간 데이터베이스(Realtime Database)’는 복잡한 서버 구축 과정 없이 몇 번의 클릭만으로 나만의 클라우드 데이터 저장소를 만들 수 있게 도와줍니다. 본 포스팅에서는 파이썬과 파이어베이스를 연동하여 실시간으로 데이터를 읽고 쓰는 기초적인 자동화 파이프라인 구축 방법을 다룹니다.
구글 파이어베이스 실시간 데이터베이스의 개념
firebase-admin 라이브러리 설치 및 서비스 계정 키 연동
파이어베이스 실시간 데이터베이스는 데이터가 변경될 때마다 클라우드와 연결된 모든 클라이언트에게 몇 밀리초(ms) 이내로 동기화되는 NoSQL 기반의 클라우드 데이터베이스입니다. 복잡한 SQL 쿼리문 대신 딕셔너리와 유사한 JSON 형태로 데이터를 다루기 때문에 파이썬과 궁합이 매우 잘 맞습니다.
파이썬 환경에서 안전하게 파이어베이스 관리자 권한으로 접근하기 위해서는 구글이 제공하는 전용 SDK 패키지가 필요합니다. 실습 전 시스템 터미널 환경에서 아래 명령어를 입력하여 파이어베이스 관리자 라이브러리를 설치해 줍니다.
Bash
pip install firebase-admin
설치 후 파이어베이스 콘솔의 ‘프로젝트 설정 -> 서비스 계정’ 메뉴에서 파이썬 연동을 위한 ‘새 비공개 키’를 생성하여 JSON 인증서 파일(.json)을 다운로드받아 준비해야 합니다. 이 파일은 클라우드 데이터베이스에 접근할 수 있는 마스터 비밀번호 역할을 하므로 외부에 노출되지 않도록 안전하게 보관해야 합니다.
실시간 데이터 등록, 수정, 호출을 위한 CRUD 기본 구현
핵심 스크립트 작성 및 원격 데이터 제어 방법
다운로드한 인증서 JSON 파일을 활용하여 파이어베이스 실시간 데이터베이스에 연결하고, 특정 경로에 데이터를 등록(Create) 및 조회(Read)하는 전체 파이썬 스크립트 코드입니다.
Python
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
def initialize_firebase_db(json_key_path, database_url):
try:
# 1. 서비스 계정 키(JSON)를 활용한 인증 보안 설정
cred = credentials.Certificate(json_key_path)
# 2. 파이어베이스 앱 초기화 및 데이터베이스 URL 연동
firebase_admin.initialize_app(cred, {
'databaseURL': database_url
})
print("파이어베이스 실시간 데이터베이스 연동에 성공했습니다.")
except Exception as e:
print(f"초기화 실패: {e}")
def save_hardware_status(device_id, sensor_value, power_status):
# 데이터베이스의 'devices/디바이스ID' 경로를 참조(위치 지정)
ref = db.reference(f'devices/{device_id}')
# 해당 경로에 실시간 데이터 쓰기 및 업데이트
try:
ref.set({
'last_updated': firebase_admin.datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'sensor_data': sensor_value,
'is_active': power_status
})
print(f"[{device_id}] 데이터가 실시간으로 클라우드에 업로드되었습니다.")
except Exception as e:
print(f"데이터 저장 실패: {e}")
def read_hardware_status(device_id):
ref = db.reference(f'devices/{device_id}')
try:
# 해당 경로의 데이터를 실시간으로 받아오기
data = ref.get()
if data:
print(f"\n--- [{device_id}] 클라우드 수신 데이터 ---")
print(f"최근 업데이트: {data.get('last_updated')}")
print(f"센서 측정값: {data.get('sensor_data')}")
print(f"장비 가동상태: {data.get('is_active')}")
else:
print("해당 디바이스의 데이터가 존재하지 않습니다.")
except Exception as e:
print(f"데이터 읽기 실패: {e}")
# 파이어베이스 설정 정보 입력
# json_path에는 콘솔에서 다운로드한 비공개 키 파일의 실제 경로를 입력합니다.
json_path = r"C:\Your\Path\firebase-adminsdk-key.json"
db_url = "https://your-project-id-default-rtdb.firebaseio.com/"
if __name__ == "__main__":
# 데이터베이스 연결 초기화
initialize_firebase_db(json_path, db_url)
# 데이터 실시간 등록 및 수정 (Test)
# 디바이스ID, 센서값, 전원상태 전달
save_hardware_status("device_001", 345, True)
# 데이터 실시간 읽기 (Test)
read_hardware_status("device_001")
이 코드는 db.reference() 함수를 통해 데이터베이스 내부에 트리 구조의 경로를 생성하고 제어합니다. ref.set() 메소드는 지정한 경로의 데이터를 JSON 형태로 완전히 덮어쓰거나 새로 생성하며, 기존 연결을 유지한 채 특정 키값만 바꾸고 싶다면 ref.update()로 대체할 수 있습니다.
하단의 db_url 변수에 본인의 파이어베이스 고유 실시간 데이터베이스 주소를 입력하고 스크립트를 구동하면, 로컬 컴퓨터에서 발생한 센서 데이터나 업무 상태 값이 즉시 구글 클라우드에 동기화됩니다. 이 기술을 확장하면 원격에서 장비를 모니터링하거나 제어하는 웹 앱 및 스마트 자동화 시스템의 든든한 뼈대를 완성할 수 있습니다.