강사 준비 문서
강사 전용 · 학생이 각자 저장소와 파이어베이스를 만드는 과정 · 수업 전 점검과 전시관 설정
수업 전에 반드시 확인할 것
| 확인할 것 | 왜 |
|---|---|
| 영재원 계정으로 깃허브 가입이 되는지 | 1차시 전체가 여기 걸려 있습니다. 메일 인증 코드를 받을 수 있어야 합니다 |
| 영재원 계정으로 파이어베이스 프로젝트 생성이 되는지 | 조직 계정은 프로젝트 생성이 막혀 있는 경우가 있습니다 |
| 학생 계정으로 구글 로그인 팝업이 열리는지 | 조직 정책으로 외부 앱 로그인이 차단되면 5·6차시가 성립하지 않습니다 |
실습실에서 github.com과 console.firebase.google.com이 열리는지 |
학교망에서 막히는 경우가 있습니다 |
| 학생 계정의 나이 설정 | 만 14세 미만으로 설정된 계정은 일부 서비스 가입이 제한될 수 있습니다 |
전시관 만들기 — 선생님이 준비할 유일한 것
학생 작품 주소와 랭킹을 한곳에 모으려면 공용 데이터베이스가 하나 필요합니다. 이것만 선생님 계정으로 만들고, 학생은 여기에 로그인만 합니다.
1 프로젝트 만들기
console.firebase.google.com 접속 → 프로젝트 추가 → 이름은 영문으로
(예: yj-gallery-2026). 애널리틱스는 꺼도 됩니다.
결제 정보는 등록하지 마세요. 무료 범위를 넘으면 과금되는 대신 기능이 멈춥니다.
2 구글 로그인 켜기
Authentication → 시작하기 → Google → 사용 설정 → 지원 이메일 선택 → 저장. SMS 인증은 유료이므로 쓰지 않습니다.
3 데이터베이스 만들기
Firestore Database → 데이터베이스 만들기 → 위치는 asia-northeast3 (서울) →
프로덕션 모드로 시작합니다. 규칙은 다음 단계에서 넣습니다.
4 내 UID 확인하기
작품·점수를 지울 수 있는 사람은 선생님 계정 하나뿐입니다. 그러려면 선생님 계정의 UID를 알아야 합니다.
- 전시관 페이지를 열어 선생님 구글 계정으로 한 번 로그인합니다. (이걸 해야 목록에 나타납니다)
- 파이어베이스 콘솔 → Authentication → 사용자 탭
- 본인 계정 행의 사용자 UID를 복사합니다. 28자쯤 되는 영문·숫자입니다.
5 보안 규칙 붙여넣기
아래에서 여기에-선생님-UID 두 군데를 4단계에서 복사한 UID로 바꾼 뒤,
Firestore → 규칙 탭에 통째로 붙여넣고 게시를 누릅니다.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// 선생님 계정인지 확인하는 함수
function isAdmin() {
return request.auth != null
&& request.auth.uid == '여기에-선생님-UID';
}
// 작품 — 누구나 보고, 내 것만 내가 올리고, 선생님만 지운다
match /gallery/{docId} {
allow read: if true;
allow create, update: if request.auth != null
&& request.auth.uid == request.resource.data.uid
&& request.resource.data.title is string
&& request.resource.data.title.size() <= 40;
allow delete: if isAdmin();
}
// 랭킹 — 누구나 보고, 내 기록만 내가 올리고, 선생님만 지운다
match /ranking/{docId} {
allow read: if true;
allow create, update: if request.auth != null
&& request.auth.uid == request.resource.data.uid
&& request.resource.data.score is number
&& request.resource.data.score >= 0
&& request.resource.data.score <= 1000000
&& request.resource.data.nickname is string
&& request.resource.data.nickname.size() <= 12
&& request.resource.data.game is string
&& request.resource.data.game.size() <= 30;
allow delete: if isAdmin();
}
match /{document=**} { allow read, write: if false; }
}
}
permission-denied가 납니다.
6 설정값과 관리자 UID를 전시관 파일에 넣기
프로젝트 설정(⚙️) → 내 앱 → 웹 앱 추가(</>) → 나타나는
firebaseConfig 블록을 복사합니다.
킷의 tool_gallery.html을 열고 ▼ 강사용 — 여기 한 곳만 바꾸세요 ▼
아래 두 가지를 넣은 뒤 올립니다. 학생은 이 파일을 고칠 일이 없습니다.
firebaseConfig— 방금 복사한 설정값ADMIN_UID— 4단계에서 복사한 선생님 UID
ADMIN_UID를 비워 두면 지금까지처럼 아무도 지울 수 없는 상태가 됩니다.
그것도 안전한 선택입니다.

7 전시관 주소를 승인된 도메인에 등록
Authentication → Settings → 승인된 도메인에 전시관을 올린 도메인을 추가합니다.
선생님 깃허브 아이디가 teacher라면 teacher.github.io입니다.
https://와 뒤의 저장소 이름은 빼고 도메인만 넣습니다.
이 형식이 틀리면 전시관 로그인이 되지 않습니다.
1차시 — 계정과 저장소 (가장 빡빡한 구간)
- 교사가 앞에서 한 단계씩 시연하고, 단계마다 손을 들게 해 전원을 확인하고 넘어갑니다.
- 아이디는 영문 소문자로 짧게. 실명 금지. 아이디가 그대로 주소가 됩니다.
- 메일 인증에서 가장 많이 막힙니다. 영재원 계정 메일함을 열 수 있는지 미리 확인하세요.
- 저장소는 반드시 Public. Private이면 깃허브 페이지가 켜지지 않습니다.
- Settings → Pages에서 Branch를 main으로 저장하는 것을 빠뜨리는 학생이 가장 많습니다.
- 학생 아이디와 주소를 명단에 적어 두세요. 5·6차시에 확인할 때 필요합니다.
5차시 — 학생별 파이어베이스 (두 번째 고비)
- 프로젝트 생성은 1~2분 걸립니다. 기다리는 동안 다음 단계를 설명하세요.
- 위치는
asia-northeast3로 통일시키면 나중에 묻는 질문이 줄어듭니다. - 승인된 도메인 등록을 빠뜨리는 학생이 절반 가까이 됩니다. 이 단계에서 한 번 더 전원 확인하세요.
- 학생은 테스트 모드로 데이터베이스를 만들게 합니다. 프로덕션 모드로 만들면 규칙을 넣기 전까지 아무것도 안 됩니다.
- 대신 차시 끝에 보안 규칙 게시를 반드시 확인하세요. 안 하면 30일간 누구나 읽고 쓸 수 있는 상태로 남습니다.
학생 데이터와 개인정보
- 학생의 Firestore에는 계정 번호(uid)와 학생이 적은 내용만 들어갑니다.
- 다만 Authentication 사용자 목록에는 구글 계정의 이메일과 계정 이름이 기록됩니다. 각 학생의 프로젝트 안에만 있고 다른 학생은 볼 수 없습니다.
- 전시관에는 별명·게임 이름·점수·주소만 공개됩니다. 이메일과 실명은 공개되지 않습니다.
- 깃허브 저장소는 공개이므로 코드까지 누구나 볼 수 있습니다. 파일 안에 실명·연락처가 들어가지 않도록 1차시에 못박아 두세요.
- 학기가 끝나면 전시관 컬렉션을 삭제하거나 프로젝트를 삭제하세요. 학생 프로젝트는 학생 본인 것입니다.
캡처가 필요한 화면
| 파일 이름 | 어떤 화면 |
|---|---|
gh_signup.png | 깃허브 가입 화면 |
gh_newrepo.png | New repository 화면 |
gh_pages.png | Settings → Pages 화면 |
fb_create.png | 파이어베이스 프로젝트 만들기 |
fb_domain.png | 승인된 도메인 화면 |
fb_config.png | firebaseConfig가 보이는 화면 |
canvas_button.png | 제미나이 캔버스 버튼 |
canvas_export.png | 캔버스 코드 받기 메뉴 |
game_demo.png | 캔버스에 게임이 뜬 화면 |
shots/ 폴더에 위 이름 그대로 PNG를 넣으면 점선 박스가 자동으로 교체됩니다.