Skip to content

SmartSP-Dev/SSP-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

203 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

SSP-Server

AI ๊ธฐ๋ฐ˜ ํ•™์Šต ๋ฃจํ‹ด ๊ด€๋ฆฌ ๋ฐ ํ€ด์ฆˆ ์ƒ์„ฑ ์‹œ์Šคํ…œ์˜ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„

SSP-server๋Š” ์‚ฌ์šฉ์ž ๋งž์ถคํ˜• ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ์˜ ํšจ์œจ์ ์ธ ์ฒ˜๋ฆฌ์™€ ์•ˆ์ •์ ์ธ API ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“š ์ฃผ์š” ๊ธฐ๋Šฅ

1. AI ๊ธฐ๋ฐ˜ ํ€ด์ฆˆ ์ƒ์„ฑ

  • GPT-4o API ์—ฐ๋™: ์‚ฌ์šฉ์ž๊ฐ€ ์—…๋กœ๋“œํ•œ ํ•™์Šต ์ž๋ฃŒ(ํ…์ŠคํŠธ, PDF, ์ด๋ฏธ์ง€)๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋งž์ถคํ˜• ํ€ด์ฆˆ ์ž๋™ ์ƒ์„ฑ
  • ๋‹ค์–‘ํ•œ ๋ฌธ์ œ ์œ ํ˜•: ๊ฐ๊ด€์‹, OX, ๋นˆ์นธ ์ฑ„์šฐ๊ธฐ ๋ฌธ์ œ ์ง€์›
  • ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜ ์ถœ์ œ: ํŠน์ • ํ‚ค์›Œ๋“œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ•œ ๋ฌธ์ œ ์ƒ์„ฑ์œผ๋กœ ํ•™์Šต ํšจ์œจ์„ฑ ๊ทน๋Œ€ํ™”

2. OCR ๊ธฐ๋ฐ˜ ์ด๋ฏธ์ง€ ํ…์ŠคํŠธ ์ถ”์ถœ

  • Tesseract OCR + OpenCV: ์ด๋ฏธ์ง€์—์„œ ํ…์ŠคํŠธ ์ž๋™ ์ถ”์ถœ ๋ฐ ์ „์ฒ˜๋ฆฌ
  • PDF ํŒŒ์‹ฑ: Apache PDFBox๋ฅผ ํ™œ์šฉํ•œ PDF ๋ฌธ์„œ ํ…์ŠคํŠธ ์ถ”์ถœ
  • ๋Œ€์šฉ๋Ÿ‰ ์ฒ˜๋ฆฌ: ์ตœ๋Œ€ 30,000์ž๊นŒ์ง€ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ

3. ์—๋ธŒ๋ฆฌํƒ€์ž„ ์‹œ๊ฐ„ํ‘œ ํฌ๋กค๋ง

  • Selenium WebDriver: ์—๋ธŒ๋ฆฌํƒ€์ž„ ์‹œ๊ฐ„ํ‘œ ์ž๋™ ํฌ๋กค๋ง
  • ๋™์‹œ์„ฑ ์ œ์–ด: Semaphore + ThreadLocal ํŒจํ„ด์œผ๋กœ ์•ˆ์ •์ ์ธ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํฌ๋กค๋ง (์ตœ๋Œ€ 3๋ช… ๋™์‹œ ์ฒ˜๋ฆฌ)
  • ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”: ์ตœ๋Œ€ 900MB๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ œํ•œ

4. ํ•™์Šต ๋ฃจํ‹ด ๊ด€๋ฆฌ

  • ๋ณต์Šต ์•Œ๋ฆผ: ์ฃผ๊ฐ„ ํ€ด์ฆˆ ์š”์•ฝ ์ œ๊ณต ๋ฐ ๋ณต์Šต ํ•„์š” ํ•ญ๋ชฉ ์ž๋™ ๊ฐฑ์‹ 
  • ํ•™์Šต ํ†ต๊ณ„: ์‚ฌ์šฉ์ž๋ณ„ ํ€ด์ฆˆ ์‘์‹œ ํšŸ์ˆ˜, ์ •๋‹ต๋ฅ  ์ถ”์ 

5. ์†Œ์…œ ๋กœ๊ทธ์ธ

  • Kakao & Apple OAuth 2.0: ๊ฐ„ํŽธํ•œ ์†Œ์…œ ๋กœ๊ทธ์ธ ์ง€์›
  • JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ: ๋ฌด์ƒํƒœ(Stateless) ์ธ์ฆ์œผ๋กœ ํ™•์žฅ์„ฑ ํ™•๋ณด

๐Ÿ›  ๊ธฐ์ˆ  ์Šคํƒ

Core Framework

๊ธฐ์ˆ  ๋ฒ„์ „ ์‚ฌ์šฉ ์ด์œ 
Spring Boot 3.4.4 ์ƒ์‚ฐ์„ฑ ๋†’์€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ
Java 21 Virtual Threads ๋“ฑ ์ตœ์‹  ์„ฑ๋Šฅ ๊ฐœ์„  ๊ธฐ๋Šฅ ํ™œ์šฉ
Gradle 8.x ๋น ๋ฅด๊ณ  ์œ ์—ฐํ•œ ๋นŒ๋“œ ์ž๋™ํ™” ๋„๊ตฌ

