Firebase (파이어베이스)는 Google에서 제공하는 모바일 및 웹 애플리케이션 개발 플랫폼으로, 백엔드 기능을 미리 만들어진 서비스 형태로 제공하여 개발자가 서버 관리 없이 빠르게 애플리케이션을 구축하고 배포할 수 있도록 돕습니다.
Docker (도커) 컨테이너와 달리 Firebase (파이어베이스)는 컨테이너화된 이미지를 직접 다루지 않습니다. 대신, 개발자가 작성한 코드를 Firebase가 제공하는 관리형 서비스에 배포하면, Firebase가 알아서 빌드, 실행, 스케일링 (scaling) 등을 처리해줍니다.
1. 핵심 개념 및 Firebase (파이어베이스) 서비스 대응표
이 실습에서는 Python (파이썬) 코드를 직접 실행하는 것이 아니라, Python (파이썬) 코드를 API (Application Programming Interface) 형태로 Cloud Functions에 배포하고, 이를 웹에서 호출하는 방식으로 접근합니다. 웹 호스팅은 Firebase Hosting을 사용합니다.
| 개념 | 설명 | 기존 Docker (도커) 기반 | Firebase (파이어베이스) 서비스 대응 |
| CI/CD | 소프트웨어 개발 과정을 자동화하는 방법론. | GitHub Actions (깃허브 액션즈)를 통한 Docker (도커) 이미지 빌드 및 푸시 | GitHub Actions (깃허브 액션즈)를 통한 Cloud Functions (클라우드 펑션즈) 및 Hosting (호스팅) 자동 배포 |
| Build (빌드) | 소스 코드를 실행 가능한 형태로 변환하고 필요한 자원을 준비. | Dockerfile을 이용한 Docker Image (도커 이미지) 빌드 | Firebase (파이어베이스)가 배포 시 자동으로 코드 종속성 설치 및 빌드 |
| Test (테스트) | 빌드된 소프트웨어의 기능, 성능, 안정성 검증. | 로컬 docker run, 자동화된 유닛/통합 테스트 | Cloud Functions (클라우드 펑션즈) 에뮬레이터 또는 배포 후 실제 API 호출 |
| Deploy (배포) | 테스트를 통과한 소프트웨어를 실제 운영 환경에 설치하고 실행. | Docker Hub (도커 허브) 이미지 Push → 서버 Pull (풀) 및 Run (실행) | Firebase CLI (커맨드 라인 인터페이스) 또는 CI/CD를 통한 Cloud Functions (클라우드 펑션즈) 및 Hosting (호스팅) 배포 |
| Publish (공개) | 배포된 소프트웨어 또는 문서의 존재를 공식적으로 알리고 공개. | Docker Hub (도커 허브)에 이미지 Push → 누구나 Pull/Run 가능 | Firebase Hosting (파이어베이스 호스팅) URL 공개 또는 Cloud Functions (클라우드 펑션즈) 엔드포인트 (Endpoint) 공개 |
2. 도입 (수정)
대상:
Google Firebase (구글 파이어베이스)를 사용하여 서버리스 (serverless) 애플리케이션을 구축하고 CI/CD (지속적 통합/지속적 배포)를 경험하고자 하는 개발 초보자.
준비물:
- Python (파이썬): 최신 버전 설치 (예: 3.9 이상)
- VSCode (비주얼 스튜디오 코드): 텍스트 편집기
- Git (깃): 버전 관리를 위한 도구
- GitHub (깃허브) 계정: 코드 저장소 및 CI/CD 자동화를 위한 서비스
- Google (구글) 계정: Firebase (파이어베이스) 프로젝트 생성을 위해 필수
- Node.js (노드 제이에스): Firebase CLI (커맨드 라인 인터페이스) 설치에 필요
- Firebase CLI (커맨드 라인 인터페이스):
npm install -g firebase-tools명령어로 설치 - Google Cloud SDK (구글 클라우드 에스디케이) (선택 사항,
gcloud명령어 사용 시)
실습 흐름 요약 (단계별):
- 로컬 개발 & Firebase (파이어베이스) 프로젝트 초기화:
- 버전 관리 & GitHub (깃허브) Push (푸시):
- CI/CD 자동화 - GitHub Actions (깃허브 액션즈):
- Firebase (파이어베이스) 애플리케이션 공개:
3. 실습 흐름 트리 구조
[1] 로컬 개발 및 Firebase 프로젝트 초기화
├─ 목표: Python 함수 개발, Firebase CLI를 이용한 로컬 프로젝트 설정
├─ Firebase 프로젝트 생성 (Google Cloud 콘솔)
├─ Firebase CLI 설치 및 로그인 (firebase login)
├─ Firebase 프로젝트 초기화 (firebase init functions, firebase init hosting)
├─ Python 함수 (main.py) 작성: HTTP 요청 처리
├─ requirements.txt 작성 (파이썬 의존성)
├─ Firebase Functions (파이어베이스 펑션즈) 설정: runtime (런타임)을 Python으로 지정
├─ 로컬에서 함수 및 호스팅 테스트 (firebase emulators:start)
[2] GitHub 저장소에 코드 Push (Git을 통한 버전 관리)
├─ 목표: 함수 코드 및 Firebase 설정 파일을 GitHub에 공유
├─ 코드 (functions/, public/, firebase.json, .firebaserc 등) 업로드
├─ .env 및 venv 폴더 .gitignore에 추가
[3] GitHub Actions를 통한 CI/CD 파이프라인 구축
├─ 목표: 코드 Push 시 Cloud Functions 및 Hosting 자동 배포
├─ Firebase 서비스 계정 생성 및 Key (키) 발급 (GitHub Secrets에 저장)
├─ .github/workflows/firebase-deploy.yml 파일 작성
├─ GitHub Actions 워크플로의 트리거, 잡(Job), 단계(Step) 이해
├─ Firebase Deploy 액션 사용법 익히기
[4] Firebase 애플리케이션 공개 및 확인
├─ 목표: 배포된 API 엔드포인트 및 웹 페이지 확인
├─ Cloud Functions (클라우드 펑션즈) 콘솔에서 배포된 함수 URL 확인
├─ Firebase Hosting (파이어베이스 호스팅) URL을 통해 웹 페이지 접근 및 함수 호출 확인4. 실습 폴더 구조
my_firebase_project/
├── .github/
│ └── workflows/
│ └── firebase-deploy.yml # GitHub Actions 워크플로
├── functions/ # Cloud Functions 소스 코드 디렉토리
│ ├── __init__.py
│ ├── main.py
│ ├── requirements.txt
│ └── .python-version # Python 버전 명시 (선택 사항)
├── public/ # Firebase Hosting 정적 파일 디렉토리
│ └── index.html # 웹 페이지 예시
├── .firebaserc # Firebase 프로젝트 설정
├── firebase.json # Firebase 호스팅 및 함수 설정
├── .env # 로컬 환경변수 (Git 커밋 제외)
├── .gitignore # Git 추적에서 제외
├── README.md # 프로젝트 설명5. 핵심 파일들
functions/requirements.txtfunctions/main.pyfunctions/.python-version(선택 사항, Python (파이썬) 버전 명시)firebase.jsonpublic/index.html.gitignore
6. 로컬 개발 환경 설정 & Firebase (파이어베이스) 초기화
- Firebase CLI (커맨드 라인 인터페이스) 설치:
- Firebase (파이어베이스) 로그인:
- Firebase (파이어베이스) 프로젝트 생성:
- 로컬 프로젝트 디렉토리 생성 및 이동:
- Firebase (파이어베이스) 프로젝트 초기화:
functions디렉토리 이동 및 Python (파이썬) 가상 환경 설정:main.py및requirements.txt작성/수정: (위 5. 핵심 파일들 참고)- 로컬 Firebase (파이어베이스) 에뮬레이터 (Emulator) 실행:
7. GitHub (깃허브) 저장소에 코드 Push (푸시)
- Git (깃) 저장소 초기화:
.gitignore파일 생성: (위 5. 핵심 파일들 참고)- GitHub (깃허브) 원격 저장소 생성:
- 파일 추가 및 커밋 (Commit):Bash
- 원격 저장소 연결 및 Push (푸시):Bash
8. GitHub Actions (깃허브 액션즈)를 통한 CI/CD 자동화
코드를 GitHub (깃허브)에 푸시할 때마다 자동으로 Cloud Functions (클라우드 펑션즈)와 Firebase Hosting (파이어베이스 호스팅)에 배포되도록 GitHub Actions (깃허브 액션즈) 워크플로를 설정합니다.
사전 준비 (Firebase 서비스 계정 생성 및 GitHub Secrets (시크릿) 설정):
- Firebase Console (파이어베이스 콘솔) 접속: console.firebase.google.com에 로그인하여 해당 프로젝트를 선택합니다.
- 서비스 계정 생성:
- GitHub Secrets (깃허브 시크릿) 설정:
GitHub Actions 워크플로 파일 (.github/workflows/firebase-deploy.yml):
name: Deploy to Firebase # 워크플로 이름
on:
push:
branches:
- main # main 브랜치에 푸시될 때 워크플로 실행
pull_request:
branches:
- main # main 브랜치로 풀 리퀘스트 생성/업데이트 시 워크플로 실행
jobs:
build_and_deploy: # 작업(Job) 이름
runs-on: ubuntu-latest # 작업을 실행할 가상 머신 환경
steps:
- name: Checkout code # GitHub 저장소의 코드를 워크플로 환경으로 가져옵니다.
uses: actions/checkout@v4
- name: Set up Node.js # Firebase CLI 설치를 위해 Node.js를 설정합니다.
uses: actions/setup-node@v4
with:
node-version: '20' # Firebase CLI 및 Cloud Functions 런타임에 맞는 Node.js 버전
- name: Install Firebase CLI # Firebase CLI를 설치합니다.
run: npm install -g firebase-tools
- name: Set up Python # Cloud Functions Python 런타임을 설정합니다.
uses: actions/setup-python@v5
with:
python-version: '3.11' # functions/.python-version 또는 firebase.json의 runtime과 일치시킵니다.
cache: 'pip'
- name: Install Python dependencies # functions 디렉토리의 Python 의존성을 설치합니다.
working-directory: ./functions # functions 디렉토리 안에서 실행
run: pip install -r requirements.txt
- name: Deploy to Firebase # Firebase에 배포합니다.
# 이 단계에서 Cloud Functions와 Hosting이 모두 배포됩니다.
run: firebase deploy --token ${{ secrets.FIREBASE_SERVICE_ACCOUNT_KEY }} --project ${{ secrets.FIREBASE_PROJECT_ID }}
env:
# Cloud Functions 환경 변수 (예시: API_KEY). Secrets Manager 사용 권장.
# 이 예시에서는 GitHub Secrets에 저장된 API_KEY를 직접 Cloud Function으로 전달합니다.
# 실제 환경에서는 Firebase Secret Manager를 사용하는 것이 더 안전합니다.
# firebase functions:secrets:set API_KEY="your_real_api_key" --project YOUR_PROJECT_ID
API_KEY: ${{ secrets.YOUR_API_KEY_SECRET }} # GitHub Secrets에 YOUR_API_KEY_SECRET으로 API KEY를 추가했다면 사용.
# 만약 Cloud Functions 내에서 Firebase Secret Manager를 사용할 예정이라면 이 줄은 제거.
# 프로젝트 ID도 Secret으로 관리하는 것이 좋습니다.
- name: Save Firebase Project ID (Optional)
run: |
echo "FIREBASE_PROJECT_ID=${{ secrets.FIREBASE_PROJECT_ID }}" >> $GITHUB_ENVfirebase deploy명령어 보완:
9. Firebase (파이어베이스) 애플리케이션 공개 및 확인
- 배포 결과 확인:
- 웹 페이지 접근 및 API (Application Programming Interface) 호출: