IT 개발,관리,연동,자동화

🚀 AI Edu-Hub(가칭) 소개

_Blue_Sky_ 2026. 3. 22. 01:33
728x90

: 선생님의 퇴근을 당기고, 학생의 성적을 뒤집는 단 하나의 "AI 학습 관리 솔루션"

아직도 문제집을 일일이 타이핑하고, 오답 노트를 수동으로 만드시나요? 교육의 본질은 '관리'가 아니라 '가르침'에 있습니다. 반복되는 단순 노동은 이제 AI에게 맡기고, 당신은 오직 학생에게만 집중하십시오.


320x100

🔥 왜 [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와 함께하고 있습니다. 당신의 교실도 이제 변해야 할 때입니다.

320x100

📚 [AI Edu-Hub] 프로젝트 소개서

"사진 한 장으로 시작하는 우리 반 맞춤형 스마트 학습지"

안녕하세요! AI Edu-Hub는 선생님의 문제 출제 고민을 덜어드리고, 학생에게는 나만의 AI 튜터를, 학부모님께는 안심할 수 있는 자녀의 학습 리포트를 제공하는 지능형 학습 관리 플랫폼입니다.


✨ 우리 서비스는 이런 점이 특별해요!

1. 📸 선생님을 위한 "1초 문제 등록"

두꺼운 문제집을 일일이 타이핑하시나요? 이제 폰카로 찰칵! 찍기만 하세요.

  • AI 스캔: 사진 속 글자와 복잡한 수학 수식까지 AI가 읽어서 디지털 문제로 변환해줍니다.
  • 유튜브 연동: 문제에 관련된 강의 영상을 바로 붙여서 학생들에게 보낼 수 있습니다.

2. 🤖 학생을 위한 "포기 없는 학습"

문제를 풀고 나면 AI가 즉시 채점하고, 틀린 이유는 친절하게 설명해줍니다.

  • 스마트 채점: 주관식 답안도 AI가 문맥을 파악해 똑똑하게 채점합니다.
  • 망각곡선 복습: 오늘 틀린 문제는 잊어버릴 만할 때 AI가 다시 가져와서 확실히 내 것으로 만들어줍니다.
  • 함께 공부하기: 모르는 문제는 커뮤니티에 올려 친구들과 서로 묻고 답하며 즐겁게 공부할 수 있습니다.

📧 3. 학부모님을 위한 "안심 리포트"

아이의 공부 결과가 궁금하셨죠? 이제 매번 물어보지 않으셔도 됩니다.

  • 자동 알림: 자녀가 시험을 마치면 점수와 분석 리포트가 학부모님 메일로 즉시 발송됩니다.
  • 성장 기록: 우리 아이가 어떤 단원을 어려워하고, 얼마나 성장하고 있는지 한눈에 확인하세요.

🚀 어떻게 사용하나요? (3단계 활용법)

  1. 교사: 수업 자료를 사진 찍어 **'우리 반 교실'**에 과제로 올립니다.
  2. 학생: 전용 앱으로 접속해 게임처럼 문제를 풀고, 모르는 건 친구들과 토론합니다.
  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;

728x90