Database & Persistence

๊ธฐ์ˆ  ๋ฒ„์ „ ์‚ฌ์šฉ ์ด์œ 
MySQL 8.x ์•ˆ์ •์ ์ด๊ณ  ๊ฒ€์ฆ๋œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
Spring Data JPA 3.4.4 ORM์„ ํ†ตํ•œ ์ƒ์‚ฐ์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ๋ฐ ๊ด€๋ฆฌ
Hibernate 6.x JPA ๊ตฌํ˜„์ฒด๋กœ N+1 ์ฟผ๋ฆฌ ๋ฐฉ์ง€ ๋ฐ ์ตœ์ ํ™”

Security & Authentication

๊ธฐ์ˆ  ๋ฒ„์ „ ์‚ฌ์šฉ ์ด์œ 
Spring Security 6.x ํฌ๊ด„์ ์ธ ๋ณด์•ˆ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ธ์ฆ/์ธ๊ฐ€ ์ฒ˜๋ฆฌ
JWT (jjwt) 0.11.5 ๋ฌด์ƒํƒœ ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์œผ๋กœ ํ™•์žฅ์„ฑ ํ™•๋ณด
OAuth 2.0 - Kakao/Apple ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„

AI & External API

๊ธฐ์ˆ  ๋ฒ„์ „ ์‚ฌ์šฉ ์ด์œ 
OpenAI API GPT-4o ํ•™์Šต ์ž๋ฃŒ ๋ถ„์„ ๋ฐ ๋งž์ถคํ˜• ํ€ด์ฆˆ ์ž๋™ ์ƒ์„ฑ
RestTemplate - ์™ธ๋ถ€ API ์—ฐ๋™ ๋ฐ Connection Pooling

OCR & Document Processing

๊ธฐ์ˆ  ๋ฒ„์ „ ์‚ฌ์šฉ ์ด์œ 
Tesseract OCR 5.13.0 ์ด๋ฏธ์ง€์—์„œ ํ…์ŠคํŠธ ์ถ”์ถœ
OpenCV 4.5.4 ์ด๋ฏธ์ง€ ์ „์ฒ˜๋ฆฌ ๋ฐ ํ’ˆ์งˆ ๊ฐœ์„ 
Apache PDFBox 3.0.4 PDF ๋ฌธ์„œ ํ…์ŠคํŠธ ์ถ”์ถœ

Web Crawling

๊ธฐ์ˆ  ๋ฒ„์ „ ์‚ฌ์šฉ ์ด์œ 
Selenium WebDriver 4.20.0 ๋™์  ์›น ํŽ˜์ด์ง€ ํฌ๋กค๋ง (์—๋ธŒ๋ฆฌํƒ€์ž„ ์‹œ๊ฐ„ํ‘œ)
WebDriverManager 5.8.0 ChromeDriver ์ž๋™ ์„ค์ • ๋ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ

DevOps & Deployment

๊ธฐ์ˆ  ๋ฒ„์ „ ์‚ฌ์šฉ ์ด์œ 
Docker - ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ๋ฐฐํฌ๋กœ ํ™˜๊ฒฝ ์ผ๊ด€์„ฑ ํ™•๋ณด
GitHub Actions - ์ง€์†์  ํ†ตํ•ฉ(CI)์œผ๋กœ ์ฝ”๋“œ ํ’ˆ์งˆ ์ž๋™ ๊ฒ€์ฆ

Documentation & Development

๊ธฐ์ˆ  ๋ฒ„์ „ ์‚ฌ์šฉ ์ด์œ 
SpringDoc OpenAPI 2.2.0 Swagger UI๋ฅผ ํ†ตํ•œ API ๋ฌธ์„œ ์ž๋™ ์ƒ์„ฑ
Lombok - ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ ์ œ๊ฑฐ๋กœ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ

๐Ÿ— ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

ERD (Entity Relationship Diagram)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„ ๋ฐ ํ…Œ์ด๋ธ” ๊ฐ„ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

แ„…แ…ฎแ„ƒแ…ต_ERD

์‹œ์Šคํ…œ ๊ตฌ์กฐ๋„

์ „์ฒด ์‹œ์Šคํ…œ์˜ ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

image

๐Ÿ“– API ๋ฌธ์„œ

์ฃผ์š” API ์—”๋“œํฌ์ธํŠธ

ํ€ด์ฆˆ ๊ด€๋ฆฌ

  • POST /quizzes - ํ€ด์ฆˆ ์ƒ์„ฑ
  • GET /quizzes - ์‚ฌ์šฉ์ž ํ€ด์ฆˆ ๋ชฉ๋ก ์กฐํšŒ
  • POST /quizzes/{quizId}/attempts - ํ€ด์ฆˆ ์‘์‹œ
  • DELETE /quizzes/{quizId} - ํ€ด์ฆˆ ์‚ญ์ œ

