
: 선생님의 퇴근을 당기고, 학생의 성적을 뒤집는 단 하나의 "AI 학습 관리 솔루션"
아직도 문제집을 일일이 타이핑하고, 오답 노트를 수동으로 만드시나요? 교육의 본질은 '관리'가 아니라 '가르침'에 있습니다. 반복되는 단순 노동은 이제 AI에게 맡기고, 당신은 오직 학생에게만 집중하십시오.
🔥 왜 [AI Edu-Hub]를 선택해야 하는가? (3대 혁신)
1️⃣ [시간 혁명] 0.5초 만에 완성되는 디지털 문제 은행
교재를 펼치고 스마트폰을 드세요. 셔터 한 번이면 끝입니다.
- 차세대 GPT-4o OCR: 난해한 수식, 그래프, 서술형 문제까지 완벽하게 인식하여 즉시 편집 가능한 디지털 데이터로 변환합니다.
- 무한 확장성: 나만의 비법 노트를 단 몇 분 만에 전국 어디서나 접속 가능한 온라인 시험지로 탈바꿈시킵니다.
2️⃣ [성적 혁명] AI가 24시간 밀착 케어하는 "개별 맞춤형 튜터"
학생 한 명 한 명을 과외하듯 관리할 수는 없지만, AI Edu-Hub는 가능합니다.
- 의미 기반 AI 채점: "비슷한데 틀렸다고 할까?" 고민하지 마세요. AI가 문맥을 파악해 정답 여부를 가려내고 맞춤형 해설을 즉시 제공합니다.
- 에빙하우스 복습 알고리즘: 데이터가 증명합니다. 망각곡선에 맞춘 자동 재출제 시스템은 학생의 기억력을 최대 4배까지 끌어올립니다.
3️⃣ [신뢰 혁명] 학부모의 '불안'을 '확신'으로 바꾸는 자동 리포트
학부모와의 소통은 신뢰의 핵심입니다. 하지만 매번 전화 상담을 할 수는 없죠.
- 실시간 성적 푸시: 시험 종료 1초 후, 학부모의 스마트폰으로 정교한 분석 리포트가 발송됩니다.
- 데이터 기반 상담: "열심히 하고 있어요"라는 막연한 말 대신, 수치화된 진도율과 성취도 그래프로 전문가의 위엄을 보여주세요.
💎 프리미엄 멤버십을 위한 특별한 기능
- SNS 통합 인증: 카카오, 구글 계정으로 복잡한 절차 없이 즉시 도입 가능합니다.
- 실시간 상호작용 피드: 학생들끼리 서로 돕는 '집단 지성' 커뮤니티가 학습 동기를 극대화합니다.
- 클라우드 TiDB 인프라: 수만 명의 학생이 동시에 접속해도 끊김 없는 압도적인 속도와 안정성을 보장합니다.
📢 지금 바로 교육의 패러다임을 바꾸십시오.
"선생님은 더 여유롭게, 학생은 더 스마트하게, 학부모는 더 안심하게." 이미 앞서가는 교육 전문가들은 AI Edu-Hub와 함께하고 있습니다. 당신의 교실도 이제 변해야 할 때입니다.
📚 [AI Edu-Hub] 프로젝트 소개서
"사진 한 장으로 시작하는 우리 반 맞춤형 스마트 학습지"
안녕하세요! AI Edu-Hub는 선생님의 문제 출제 고민을 덜어드리고, 학생에게는 나만의 AI 튜터를, 학부모님께는 안심할 수 있는 자녀의 학습 리포트를 제공하는 지능형 학습 관리 플랫폼입니다.
✨ 우리 서비스는 이런 점이 특별해요!
1. 📸 선생님을 위한 "1초 문제 등록"
두꺼운 문제집을 일일이 타이핑하시나요? 이제 폰카로 찰칵! 찍기만 하세요.
- AI 스캔: 사진 속 글자와 복잡한 수학 수식까지 AI가 읽어서 디지털 문제로 변환해줍니다.
- 유튜브 연동: 문제에 관련된 강의 영상을 바로 붙여서 학생들에게 보낼 수 있습니다.
2. 🤖 학생을 위한 "포기 없는 학습"
문제를 풀고 나면 AI가 즉시 채점하고, 틀린 이유는 친절하게 설명해줍니다.
- 스마트 채점: 주관식 답안도 AI가 문맥을 파악해 똑똑하게 채점합니다.
- 망각곡선 복습: 오늘 틀린 문제는 잊어버릴 만할 때 AI가 다시 가져와서 확실히 내 것으로 만들어줍니다.
- 함께 공부하기: 모르는 문제는 커뮤니티에 올려 친구들과 서로 묻고 답하며 즐겁게 공부할 수 있습니다.
📧 3. 학부모님을 위한 "안심 리포트"
아이의 공부 결과가 궁금하셨죠? 이제 매번 물어보지 않으셔도 됩니다.
- 자동 알림: 자녀가 시험을 마치면 점수와 분석 리포트가 학부모님 메일로 즉시 발송됩니다.
- 성장 기록: 우리 아이가 어떤 단원을 어려워하고, 얼마나 성장하고 있는지 한눈에 확인하세요.
🚀 어떻게 사용하나요? (3단계 활용법)
- 교사: 수업 자료를 사진 찍어 **'우리 반 교실'**에 과제로 올립니다.
- 학생: 전용 앱으로 접속해 게임처럼 문제를 풀고, 모르는 건 친구들과 토론합니다.
- 학부모: 자녀의 학습 결과를 메일로 받아보고 따뜻한 격려 한마디를 건넵니다.
🛡️ 믿고 사용할 수 있는 안전한 플랫폼
- 간편 로그인: 카카오, 구글 계정으로 3초 만에 가입하세요.
- 역할 맞춤형: 선생님, 학생, 학부모 각각에게 꼭 필요한 메뉴만 보여드려 사용이 정말 쉽습니다.
[AI Edu-Hub]와 함께라면 공부가 더 이상 숙제가 아닌 즐거운 경험이 됩니다. 지금 바로 우리 반 아이들과 함께 시작해보세요! 🌟

/*
Edu-Hub DB 설계 (Edu-Hub.sql)
*/
-- 1. 사용자 관리
CREATE TABLE `users` (
`user_no` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '사용자 고유 식별번호 (PK)',
`user_id` VARCHAR(10) UNIQUE NOT NULL COMMENT '일반 접속용 로그인 아이디',
`username` VARCHAR(50) NOT NULL COMMENT '사용자 이름',
`email` VARCHAR(255) UNIQUE NOT NULL COMMENT '이메일 주소',
`role` ENUM('TEACHER', 'STUDENT', 'PARENT') NOT NULL COMMENT '사용자 권한 (교사/학생/학부모)',
`is_withdrawn` ENUM('Y', 'N') DEFAULT 'N' COMMENT '탈퇴 여부 (Y: 탈퇴, N: 활동중)',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '가입 일시'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='사용자 정보 테이블';
-- 2. 학급 관리 (교사용)
CREATE TABLE `classes` (
`class_id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '학급 고유 ID',
`teacher_no` BIGINT NOT NULL COMMENT '담당 교사 식별번호',
`class_name` VARCHAR(100) NOT NULL COMMENT '학급 이름 (예: 1학년 1반, 심화반)',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '생성 일시',
CONSTRAINT `fk_class_teacher`
FOREIGN KEY (`teacher_no`) REFERENCES `users` (`user_no`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='학급 관리 테이블';
-- 3. 학급 소속 학생 매핑
CREATE TABLE `class_students` (
`class_id` BIGINT NOT NULL COMMENT '학급 ID',
`student_no` BIGINT NOT NULL COMMENT '학생 식별번호',
PRIMARY KEY (`class_id`, `student_no`),
CONSTRAINT `fk_cs_class`
FOREIGN KEY (`class_id`) REFERENCES `classes` (`class_id`) ON DELETE CASCADE,
CONSTRAINT `fk_cs_student`
FOREIGN KEY (`student_no`) REFERENCES `users` (`user_no`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='학급별 학생 매핑 테이블';
-- 4. 학부모-학생 매핑 (다자녀 지원)
CREATE TABLE `parent_students` (
`parent_no` BIGINT NOT NULL COMMENT '학부모 식별번호',
`student_no` BIGINT NOT NULL COMMENT '자녀(학생) 식별번호',
PRIMARY KEY (`parent_no`, `student_no`),
CONSTRAINT `fk_ps_parent`
FOREIGN KEY (`parent_no`) REFERENCES `users` (`user_no`) ON DELETE CASCADE,
CONSTRAINT `fk_ps_student`
FOREIGN KEY (`student_no`) REFERENCES `users` (`user_no`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='학부모와 자녀 매핑 테이블';
-- 5. 그룹 관리: 문제의 카테고리(과목, 프로젝트 등)를 분류
CREATE TABLE `groups` (
`group_id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '그룹 고유 식별자 (PK)',
`creator_no` BIGINT NOT NULL COMMENT '생성자(선생님/학생/학부모) 식별번호',
`parent_group_id` BIGINT NULL COMMENT '상위 그룹 식별자 (최대 3뎁스 계층 지원)',
`depth` TINYINT DEFAULT 1 COMMENT '계층 깊이 (1~3)',
`name` VARCHAR(100) NOT NULL COMMENT '그룹 명칭 (예: 정보처리기사, 영어단어)',
`description` TEXT COMMENT '그룹에 대한 상세 설명',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '그룹 생성 일시',
CONSTRAINT `fk_group_creator`
FOREIGN KEY (`creator_no`) REFERENCES `users` (`user_no`) ON DELETE CASCADE,
CONSTRAINT `fk_group_parent`
FOREIGN KEY (`parent_group_id`) REFERENCES `groups` (`group_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='문제 분류 그룹 계층형 테이블';
-- 6. 문제 본체: 핵심 학습 데이터 저장
CREATE TABLE `questions` (
`question_id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '문제 고유 식별자 (PK)',
`creator_no` BIGINT NOT NULL COMMENT '생성자(선생님/학생) 식별번호',
`group_id` BIGINT NULL COMMENT '소속 그룹 ID (외래키)',
`question_type` ENUM('MULTIPLE_CHOICE', 'SUBJECTIVE') NOT NULL DEFAULT 'MULTIPLE_CHOICE' COMMENT '문제 유형',
`title` VARCHAR(255) NOT NULL COMMENT '문제 제목 또는 요약',
`content` TEXT NOT NULL COMMENT '문제 지문 및 본문 내용',
`answer` TEXT NOT NULL COMMENT '주관식 정답 (객관식일 경우 무시)',
`explanation` TEXT COMMENT '정답에 대한 상세 해설',
`hint` TEXT COMMENT '문제 풀이 힌트',
`difficulty` TINYINT DEFAULT 1 COMMENT '난이도 (1:최하 ~ 5:최상)',
`is_public` BOOLEAN DEFAULT FALSE COMMENT '웹 공유 활성화 여부 (0:비공개, 1:공개)',
`is_deleted` ENUM('Y', 'N', 'T') DEFAULT 'N' COMMENT '삭제 여부 (Y: 삭제, N: 디폴트, T: 휴지통)',
`time_limit` INT DEFAULT 0 COMMENT '제한 시간 설정 (초 단위, 0이면 무제한)',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '문제 등록 일시',
CONSTRAINT `fk_question_creator`
FOREIGN KEY (`creator_no`) REFERENCES `users` (`user_no`) ON DELETE CASCADE,
CONSTRAINT `fk_question_group`
FOREIGN KEY (`group_id`) REFERENCES `groups` (`group_id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='문제 은행 메인 테이블';
-- 7. 객관식 보기: 문제의 선택지 분리
CREATE TABLE `question_options` (
`option_id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '보기 고유 식별자 (PK)',
`question_id` BIGINT NOT NULL COMMENT '연결된 문제 ID',
`option_number` TINYINT NOT NULL COMMENT '보기 번호 (1, 2, 3...)',
`content` TEXT NOT NULL COMMENT '보기 내용',
`is_answer` BOOLEAN DEFAULT FALSE COMMENT '정답 여부',
CONSTRAINT `fk_option_q`
FOREIGN KEY (`question_id`) REFERENCES `questions` (`question_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='객관식 문제 보기 데이터';
-- 8. 미디어 리소스: 이미지 경로 및 유튜브 링크 관리
CREATE TABLE `media_attachments` (
`media_id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '미디어 고유 ID',
`question_id` BIGINT NOT NULL COMMENT '연결된 문제 ID',
`media_type` ENUM('image', 'youtube') NOT NULL COMMENT '리소스 타입 (이미지 또는 유튜브)',
`media_url` TEXT NOT NULL COMMENT 'S3 이미지 경로 또는 YouTube URL 주소',
`sort_order` INT DEFAULT 0 COMMENT '한 문제 내 미디어 노출 순서',
CONSTRAINT `fk_media_q`
FOREIGN KEY (`question_id`) REFERENCES `questions` (`question_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='문제 부가 미디어(이미지/영상) 관리';
-- 9. 해시태그: 유연한 필터링을 위한 태그 사전
CREATE TABLE `tags` (
`tag_id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '태그 고유 ID',
`tag_name` VARCHAR(50) UNIQUE NOT NULL COMMENT '태그 키워드 (중복 불가)',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '태그 생성 일시'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='해시태그 마스터 테이블';
-- 10. 문제-태그 매핑: 다대다 관계 연결
CREATE TABLE `question_tags` (
`question_id` BIGINT NOT NULL COMMENT '문제 ID',
`tag_id` BIGINT NOT NULL COMMENT '태그 ID',
PRIMARY KEY (`question_id`, `tag_id`),
CONSTRAINT `fk_qt_q`
FOREIGN KEY (`question_id`) REFERENCES `questions` (`question_id`) ON DELETE CASCADE,
CONSTRAINT `fk_qt_t`
FOREIGN KEY (`tag_id`) REFERENCES `tags` (`tag_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='문제와 해시태그 간의 매핑 테이블';
-- 11. 고사 (이벤트) 관리
CREATE TABLE `exams` (
`exam_id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '고사 고유 ID',
`creator_no` BIGINT NOT NULL COMMENT '생성자(선생님/학생) 식별번호',
`class_id` BIGINT NULL COMMENT '관련 학급 (NULL이면 전체 대상)',
`exam_name` VARCHAR(255) NOT NULL COMMENT '고사 명칭 (예: 1월 모의고사)',
`start_time` DATETIME NOT NULL COMMENT '시험 시작 시간',
`end_time` DATETIME NOT NULL COMMENT '시험 종료 시간',
`location` VARCHAR(100) COMMENT '시험 장소 (온라인/오프라인 장소 등)',
`is_auto_score` BOOLEAN DEFAULT TRUE COMMENT '자동 채점 여부',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '생성 일시',
CONSTRAINT `fk_exam_creator`
FOREIGN KEY (`creator_no`) REFERENCES `users` (`user_no`) ON DELETE CASCADE,
CONSTRAINT `fk_exam_class`
FOREIGN KEY (`class_id`) REFERENCES `classes` (`class_id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='고사(모의고사 등) 관리 테이블';
-- 12. 고사별 문제 매핑
CREATE TABLE `exam_questions` (
`exam_id` BIGINT NOT NULL COMMENT '고사 ID',
`question_id` BIGINT NOT NULL COMMENT '문제 ID',
`question_order` INT NOT NULL COMMENT '고사 내 문항 순서 (1, 2, 3...)',
`score` INT DEFAULT 10 COMMENT '문항 배점',
PRIMARY KEY (`exam_id`, `question_id`),
CONSTRAINT `fk_eq_exam`
FOREIGN KEY (`exam_id`) REFERENCES `exams` (`exam_id`) ON DELETE CASCADE,
CONSTRAINT `fk_eq_question`
FOREIGN KEY (`question_id`) REFERENCES `questions` (`question_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='고사별 포함된 문제들';
-- 13. 고사 결과 리포트 (학생별)
CREATE TABLE `exam_results` (
`result_id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '결과 리포트 ID',
`exam_id` BIGINT NOT NULL COMMENT '고사 ID',
`student_no` BIGINT NOT NULL COMMENT '응시 학생 식별번호',
`total_score` INT DEFAULT 0 COMMENT '총점',
`student_rank` INT COMMENT '응시자 내 등수',
`total_examinees` INT COMMENT '해당 고사 총 응시자 수',
`grade` ENUM('수', '우', '미', '양', '가') COMMENT '성취 평가 등급 (수/우/미/양/가)',
`ai_comment` TEXT COMMENT 'AI 분석 코멘트 (학부모/학생용)',
`teacher_comment` TEXT COMMENT '담당 교사의 코멘트',
`submitted_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '제출 및 리포트 생성 일시',
CONSTRAINT `fk_er_exam`
FOREIGN KEY (`exam_id`) REFERENCES `exams` (`exam_id`) ON DELETE CASCADE,
CONSTRAINT `fk_er_student`
FOREIGN KEY (`student_no`) REFERENCES `users` (`user_no`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='고사(모의고사) 최종 결과 및 분석 리포트';
-- 14. 사용자별 주석 (문제에 대한 주석/메모)
CREATE TABLE `user_comments` (
`comment_id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '주석 고유 ID',
`author_no` BIGINT NOT NULL COMMENT '작성자(선생님/학생) 식별번호',
`target_user_no` BIGINT NULL COMMENT '전송 대상(학생 등) 식별번호 (NULL이면 본인용 메모)',
`question_id` BIGINT NOT NULL COMMENT '문제 ID',
`content` TEXT NOT NULL COMMENT '주석 내용',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '작성 일시',
CONSTRAINT `fk_comment_author`
FOREIGN KEY (`author_no`) REFERENCES `users` (`user_no`) ON DELETE CASCADE,
CONSTRAINT `fk_comment_target`
FOREIGN KEY (`target_user_no`) REFERENCES `users` (`user_no`) ON DELETE SET NULL,
CONSTRAINT `fk_comment_q`
FOREIGN KEY (`question_id`) REFERENCES `questions` (`question_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='사용자별 문제 주석 (교사가 학생에게 전송 가능)';
-- 15. 학습 기록 및 복습 관리: 개인별 학습 최적화 데이터
CREATE TABLE `study_logs` (
`log_id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '학습 로그 고유 ID',
`user_no` BIGINT NOT NULL COMMENT '학습자(사용자) 식별번호',
`question_id` BIGINT NOT NULL COMMENT '학습한 문제 ID',
`user_memo` TEXT COMMENT '사용자가 해당 문제에 남긴 개인적인 메모',
`is_correct` BOOLEAN DEFAULT FALSE COMMENT '최근 풀이 정답 여부',
`try_count` INT DEFAULT 0 COMMENT '누적 풀이 횟수',
`last_played_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '최종 풀이 시간',
`next_review_at` DATETIME COMMENT '망각곡선 기반 다음 복습 권장 일시',
CONSTRAINT `fk_log_user`
FOREIGN KEY (`user_no`) REFERENCES `users` (`user_no`) ON DELETE CASCADE,
CONSTRAINT `fk_log_q`
FOREIGN KEY (`question_id`) REFERENCES `questions` (`question_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='개인별 문제 풀이 기록 및 오답 노트';
-- 16. 문제 풀이 결과 (고사에 속할 수도 있음)
CREATE TABLE `solve_results` (
`result_id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '결과 고유 ID',
`user_no` BIGINT NOT NULL COMMENT '응시자(사용자) 식별번호',
`question_id` BIGINT NOT NULL COMMENT '문제 ID',
`exam_id` BIGINT NULL COMMENT '소속 고사 ID (일반 풀이 시 NULL)',
`submitted_answer` TEXT COMMENT '제출한 답안 (오답 포함)',
`is_correct` BOOLEAN NOT NULL COMMENT '정답 여부 (TRUE: 정답, FALSE: 오답)',
`time_taken` INT NOT NULL DEFAULT 0 COMMENT '경과 시간 (초 단위)',
`solved_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '문제를 푼 시간',
CONSTRAINT `fk_result_user`
FOREIGN KEY (`user_no`) REFERENCES `users` (`user_no`) ON DELETE CASCADE,
CONSTRAINT `fk_result_q`
FOREIGN KEY (`question_id`) REFERENCES `questions` (`question_id`) ON DELETE CASCADE,
CONSTRAINT `fk_result_exam`
FOREIGN KEY (`exam_id`) REFERENCES `exams` (`exam_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='사용자별 문제 풀이 결과';
/*
Edu-Hub DB 샘플 데이터 (Edu-Hub-sample-data.sql)
*/
-- 1. 사용자 데이터 추가
INSERT INTO `users` (`user_id`, `username`, `email`, `role`) VALUES
('hong123', '홍길동', 'teacher1@edu-hub.com', 'TEACHER'),
('kim123', '김철수', 'student1@edu-hub.com', 'STUDENT'),
('lee123', '이영희', 'parent1@edu-hub.com', 'PARENT');
-- 2. 학급 관리, 학생 매핑, 학부모 매핑 데이터 추가
INSERT INTO `classes` (`teacher_no`, `class_name`) VALUES
(1, '파이썬 및 네트워크 기초반');
INSERT INTO `class_students` (`class_id`, `student_no`) VALUES
(1, 2); -- 홍길동 교사의 반에 김철수 학생 소속
INSERT INTO `parent_students` (`parent_no`, `student_no`) VALUES
(3, 2); -- 이영희 학부모의 자녀 김철수
-- 3. 계층형 그룹 데이터 추가 (최대 3층, 사용자 3명이 각자 독립적으로 그룹 관리)
-- 3-1. 사용자 1(교사)의 그룹
INSERT INTO `groups` (`group_id`, `creator_no`, `parent_group_id`, `depth`, `name`, `description`) VALUES
(1, 1, NULL, 1, '컴퓨터 공학', '컴공 자료'),
(2, 1, 1, 2, 'IT 자격증', 'IT 자격증'),
(3, 1, 2, 3, '정보처리기사 실기', '2026 기출');
-- 3-2. 사용자 2(학생)의 자율 학습용 그룹
INSERT INTO `groups` (`group_id`, `creator_no`, `parent_group_id`, `depth`, `name`, `description`) VALUES
(4, 2, NULL, 1, '내 공부장', '개인 자율 복습'),
(5, 2, 4, 2, '오답 노트', '틀린 문제들만'),
(6, 2, 5, 3, '파이썬 기초', '파이썬 복습');
-- 3-3. 사용자 3(학부모)의 자녀 학습 관리 그룹
INSERT INTO `groups` (`group_id`, `creator_no`, `parent_group_id`, `depth`, `name`, `description`) VALUES
(7, 3, NULL, 1, '아이 학습 관리', '부모 정리 문제'),
(8, 3, 7, 2, '영어 단어장', '영단어 모음'),
(9, 3, 8, 3, '중등 필수 영단어', '알아야 할 단어들');
-- 4. 문제 데이터 추가 (학생/학부모도 본인 그룹에 문제 등록)
INSERT INTO `questions` (`question_id`, `creator_no`, `group_id`, `question_type`, `title`, `content`, `answer`, `explanation`, `hint`, `difficulty`, `is_public`, `is_deleted`) VALUES
(1, 1, 3, 'MULTIPLE_CHOICE', 'OSI 7계층 - 전송 계층 (4지선다)', 'OSI 7계층 중 종단 간(End-to-End) 신뢰성 있는 정보 전송을 담당하는 계층은?', '', '전송 계층(Transport Layer)은 TCP와 UDP 프로토콜이 대표적이며 오류 복구와 흐름 제어 등을 담당합니다.', 'TCP/UDP가 속한 계층', 3, TRUE, 'N'),
(2, 1, 3, 'MULTIPLE_CHOICE', '디자인 패턴 - 생성 (5지선다)', '다음 중 소프트웨어 객체 지향 디자인 패턴의 생성(Creational) 패턴이 아닌 것은?', '', 'Observer 패턴은 행위(Behavioral) 패턴에 속합니다.', '상태 변화를 관찰하는 패턴은 생성과 무관합니다.', 4, TRUE, 'N'),
(3, 3, 9, 'MULTIPLE_CHOICE', '영어 단어 - Abandon (4지선다)', '다음 중 영어 단어 ''Abandon''의 뜻으로 가장 알맞은 것은?', '', '어원은 프랑스어 abandonner (넘겨주다)에서 유래했으며, give up과 유사한 의미를 가집니다.', 'give up과 비슷한 뜻', 1, TRUE, 'N'),
(4, 2, 6, 'SUBJECTIVE', '파이썬 - 리스트 기초 (주관식)', '파이썬에서 비어있는 리스트를 생성하는 코드를 두 가지 작성하시오.', '[] 또는 list()', '대괄호를 사용하거나 내장 함수 list()를 사용하여 빈 리스트를 만들 수 있습니다.', '대괄호 사용', 2, TRUE, 'N');
-- 5. 객관식 보기 데이터 추가 (question_options)
INSERT INTO `question_options` (`question_id`, `option_number`, `content`, `is_answer`) VALUES
-- 1번 문제의 보기 (4지선다, 정답: 4)
(1, 1, '물리 계층', FALSE), (1, 2, '데이터 링크 계층', FALSE), (1, 3, '네트워크 계층', FALSE), (1, 4, '전송 계층', TRUE),
-- 2번 문제의 보기 (5지선다, 정답: 5)
(2, 1, 'Singleton', FALSE), (2, 2, 'Factory Method', FALSE), (2, 3, 'Abstract Factory', FALSE), (2, 4, 'Builder', FALSE), (2, 5, 'Observer', TRUE),
-- 3번 문제의 보기 (4지선다, 정답: 2)
(3, 1, '성취하다', FALSE), (3, 2, '버리다, 포기하다', TRUE), (3, 3, '획득하다', FALSE), (3, 4, '유지하다', FALSE);
-- 6. 미디어 리소스 데이터 추가
INSERT INTO `media_attachments` (`question_id`, `media_type`, `media_url`, `sort_order`) VALUES
(1, 'image', 'https://s3.example.com/edu-hub/osi_7_layer.png', 1),
(1, 'youtube', 'https://www.youtube.com/watch?v=example1', 2),
(2, 'image', 'https://s3.example.com/edu-hub/singleton_diagram.png', 1),
(4, 'youtube', 'https://www.youtube.com/watch?v=example2', 1);
-- 7. 해시태그 데이터 추가
INSERT INTO `tags` (`tag_id`, `tag_name`) VALUES
(1, '네트워크'), (2, '디자인패턴'), (3, '영단어'), (4, '파이썬'), (5, '기초');
-- 8. 문제-태그 매핑
INSERT INTO `question_tags` (`question_id`, `tag_id`) VALUES
(1, 1),
(2, 2),
(3, 3), (3, 5),
(4, 4), (4, 5);
-- 9. 고사(이벤트) 5개 추가 (교사 3종, 학생 자율 1종, 학부모 주도 1종)
INSERT INTO `exams` (`exam_id`, `creator_no`, `class_id`, `exam_name`, `start_time`, `end_time`, `location`, `is_auto_score`) VALUES
(1, 1, 1, '1월 정보처리 기초 모의고사 (교사 생성)', '2026-01-20 14:00:00', '2026-01-20 15:00:00', '온라인 CBT', TRUE),
(2, 1, 1, '2월 정기 테스트 (교사 생성)', '2026-02-15 10:00:00', '2026-02-15 11:00:00', '제1 시험장', TRUE),
(3, 1, NULL, '전국 단위 공개 시험 (교사 생성)', '2026-03-01 13:00:00', '2026-03-01 13:30:00', '온라인', TRUE),
(4, 2, NULL, '내 약점 파악 모의고사 (학생 자율)', '2026-03-22 18:00:00', '2026-03-22 19:00:00', '내 책상', TRUE),
(5, 3, NULL, '우리아이 주말 확인 점검 (학부모 생성)', '2026-03-25 10:00:00', '2026-03-25 11:00:00', '자택 거실', TRUE);
-- 10. 고사별 문제 매핑
INSERT INTO `exam_questions` (`exam_id`, `question_id`, `question_order`, `score`) VALUES
(1, 1, 1, 50), (1, 2, 2, 50), -- 1월 모의고사
(2, 1, 1, 50), (2, 2, 2, 50), -- 2월 정기 테스트
(3, 1, 1, 100), -- 전국 공개 시험
(4, 4, 1, 100), -- 학생 자율 (파이썬)
(5, 3, 1, 100); -- 학부모 모의고사 (영어)
-- 11. 고사 결과 리포트 (학생 2번의 결과 예제)
INSERT INTO `exam_results` (`exam_id`, `student_no`, `total_score`, `student_rank`, `total_examinees`, `grade`, `ai_comment`, `teacher_comment`) VALUES
(1, 2, 50, 15, 30, '미', '[AI 분석] 네트워크 계층은 훌륭하나 디자인 패턴 복습 요망.', '철수 학생, 디자인 패턴을 다시 봅시다.'),
(4, 2, 100, 1, 1, '수', '[AI 분석] 파이썬 자율 모의고사를 모두 맞췄습니다.', NULL);
-- 12. 사용자별 주석 (문제에 대한 메모)
INSERT INTO `user_comments` (`author_no`, `target_user_no`, `question_id`, `content`) VALUES
(1, 2, 1, '김철수 학생, 이 문제는 꼭 복습하세요.'), -- 교사가 학생에게 전송
(2, NULL, 3, 'abandon 스펠링 주의.'); -- 학생 본인 확인용 메모
-- 13. 학습 기록 (누적 복습 정보)
INSERT INTO `study_logs` (`user_no`, `question_id`, `user_memo`, `is_correct`, `try_count`, `next_review_at`) VALUES
(2, 1, '전송/네트워크 헷갈림.', FALSE, 2, DATE_ADD(NOW(), INTERVAL 1 DAY)),
(2, 2, '행위 패턴 조심', TRUE, 1, DATE_ADD(NOW(), INTERVAL 3 DAY)),
(2, 3, NULL, TRUE, 3, DATE_ADD(NOW(), INTERVAL 7 DAY));
-- 14. 실 개별 문제 풀이 결과
INSERT INTO `solve_results` (`user_no`, `question_id`, `exam_id`, `submitted_answer`, `is_correct`, `time_taken`, `solved_at`) VALUES
(2, 1, 1, '4', TRUE, 45, '2026-01-20 14:05:00'), -- 1월 시험 중 풀이 (정답)
(2, 2, 1, '3', FALSE, 120, '2026-01-20 14:10:00'), -- 1월 시험 중 풀이 (오답)
(2, 4, 4, 'list()', TRUE, 15, '2026-03-22 18:05:00'),-- 자율 시험 풀이 (정답)
(2, 3, NULL, '1', FALSE, 20, '2026-03-22 10:06:00'); -- 일반 자율 풀이
1월 정보처리 기초 모의고사 의 문제 리스트(정답과 힌트, 작성자이름 도 같이 )
작성자 이름(username)까지 포함하여 내용을 다시 정리해 드립니다! 두 문항 모두 선생님인 홍길동 사용자가 작성한 문제입니다.
📝 문제 리스트 내용 (정답, 힌트, 작성자 포함)
[1번 문항] OSI 7계층 - 전송 계층 (4지선다형)
배점: 50점
작성자: 홍길동
지문: "OSI 7계층 중 종단 간(End-to-End) 신뢰성 있는 정보 전송을 담당하는 계층은?"
객관식 보기: ① 물리 계층, ② 데이터 링크 계층, ③ 네트워크 계층, ④ 전송 계층
💡 힌트: "TCP/UDP가 속한 계층"
🎯 정답: ④ 전송 계층
📖 해설: "전송 계층(Transport Layer)은 TCP와 UDP 프로토콜이 대표적이며 오류 복구와 흐름 제어 등을 담당합니다."
[2번 문항] 디자인 패턴 - 생성 (5지선다형)
배점: 50점
작성자: 홍길동
지문: "다음 중 소프트웨어 객체 지향 디자인 패턴의 생성(Creational) 패턴이 아닌 것은?"
객관식 보기: ① Singleton, ② Factory Method, ③ Abstract Factory, ④ Builder, ⑤ Observer
💡 힌트: "상태 변화를 관찰하는 패턴은 생성과 무관합니다."
🎯 정답: ⑤ Observer
📖 해설: "Observer 패턴은 행위(Behavioral) 패턴에 속합니다."
💻 작성자 이름을 함께 조회하는 업데이트된 SQL 쿼리
questions 테이블의 creator_no를 기반으로 users 테이블을 JOIN하여 작성자 이름(username)을 함께 불러오도록 수정한 쿼리입니다.
SELECT
eq.question_order AS '문항 번호',
q.title AS '문제 제목',
u.username AS '작성자 이름',
q.content AS '지문',
q.hint AS '힌트',
-- 객관식일 경우 정답 보기 번호 추출
IF(q.question_type = 'MULTIPLE_CHOICE',
(SELECT GROUP_CONCAT(option_number SEPARATOR ', ')
FROM question_options qo
WHERE qo.question_id = q.question_id AND qo.is_answer = TRUE),
q.answer
) AS '정답',
q.explanation AS '해설',
eq.score AS '배점'
FROM exams e
JOIN exam_questions eq ON e.exam_id = eq.exam_id
JOIN questions q ON eq.question_id = q.question_id
JOIN users u ON q.creator_no = u.user_no
WHERE e.exam_name = '1월 정보처리 기초 모의고사 (교사 생성)'
ORDER BY eq.question_order ASC;


'IT 개발,관리,연동,자동화' 카테고리의 다른 글
| 인공지능 운영체제: 설치하는 OS에서 생성하는 OS로 (0) | 2026.04.19 |
|---|---|
| 안 쓰는 스마트폰이 일하는 AI 비서가 된다? AI 터미널 구축기 (1) | 2026.04.11 |
| 서랍 속 안드로이드 폰의 화려한 변신: 공인 IP 없이도 가능한 나만의 웹 서버 구축하기 (3) | 2026.03.18 |
| Windsurf: 혁신적인 AI 코드 에디터의 주요 특징과 장점 (1) | 2026.03.12 |
| 트럭커-프리(Trucker-Free) : 개선된 투명한 화물 거래 생태계 플랫폼 (0) | 2026.02.27 |