강사 준비 문서

강사 전용 · 학생이 각자 저장소와 파이어베이스를 만드는 과정 · 수업 전 점검과 전시관 설정

이 과정은 학생이 직접 배포합니다. 선생님이 수업 중에 파일을 모아 올릴 일은 없습니다. 대신 1차시 계정 생성과 5차시 프로젝트 생성이 각각 20분짜리 고비입니다. 이 두 구간만 넘기면 나머지는 순조롭습니다. 선생님이 미리 준비할 것은 전시관 하나뿐입니다.

수업 전에 반드시 확인할 것

확인할 것왜
영재원 계정으로 깃허브 가입이 되는지 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를 알아야 합니다.

  1. 전시관 페이지를 열어 선생님 구글 계정으로 한 번 로그인합니다. (이걸 해야 목록에 나타납니다)
  2. 파이어베이스 콘솔 → Authentication → 사용자 탭
  3. 본인 계정 행의 사용자 UID를 복사합니다. 28자쯤 되는 영문·숫자입니다.
UID는 비밀번호가 아니지만 공개 저장소에 올라갑니다. 이 값만으로는 남이 선생님 행세를 할 수 없습니다 — 로그인한 계정의 UID가 일치해야만 통과하기 때문입니다. 다만 누가 관리자인지는 드러나니, 학생에게 굳이 설명할 필요는 없습니다.

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; }
  }
}
규칙과 페이지 양쪽에 UID를 넣어야 합니다. 규칙만 바꾸면 버튼이 안 보이고, 페이지만 바꾸면 버튼은 보이는데 누를 때 permission-denied가 납니다.

6 설정값과 관리자 UID를 전시관 파일에 넣기

프로젝트 설정(⚙️) → 내 앱 → 웹 앱 추가(</>) → 나타나는 firebaseConfig 블록을 복사합니다.

킷의 tool_gallery.html을 열고 ▼ 강사용 — 여기 한 곳만 바꾸세요 ▼ 아래 두 가지를 넣은 뒤 올립니다. 학생은 이 파일을 고칠 일이 없습니다.

ADMIN_UID를 비워 두면 지금까지처럼 아무도 지울 수 없는 상태가 됩니다. 그것도 안전한 선택입니다.

7 전시관 주소를 승인된 도메인에 등록

Authentication → Settings → 승인된 도메인에 전시관을 올린 도메인을 추가합니다. 선생님 깃허브 아이디가 teacher라면 teacher.github.io입니다.

https://와 뒤의 저장소 이름은 빼고 도메인만 넣습니다. 이 형식이 틀리면 전시관 로그인이 되지 않습니다.

1차시 — 계정과 저장소 (가장 빡빡한 구간)

5차시 — 학생별 파이어베이스 (두 번째 고비)

규칙 게시 확인은 눈으로 하세요. "했어요"라는 대답만 받으면 빠뜨린 학생이 반드시 생깁니다. Firestore → 규칙 탭 화면을 띄워 보여 달라고 하는 편이 빠릅니다.

학생 데이터와 개인정보

캡처가 필요한 화면

파일 이름어떤 화면
gh_signup.png깃허브 가입 화면
gh_newrepo.pngNew repository 화면
gh_pages.pngSettings → Pages 화면
fb_create.png파이어베이스 프로젝트 만들기
fb_domain.png승인된 도메인 화면
fb_config.pngfirebaseConfig가 보이는 화면
canvas_button.png제미나이 캔버스 버튼
canvas_export.png캔버스 코드 받기 메뉴
game_demo.png캔버스에 게임이 뜬 화면

shots/ 폴더에 위 이름 그대로 PNG를 넣으면 점선 박스가 자동으로 교체됩니다.