์‹œ๊ฐ„ํ‘œ ๊ด€๋ฆฌ

  • POST /calendar/timetable - ์—๋ธŒ๋ฆฌํƒ€์ž„ ์‹œ๊ฐ„ํ‘œ ํฌ๋กค๋ง ๋ฐ ์ €์žฅ
  • GET /calendar/timetable - ์ €์žฅ๋œ ์‹œ๊ฐ„ํ‘œ ์กฐํšŒ

์ธ์ฆ

  • POST /auth/kakao - Kakao ๋กœ๊ทธ์ธ
  • POST /auth/apple - Apple ๋กœ๊ทธ์ธ

๐Ÿ”ง ์ฃผ์š” ๊ธฐ์ˆ ์  ๊ฐœ์„  ์‚ฌํ•ญ

1. Quiz ์„œ๋น„์Šค ๋ฆฌํŒฉํ† ๋ง

  • SRP ์ค€์ˆ˜: QuizService๋ฅผ OpenAiClient, QuizPromptBuilder, QuizGrader๋กœ ๋ถ„๋ฆฌ
  • ๋งค์ง ๋„˜๋ฒ„ ์ œ๊ฑฐ: QuizConstants, QuizStatus Enum ๋„์ž…
  • N+1 ์ฟผ๋ฆฌ ๋ฐฉ์ง€: @EntityGraph ๋ฐ Bulk ์—ฐ์‚ฐ ์ ์šฉ
  • ํƒ€์ž… ์•ˆ์ •์„ฑ: Map โ†’ DTO ๋ณ€ํ™˜

2. Calendar ์„œ๋น„์Šค ๋™์‹œ์„ฑ ๊ฐœ์„ 

  • Semaphore + ThreadLocal ํŒจํ„ด: ์ตœ๋Œ€ 3๊ฐœ WebDriver ๋™์‹œ ์‹คํ–‰์œผ๋กœ Race Condition ํ•ด๊ฒฐ
  • ๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ: ์ตœ๋Œ€ 900MB๋กœ ์‚ฌ์šฉ๋Ÿ‰ ์ œํ•œ
  • ์„ฑ๋Šฅ ํ–ฅ์ƒ: 3๋ช… ๋™์‹œ ์ฒ˜๋ฆฌ๋กœ 3๋ฐฐ ์„ฑ๋Šฅ ๊ฐœ์„ 

3. CI/CD ์ตœ์ ํ™”

  • GitHub Actions: ์ž๋™ ๋นŒ๋“œ๋กœ ์ฝ”๋“œ ํ’ˆ์งˆ ๊ฒ€์ฆ
  • Docker ๋ฐฐํฌ: ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ์ผ๊ด€๋œ ๋ฐฐํฌ ํ™˜๊ฒฝ

๐Ÿ“‚ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

SSP-server/
โ”œโ”€โ”€ src/main/java/group4/opensource_server/
โ”‚   โ”œโ”€โ”€ auth/              # ์ธ์ฆ ๊ด€๋ จ (JWT, OAuth)
โ”‚   โ”œโ”€โ”€ calendar/          # ์‹œ๊ฐ„ํ‘œ ํฌ๋กค๋ง
โ”‚   โ”‚   โ”œโ”€โ”€ controller/
โ”‚   โ”‚   โ”œโ”€โ”€ service/       # EverytimeCrawler, TimetableParser, WebDriverManager
โ”‚   โ”‚   โ”œโ”€โ”€ domain/        # Entity, Repository, Constants
โ”‚   โ”‚   โ”œโ”€โ”€ dto/
โ”‚   โ”‚   โ””โ”€โ”€ exception/
โ”‚   โ”œโ”€โ”€ quiz/              # ํ€ด์ฆˆ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ
โ”‚   โ”‚   โ”œโ”€โ”€ controller/
โ”‚   โ”‚   โ”œโ”€โ”€ service/       # QuizService, OpenAiClient, QuizPromptBuilder, QuizGrader
โ”‚   โ”‚   โ”œโ”€โ”€ domain/        # Entity, Repository, Constants, Enum
โ”‚   โ”‚   โ”œโ”€โ”€ dto/
โ”‚   โ”‚   โ””โ”€โ”€ exception/
โ”‚   โ”œโ”€โ”€ ocr/               # OCR ๋ฐ PDF ์ฒ˜๋ฆฌ
โ”‚   โ””โ”€โ”€ user/              # ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ
โ”œโ”€โ”€ src/main/resources/
โ”‚   โ””โ”€โ”€ application.yml    # ์„ค์ • ํŒŒ์ผ
โ”œโ”€โ”€ docs/
โ”‚   โ””โ”€โ”€ images/            # ERD, ๊ตฌ์กฐ๋„ ์ด๋ฏธ์ง€
โ”œโ”€โ”€ Dockerfile
โ””โ”€โ”€ build.gradle

๐Ÿ‘ฅ ํŒ€์›

  • Backend Developer: ์ด์žฌ์ค€, ์ด์˜์žฌ, ์œ ์„ฑ์ง„
  • Frontend Developer: ํ™ฉ์ƒํ™˜

About

backend server of SmartSP

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors