사이트가
살아 움직인다
지금까지 사이트는 — 박물관 안의 액자 같았어요. 사람이 와서 보고 그냥 갑니다. 오늘부터 다릅니다. Firestore 붙이면 — 방명록·댓글·문의 폼이 실시간으로 작동. 누가 글 남기면 즉시 사이트에 나타납니다.
오늘의 학습 목표
name·message·createdAt 필드 3개. 단순해야 강하다.onSnapshot 한 줄로 새 글 즉시 화면에 등장. 새로고침 불필요.firestore.rules 4줄.정적 사이트 → 인터랙티브
지금까지 사이트는 HTML 파일에 박힌 글자. 누구한테도 똑같음. 데이터베이스가 붙는 순간 — 사이트가 '살아있는 공간'이 됩니다. 어제 친구가 쓴 글이 오늘 내가 새로고침할 때 떠 있어요. 그게 SNS·블로그·쇼핑몰의 본질.
모든 방문자 동일 화면
JSON처럼 저장
모두에게 실시간 표시
DB 요청 — 막연 vs 정확
DB 좀 만들어줘."
컬렉션:
guestbook필드:
· name (string, 50자 이하)
· message (string, 500자 이하)
· createdAt (timestamp, 자동)
정렬: createdAt 내림차순
규칙: 누구나 read·create, delete X
Step 1 — Firestore 활성화
Firebase Console에서 클릭 3번. "Firestore Database" → "데이터베이스 만들기" → 리전 선택(asia-northeast3 = 서울). 코드 한 줄 없이 클라우드 DB 한 개 탄생.
guestbook 컬렉션에 견본 문서 1개 박힘 → 옆 짝과 화면 비교하며 확인.
Step 2 — SDK 연결 + 첫 쓰기
사이트에서 Firestore에 접근하려면 — SDK 두 줄 + config 한 덩어리. 그 후 addDoc() 한 줄로 데이터 쓰기 가능.
guestbook.html 만들고 SDK 두 줄 + config 박기 → F12 콘솔에 위 add() 코드 실행 → Firebase Console에서 문서 늘어난 것 확인.
Step 3 — 방명록 폼 만들기
콘솔이 아니라 — 일반 방문자가 쓰는 폼. 입력 칸 2개(이름·메시지) + 보내기 버튼. 클릭하면 Firestore에 즉시 저장.
required · maxlength · trim() — 이 3가지가 빠지면 빈 줄 도배·이상한 입력으로 DB 망가져요. 클라이언트 검증은 신뢰 X지만, 90%의 실수는 막아줘요."
Step 4 — 실시간 표시 (onSnapshot)
DB에 저장된 글 — 사이트에 자동으로 표시. onSnapshot()이 핵심. 누군가 새 글 쓰면 0.5초 안에 모든 사용자 화면에 등장.
onSnapshot은 — 옛날에 WebSocket·polling·서버 동기화 코드를 직접 짜야 했던 걸 1줄로 압축한 거예요. 카톡·인스타·디스코드 다 이 원리. 실시간 SNS의 핵심을 5분 안에 손에 넣음."
onSnapshot 코드 박기 → 같은 페이지를 짝과 동시에 열기 → 글 주고받기 → 새로고침 없이 자동 갱신 확인. 안 되면 orderBy 인덱스 에러 확인.
Step 5 — 보안 규칙 (firestore.rules)
"테스트 모드"는 30일 후 자동 차단. 그 전에 보안 규칙 작성. "누구나 read·create, 삭제는 관리자만" — 4줄로 끝.
DB 점검 6가지
- Firestore 활성화 완료 + asia-northeast3 리전
- guestbook 컬렉션 생성 + 견본 문서 1개
- 방명록 폼 입력 → DB에 저장 작동
- onSnapshot 실시간 표시 — 짝과 함께 검증
- 보안 규칙 게시 + 삭제 시도 차단 확인
- XSS 이스케이프 — escapeHtml 적용
- "Missing or insufficient permissions" → 보안 규칙 너무 엄격 / "테스트 모드" 만료
- orderBy + where 동시 사용 시 인덱스 에러 → 에러 메시지 안의 링크 클릭하면 자동 생성
- 실시간 표시 안 됨 →
onSnapshot콜백이 호출되는지 console.log로 확인 - 같은 글 두 번 등장 → innerHTML을 비우기 전에 추가했을 가능성
- createdAt이 null → 서버 timestamp는 한 박자 늦게 도착, 첫 화면엔 "방금"으로 표시
- script 태그가 본문에 그대로 노출 → escapeHtml 빠짐 (XSS 위험!)
DB 깊이 도전
likes 필드 +1. FieldValue.increment(1) 사용.uid 저장, 본인 글만 삭제 가능하게 규칙 수정.작년 친구들 방명록 페이지
다음 시간 예고
SEO + Analytics —
구글이 내 사이트를 찾게
사이트 다 만들었는데 — 방문자 0명이면 빈 가게. W11에선 SEO(검색 최적화) + Google Analytics(방문자 추적) 적용. 구글이 내 사이트를 찾아서 보여주고, 누가 언제 어디서 들어왔는지 통계도 볼 수 있게.
- 오늘 완성한 방명록 페이지 (배포된 URL)
- 구글 계정 — Search Console·Analytics용
- "내 사이트 구글에서 검색했을 때 떴으면 좋겠는 키워드" 3-5개
- 사이트 메타: 제목·설명·키워드 한 줄씩 준비 (W9 OG와 통합)
- W11 끝나면 → 구글에서 내 이름·작품명 검색 시 사이트 노출 가능!