Skip to content

miiniminimo/Quizi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

23 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸŽ“ Quizi β€” AI 기반 λ§žμΆ€ν˜• ν€΄μ¦ˆ ν•™μŠ΅ ν”Œλž«νΌ

λ¬Έμ œμ§‘μ„ 직접 λ§Œλ“€κ±°λ‚˜, AIΒ·OCR둜 μžλ™ μƒμ„±ν•˜κ³ , CBT ν™˜κ²½μ—μ„œ ν’€κ³ , μ˜€λ‹΅μ„ λΆ„μ„ν•˜λŠ” μ˜¬μΈμ› ν•™μŠ΅ ν”Œλž«νΌ


πŸ“Œ λͺ©μ°¨


✨ μ£Όμš” κΈ°λŠ₯

1. λ¬Έμ œμ§‘ 생성 (Creation Studio)

방식 μ„€λͺ…
πŸ“ 직접 λ§Œλ“€κΈ° 객관식 / 주관식 문제, μ •λ‹΅ 및 해섀을 직접 μž…λ ₯
πŸ€– AI μžλ™ 생성 주제(예: "μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬")λ₯Ό μž…λ ₯ν•˜λ©΄ GPT-4o miniκ°€ 문제λ₯Ό μžλ™ 좜제
πŸ“· OCR 이미지 λ³€ν™˜ μ‹œν—˜μ§€Β·κ΅μž¬ 사진·PDFλ₯Ό μ—…λ‘œλ“œν•˜λ©΄ AI Vision이 ν…μŠ€νŠΈλ₯Ό 인식해 λ””μ§€ν„Έ λ¬Έμ œμ§‘μœΌλ‘œ λ³€ν™˜

2. ν•™μŠ΅ 및 평가 (Learning & Assessment)

  • CBT ν™˜κ²½: μ‹€μ œ μ‹œν—˜κ³Ό μœ μ‚¬ν•œ 타이머 UIμ—μ„œ 문제 풀이
  • μžλ™ 채점: 제좜 μ¦‰μ‹œ μ μˆ˜Β·μ •λ‹΅ μ—¬λΆ€Β·ν•΄μ„€ 확인
  • μ˜€λ‹΅λ…ΈνŠΈ: ν‹€λ¦° 문제λ₯Ό μ €μž₯ν•˜κ³  λ§ˆμ΄νŽ˜μ΄μ§€μ—μ„œ μ–Έμ œλ“  볡슡

3. κ°œμΈν™” 및 관리 (Personalization)

  • πŸ“‚ 폴더 관리: λ“œλž˜κ·Έ μ•€ λ“œλ‘­μœΌλ‘œ λ¬Έμ œμ§‘μ„ 폴더별 정리
  • 뢁마크: λ‹€λ₯Έ μ‚¬μš©μžμ˜ λ¬Έμ œμ§‘μ„ λ‚΄ 보관함에 μ €μž₯
  • ν•™μŠ΅ 톡계: ν‘Ό 문제 수, μ •λ‹΅λ₯ , 졜근 기둝을 λŒ€μ‹œλ³΄λ“œμ—μ„œ 쑰회

4. κ΄€λ¦¬μž μ‹œμŠ€ν…œ (Admin)

  • λŒ€μ‹œλ³΄λ“œ: 전체 νšŒμ› 수, λ¬Έμ œμ§‘ 수 λ“± ν”Œλž«νΌ ν˜„ν™© λͺ¨λ‹ˆν„°λ§
  • μ½˜ν…μΈ  관리: λΆ€μ μ ˆν•œ λ¬Έμ œμ§‘ μ‚­μ œ 및 νšŒμ› 관리

πŸ› οΈ 기술 μŠ€νƒ

Backend

  • Java 17+ / Jakarta EE 10 (Servlet 6.1 기반 MVC)
  • Apache Tomcat 10.1 (WAS)
  • MySQL 8.0 + JDBC (순수 SQL, ORM λ―Έμ‚¬μš©)

Frontend

  • JSP (μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§)
  • Tailwind CSS (μœ ν‹Έλ¦¬ν‹° 퍼슀트 μŠ€νƒ€μΌλ§)
  • Vanilla JS (Fetch API, λ“œλž˜κ·Έ μ•€ λ“œλ‘­)

μ™ΈλΆ€ 라이브러리 및 API

