5단원: 나의 진로 탐색 — 활동지 A
진행 현황
1/5
완료 / 전체 문항
수업 정보
담임교사이수진
수업일오늘
단원5단원
참여 학생26명
Supabase Realtime으로 선생님의 문항 활성화 신호를 즉시 수신합니다.
교사 실시간 대시보드
3학년 2반 · 진로와 직업 5단원 · 수업 진행중 — 학생 카드를 클릭하면 답변을 확인할 수 있습니다
전체 학생
28
문항 제출 완료
18
현재 작성중
7
현재 활성 문항
Q2
학생 현황 (28명)
✅ 18
✏ 7
— 3
최신 제출 응답
| 학생 | Q2 응답 요약 | 상태 | 칠판 |
|---|
문항 제어
Supabase Realtime broadcast 전송 중
전자칠판 수업 화면
대형 화면 최적화 (1920px+) · Fullscreen API 포커스 모드 · Supabase Realtime 실시간 집계
3학년 2반 · 진로와 직업 5단원 — 나의 진로 탐색
인터랙티브 워크북 수업 진행중
26명 참여중
◎ 현재 활성 문항 2/5
내가 잘한다고 생각하는 것 3가지를 적어보세요.
18
제출 완료
7
작성중
3
미입장
전체 참여율89.3%
공개된 학생 응답
강서연 (1번)그림 그리기, 친구들 챙기기, 요리 만들기
김도윤 (2번)수학 풀기, 축구, 게임 전략 세우기
류승우 (5번)발표 잘하기, 토론, 리더십 발휘
박지원 (6번)독서, 글쓰기, 악기 연주
구현 포인트: CSS container query + 1920px breakpoint 전자칠판 전용 레이아웃 · Fullscreen API 포커스 모드 · Supabase Realtime broadcast로 교사→학생/전자칠판 제어 신호 동시 전파
학교 계정 관리
관리자 전용 · 학교 단위 계정 발급 및 관리
등록 학교 수
42
전체 교사 계정
186
전체 학생 계정
3,840
승인 대기
2
교사 계정 발급
| 이름 | 소속 학교 | 학급 | 상태 | |
|---|---|---|---|---|
| 이수진 | 강남중학교 | 3학년 2반 | 활성 | |
| 박성훈 | 강남중학교 | 2학년 1반 | 활성 | |
| 김혜원 | 해운대중학교 | 1학년 4반 | 초대중 |
학생 일괄 등록
CSV 업로드
📄
CSV 파일을 여기에 드롭하세요
이름, 출석번호 컬럼 포함 · 최대 200명
✓ 계정 생성 즉시 학교 코드 기반 이메일 자동 할당
✓ 임시 비밀번호 목록 PDF 자동 생성
✓ 임시 비밀번호 목록 PDF 자동 생성
학교 목록
| 학교명 | 지역 | 교사 | 학생 | 플랜 | 상태 | 등록일 | |
|---|---|---|---|---|---|---|---|
| 서울 강남중학교 | 서울 강남 | 12명 | 420명 | 스탠다드 | 활성 | 2024.03.01 | |
| 부산 해운대중학교 | 부산 해운대 | 8명 | 310명 | 프리미엄 | 활성 | 2024.03.05 | |
| 인천 연수중학교 | 인천 연수 | 6명 | 215명 | 스탠다드 | 활성 | 2024.03.10 | |
| 대구 수성중학교 | 대구 수성 | 9명 | 350명 | 베이직 | 심사중 | 2024.09.01 | |
| 광주 첨단중학교 | 광주 첨단 | 7명 | 280명 | 스탠다드 | 활성 | 2024.03.15 |
역할 기반 접근 제어 (RBAC)
Supabase Auth JWT custom claims + PostgreSQL RLS 이중 레이어 보안 구조
학생 (Student)
클래스 코드로 수업 입장. 자신의 워크북만 읽고 쓸 수 있습니다.
- 클래스 코드로 수업 입장
- 본인 워크북 작성 및 자동저장
- 본인 답변 최종 제출
- 교사 제어 신호 수신 (Realtime)
교사 (Teacher)
담당 학급의 수업 진행 및 학생 응답 실시간 모니터링.
- 수업 세션 생성 및 문항 제어
- 담당 학생 전체 응답 조회
- 문항 활성화·비활성화 broadcast
- 전자칠판 포커스 모드 제어
- 학생 답변 공개 설정
관리자 (Admin)
학교 단위 계정 발급 및 플랫폼 전체 관리.
- 학교 계정 발급 및 삭제
- 교사·학생 계정 일괄 관리
- 전체 사용 통계 조회
- 플랜 관리 및 설정 변경
JWT Custom Claims 구조Supabase Auth Hook
-- 로그인 시 JWT에 role + school_id 자동 삽입
CREATE OR REPLACE FUNCTION custom_access_token_hook(event JSONB)
RETURNS JSONB LANGUAGE plpgsql AS $$
BEGIN
-- teachers → students → admin 순 역할 판별
claims := jsonb_set(claims, '{user_role}', to_jsonb(user_role));
claims := jsonb_set(claims, '{school_id}', to_jsonb(school_id));
RETURN event;
END; $$;
RLS 정책 예시PostgreSQL
-- 학생: 본인 응답만 읽기/쓰기
CREATE POLICY "students_own_responses"
ON student_responses FOR ALL USING (
student_id IN (
SELECT id FROM students
WHERE auth_id = auth.uid()
)
);
-- 교사: 담당 세션 학생 응답 읽기
CREATE POLICY "teachers_session_read"
ON student_responses FOR SELECT USING (
session_id IN (
SELECT id FROM class_sessions
WHERE teacher_id = auth.uid()
)
);
레이어드 보안: Next.js middleware (JWT claims 확인 → 역할별 라우트 redirect) + Supabase RLS (DB 레벨 데이터 격리) 이중 적용으로 클라이언트 우회 시도 원천 차단