나루 블로그 레퍼런스 (hamkki, hihihirobot) 분석 중 Firebase 사용을 확인하고 정리한 문서다.
Firebase가 뭔가
한 줄로 말하면 "서버를 직접 만들지 않아도 백엔드 기능을 쓸 수 있게 해주는 Google의 클라우드 서비스"다.
이런 서비스를 BaaS (Backend as a Service)라고 부른다. Spring Boot로 서버를 만들고, DB 설치하고, 인증 로직 짜고, 서버에 배포하는 과정을 Firebase가 대신 해주는 셈이다.
비유하자면 이렇다.
- 직접 서버를 만드는 것 = 식당을 열어서 직접 요리하는 것
- Firebase를 쓰는 것 = 공유 주방에서 이미 갖춰진 도구와 재료로 요리하는 것
주방(서버 인프라)을 내가 관리할 필요 없이, 필요한 기능만 골라서 쓰면 된다.
주요 서비스
Firebase는 하나의 제품이 아니라 여러 서비스의 묶음이다. 전부 쓸 필요 없고, 필요한 것만 골라 쓰면 된다.
데이터베이스
Cloud Firestore
가장 많이 쓰는 Firebase DB. NoSQL 문서형 데이터베이스다.
// 컬렉션과 문서 구조 (JSON과 비슷)
users (컬렉션)
├── user1 (문서) → { name: "홍길동", age: 25 }
└── user2 (문서) → { name: "김철수", age: 30 }
- RDB의 테이블/행 대신 컬렉션/문서 개념을 쓴다
- SQL 없이 JS 코드로 직접 읽고 쓴다
- 실시간 동기화 지원 — 데이터가 바뀌면 연결된 모든 클라이언트에 즉시 반영
Spring Boot에서 MySQL 쓰는 것과 비교하면:
| Spring Boot + MySQL | Firebase Firestore | |
|---|---|---|
| 쿼리 방식 | SQL (SELECT, INSERT...) | JS SDK (getDoc(), addDoc()) |
| 스키마 | 테이블 스키마 정의 필수 | 스키마 없음 (유연하지만 관리 필요) |
| 서버 | 직접 운영 | Google이 운영 |
| 실시간 | 직접 구현 (WebSocket 등) | 내장 (onSnapshot()) |
Realtime Database
Firestore 이전 세대의 DB. 하나의 큰 JSON 트리로 데이터를 저장한다. 신규 프로젝트에서는 Firestore를 쓰는 게 일반적이다.
인증 (Authentication)
로그인/회원가입을 직접 구현하지 않아도 된다.
- 이메일/비밀번호
- Google, GitHub, Twitter 등 소셜 로그인
- 익명 로그인
// 이메일 로그인 예시
import { signInWithEmailAndPassword } from "firebase/auth";
signInWithEmailAndPassword(auth, email, password)
.then((userCredential) => {
const user = userCredential.user;
});
Spring Security에서 직접 구현해야 했던 것들(세션 관리, 비밀번호 해싱, OAuth 연동 등)을 Firebase가 다 처리해준다.
호스팅 (Hosting)
정적 파일(HTML, CSS, JS)을 배포할 수 있는 CDN 호스팅. 나루와 비슷한 역할인데, Firebase 생태계와 통합된다.
- 무료 SSL
- 글로벌 CDN
- CLI로 한 줄 배포 (
firebase deploy)
나루 블로그의 경우 프론트를 나루에 올리므로, Firebase Hosting은 안 써도 된다.
스토리지 (Cloud Storage)
이미지, 동영상 등 파일을 저장하는 서비스. S3와 비슷한 역할이다.
그 외
- Cloud Functions — 서버리스 함수 (Node.js). 서버 없이 백엔드 로직 실행
- Cloud Messaging (FCM) — 푸시 알림
- Analytics — 사용자 행동 분석
- Remote Config — 앱 업데이트 없이 설정 변경
나루 갠홈에서 Firebase를 쓰는 이유
나루는 정적 파일만 호스팅한다. 서버 코드를 실행할 수 없으니 방명록, 일기장, 갤러리 같은 데이터를 저장하고 불러오는 기능을 만들 수가 없다.
Firebase를 붙이면 이 문제가 해결된다.
[ 브라우저 (나루 호스팅) ]
│
│ JS SDK로 직접 통신
▼
[ Firebase (Google 클라우드) ]
├── Firestore (DB)
├── Auth (로그인)
└── Storage (이미지)
서버를 직접 만들지 않아도, 브라우저의 JS 코드가 Firebase SDK를 통해 곧바로 DB에 접근한다. hihihirobot이 정확히 이 구조다.
Firebase vs 자체 서버 (Spring Boot)
| Firebase | 자체 서버 (Spring Boot) | |
|---|---|---|
| 초기 세팅 | 빠름 (콘솔에서 클릭 몇 번) | 느림 (프로젝트 설정, DB 설치, 배포) |
| 운영 비용 | 무료 티어 넉넉 (소규모 갠홈은 무료) | 서버 비용 발생 |
| 자유도 | Firebase 규칙 안에서만 | 원하는 대로 전부 가능 |
| 보안 | Firestore 보안 규칙으로 제어 | 직접 구현 (Spring Security 등) |
| 확장성 | Google 인프라 자동 스케일링 | 직접 관리 |
| 학습 | Firebase SDK 학습 필요 | 이미 익숙한 기술 스택 |
| DB | NoSQL (Firestore) | RDB (MySQL 등) 선택 가능 |
Firebase 무료 티어로 충분하다. Firestore 무료 읽기 5만 회/일, 쓰기 2만 회/일이면 개인 홈페이지에서 넘칠 일이 거의 없다. 다만 이미 Spring Boot를 다룰 줄 안다면, 자체 서버를 두는 것도 학습 겸 좋은 선택이다.
무료 티어 한도 (Spark 플랜)
| 서비스 | 무료 한도 |
|---|---|
| Firestore 읽기 | 50,000회/일 |
| Firestore 쓰기 | 20,000회/일 |
| Firestore 삭제 | 20,000회/일 |
| Firestore 저장 | 1 GiB |
| Authentication | 무제한 (대부분의 제공자) |
| Hosting | 10 GiB 저장, 360 MiB/일 전송 |
| Cloud Storage | 5 GB |