라이브러리 μš©λ„
OpenAI GPT-4o mini 문제 μžλ™ 생성 (ν…μŠ€νŠΈ + Vision)
Tess4J 5.9 OCR ν…μŠ€νŠΈ 인식 (ν•œκ΅­μ–΄Β·μ˜μ–΄)
JBCrypt λΉ„λ°€λ²ˆν˜Έ 단방ν–₯ μ•”ν˜Έν™”
Gson 2.11 JSON νŒŒμ‹± 및 직렬화
Commons FileUpload2 λ©€ν‹°νŒŒνŠΈ 파일 μ—…λ‘œλ“œ 처리

πŸ“‚ ν”„λ‘œμ νŠΈ ꡬ쑰

Quizi/
β”œβ”€β”€ src/main/java/com/quizi/
β”‚   β”œβ”€β”€ controller/          # Servlet 컨트둀러 (μš”μ²­ 처리)
β”‚   β”‚   β”œβ”€β”€ LoginController.java
β”‚   β”‚   β”œβ”€β”€ MainController.java
β”‚   β”‚   β”œβ”€β”€ CreateController.java
β”‚   β”‚   β”œβ”€β”€ SolveController.java
β”‚   β”‚   β”œβ”€β”€ AiGenController.java
β”‚   β”‚   β”œβ”€β”€ OcrController.java
β”‚   β”‚   β”œβ”€β”€ AdminController.java
β”‚   β”‚   └── ...
β”‚   β”œβ”€β”€ dao/                 # 데이터 μ ‘κ·Ό 객체 (DB 쿼리)
β”‚   β”‚   β”œβ”€β”€ UserDAO.java
β”‚   β”‚   β”œβ”€β”€ WorkbookDAO.java
β”‚   β”‚   β”œβ”€β”€ FolderDAO.java
β”‚   β”‚   β”œβ”€β”€ SolveHistoryDAO.java
β”‚   β”‚   └── WrongNoteDAO.java
β”‚   β”œβ”€β”€ dto/                 # 데이터 전솑 객체 (λͺ¨λΈ)
β”‚   β”‚   β”œβ”€β”€ UserDTO.java
β”‚   β”‚   β”œβ”€β”€ WorkbookDTO.java
β”‚   β”‚   β”œβ”€β”€ QuestionDTO.java
β”‚   β”‚   └── FolderDTO.java
β”‚   β”œβ”€β”€ service/             # λΉ„μ¦ˆλ‹ˆμŠ€ 둜직
β”‚   β”‚   β”œβ”€β”€ AiService.java   # OpenAI API 연동 (ν…μŠ€νŠΈΒ·μ΄λ―Έμ§€)
β”‚   β”‚   └── OCRService.java  # Tess4J OCR 처리
β”‚   └── util/
β”‚       β”œβ”€β”€ DBConnection.java    # JDBC μ—°κ²°
β”‚       └── ConfigManager.java   # ν™˜κ²½λ³€μˆ˜ / μ„€μ • 파일 λ‘œλ“œ
β”œβ”€β”€ src/main/webapp/
β”‚   β”œβ”€β”€ views/               # JSP λ·°
β”‚   β”‚   β”œβ”€β”€ main.jsp         # 메인 (λ¬Έμ œμ§‘ 탐색)
β”‚   β”‚   β”œβ”€β”€ create.jsp       # λ¬Έμ œμ§‘ 생성
β”‚   β”‚   β”œβ”€β”€ solve.jsp        # 문제 ν’€κΈ°
β”‚   β”‚   β”œβ”€β”€ result.jsp       # 채점 κ²°κ³Ό
β”‚   β”‚   β”œβ”€β”€ mypage.jsp       # λ§ˆμ΄νŽ˜μ΄μ§€
β”‚   β”‚   β”œβ”€β”€ admin.jsp        # κ΄€λ¦¬μž νŽ˜μ΄μ§€
β”‚   β”‚   └── ...
β”‚   β”œβ”€β”€ index.jsp            # μ§„μž…μ  (β†’ /main λ¦¬λ‹€μ΄λ ‰νŠΈ)
β”‚   └── WEB-INF/
β”‚       β”œβ”€β”€ web.xml
β”‚       └── tessdata/        # OCR μ–Έμ–΄ 데이터 (kor, eng)
└── pom.xml

βš™οΈ μ„€μΉ˜ 및 μ‹€ν–‰

사전 μš”κ΅¬ 사항

  • JDK 17 이상
  • Apache Tomcat 10.1 이상
  • MySQL 8.0
  • Maven 3.6+

1. λ°μ΄ν„°λ² μ΄μŠ€ μ„€μ •

CREATE DATABASE quiz_platform CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE quiz_platform;

-- 상세 μŠ€ν‚€λ§ˆ: /src/main/resources/db_schema.sql μ°Έμ‘°
-- μ£Όμš” ν…Œμ΄λΈ”: users, workbooks, questions, question_options,
--              solve_history, wrong_notes, folders, bookmarks

2. μ„€μ • 파일 생성

src/main/resources/config.properties νŒŒμΌμ„ μƒμ„±ν•˜κ³  μ•„λž˜ λ‚΄μš©μ„ μž…λ ₯ν•©λ‹ˆλ‹€.

db.url=jdbc:mysql://localhost:3306/quiz_platform?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
db.username=your_db_username
db.password=your_db_password
openai.api.key=sk-your-openai-api-key

배포 ν™˜κ²½μ—μ„œλŠ” ν™˜κ²½λ³€μˆ˜(DB_URL, DB_USERNAME, DB_PASSWORD, OPENAI_API_KEY)λ‘œλ„ μ„€μ • κ°€λŠ₯ν•©λ‹ˆλ‹€. ν™˜κ²½λ³€μˆ˜κ°€ μš°μ„  μ μš©λ©λ‹ˆλ‹€.

3. λΉŒλ“œ 및 μ‹€ν–‰

# μ˜μ‘΄μ„± μ„€μΉ˜ 및 WAR 파일 λΉŒλ“œ
./mvnw clean package

# IDE μ‚¬μš© μ‹œ
# Tomcat μ„œλ²„ ꡬ성 β†’ Artifact(Quizi:war exploded) 배포 β†’ μ„œλ²„ μ‹€ν–‰

접속: http://localhost:8080/Quizi


πŸ’‘ 개발 포인트

νŠΈλžœμž­μ…˜ 처리

λ¬Έμ œμ§‘ μƒμ„±Β·μˆ˜μ • μ‹œ workbooks와 questions ν…Œμ΄λΈ”μ΄ ν•¨κ»˜ λ³€κ²½λ˜λ―€λ‘œ, setAutoCommit(false)둜 단일 νŠΈλžœμž­μ…˜μœΌλ‘œ λ¬Άμ–΄ 데이터 무결성을 보μž₯ν•©λ‹ˆλ‹€. 였λ₯˜ λ°œμƒ μ‹œ rollback()으둜 μ›μžμ„±μ„ μœ μ§€ν•©λ‹ˆλ‹€.

λ³΄μ•ˆ

  • λΉ„λ°€λ²ˆν˜ΈλŠ” JBCrypt둜 단방ν–₯ ν•΄μ‹±ν•˜μ—¬ μ €μž₯
  • API KeyΒ·DB μ •λ³΄λŠ” config.properties와 ν™˜κ²½λ³€μˆ˜λ‘œ 뢄리 (ConfigManager)
  • κ΄€λ¦¬μž κΆŒν•œ 체크: session의 user.role == ADMIN 검증

AI 응닡 νŒŒμ‹±

GPT-4o mini의 응닡에 포함될 수 μžˆλŠ” Markdown μ½”λ“œλΈ”λ‘(```json)을 μ •κ·œμ‹μœΌλ‘œ μ œκ±°ν•˜κ³ , Gson의 μœ μ—°ν•œ νŒŒμ‹±μœΌλ‘œ λ‹€μ–‘ν•œ JSON 응닡 ꡬ쑰에 λŒ€μ‘ν•©λ‹ˆλ‹€.

Tomcat 10 ν˜Έν™˜μ„±

javax.* λŒ€μ‹  jakarta.* νŒ¨ν‚€μ§€ 기반 라이브러리(commons-fileupload2-jakarta, jstl-api 3.0)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ΅œμ‹  Tomcat ν™˜κ²½κ³Όμ˜ ν˜Έν™˜μ„±μ„ ν™•λ³΄ν–ˆμŠ΅λ‹ˆλ‹€.

μ„€μ • μœ μ—°μ„± (ConfigManager)

ν™˜κ²½λ³€μˆ˜λ₯Ό μš°μ„  μ‘°νšŒν•˜κ³ , μ—†μœΌλ©΄ config.propertiesλ₯Ό μ½λŠ” λ°©μ‹μœΌλ‘œ 둜컬 개발과 배포 ν™˜κ²½μ„ λͺ¨λ‘ μ§€μ›ν•©λ‹ˆλ‹€.


πŸ“ License

This project is licensed under the MIT License.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors