Skip to content
ย 
ย 

Latest commit

ย 

History

55 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ“Œ Coding Quiz Project

๐Ÿ“ข ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

  • Coding Quiz Project๋Š” FastAPI ๊ธฐ๋ฐ˜์˜ ๋ฐฑ์—”๋“œ์™€ Next.js ๊ธฐ๋ฐ˜์˜ ํ”„๋ก ํŠธ์—”๋“œ๋กœ ๊ตฌ์„ฑ๋œ ์ฝ”๋”ฉ ํ€ด์ฆˆ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ์ž๋Š” ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ ํ›„ ํ€ด์ฆˆ๋ฅผ ํ’€๊ณ  ์ ์ˆ˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, JWT ์ธ์ฆ์„ ํ™œ์šฉํ•˜์—ฌ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ์ด ํ”„๋กœ์ ํŠธ๋Š” AWS EC2, RDS๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐฑ์—”๋“œ์™€ ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ถ„๋ฆฌ ๋ฐฐํฌํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“† ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„

๐Ÿ—“๏ธ 2025๋…„ 2์›” 28์ผ ~ 2025๋…„ 3์›” 14์ผ (์•ฝ 2์ฃผ )


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

๐Ÿ“Œ ๋ฐฑ์—”๋“œ (FastAPI)

  • ์–ธ์–ด: Python 3.10+
  • ์›น ํ”„๋ ˆ์ž„์›Œํฌ: FastAPI
  • ์„œ๋ฒ„: Uvicorn
  • DB: PostgreSQL (RDS ์‚ฌ์šฉ) + SQLAlchemy
  • ์ธ์ฆ: JWT (PyJWT)
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๊ด€๋ฆฌ: dotenv
  • ๋ฐฐํฌ: Docker, AWS EC2, RDS
  • ๊ธฐํƒ€: CORS ์„ค์ •, API ๋ผ์šฐํŒ…, CSV ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ

๐Ÿ“Œ ํ”„๋ก ํŠธ์—”๋“œ (Next.js)

  • ์–ธ์–ด: JavaScript (ES6+)
  • ํ”„๋ ˆ์ž„์›Œํฌ: Next.js 15+
  • UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: Bootstrap, CSS
  • ์ƒํƒœ๊ด€๋ฆฌ: React Context API
  • API ํ†ต์‹ : Fetch API, Axios
  • ๋ฐฐํฌ: PM2, AWS EC2
  • ๊ธฐํƒ€: ESLint, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๊ด€๋ฆฌ

๐Ÿ“Œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

  • ์šด์˜ ์ฒด์ œ: Ubuntu (EC2), Windows (๋กœ์ปฌ ๊ฐœ๋ฐœ)
  • ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €: npm / yarn / pip
  • ๊ฐ€์ƒ ํ™˜๊ฒฝ: venv
  • ๋ฒ„์ „ ๊ด€๋ฆฌ: Git & GitHub
  • ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ: Docker + PM2

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

1๏ธโƒฃ ํšŒ์›๊ฐ€์ž… & ๋กœ๊ทธ์ธ

โœ… JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ (Access Token ์‚ฌ์šฉ)
โœ… ์ด๋ฉ”์ผ/๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ†ตํ•œ ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ
โœ… ์ž๋™ ๋กœ๊ทธ์ธ (LocalStorage ํ™œ์šฉ)
โœ… ๋ณด์•ˆ ๊ฐ•ํ™”๋ฅผ ์œ„ํ•œ ํ•ด์‹ฑ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ €์žฅ (bcrypt)
โœ… ์ค‘๋ณต ๊ฐ€์ž… ๋ฐฉ์ง€ (์ด๋ฉ”์ผ, ์‚ฌ์šฉ์ž๋ช… ์ค‘๋ณต ์ฒดํฌ)
โœ… ๋กœ๊ทธ์ธ๋œ ์‚ฌ์šฉ์ž๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ณดํ˜ธ๋œ ํŽ˜์ด์ง€ ๊ตฌํ˜„
โœ… ๋กœ๊ทธ์•„์›ƒ (ํ”„๋ก ํŠธ์—์„œ ํ† ํฐ ์‚ญ์ œ)

2๏ธโƒฃ ํ€ด์ฆˆ ๊ธฐ๋Šฅ

โœ… ํ€ด์ฆˆ ๋ชฉ๋ก ๋ถˆ๋Ÿฌ์˜ค๊ธฐ (์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ํ€ด์ฆˆ ์ œ๊ณต ๊ฐ€๋Šฅ)
โœ… ์‚ฌ์šฉ์ž๊ฐ€ ์ •๋‹ต์„ ์„ ํƒํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ฆ‰์‹œ ํ™•์ธ ๊ฐ€๋Šฅ
โœ… ํ€ด์ฆˆ ์ง„ํ–‰ ์ƒํ™ฉ ๊ด€๋ฆฌ (useReducer ํ™œ์šฉ)
โœ… ์ ์ˆ˜ ๊ณ„์‚ฐ ๋ฐ ์ž๋™ ์ €์žฅ (์ •๋‹ต๋ฅ  ๊ธฐ๋ฐ˜)
โœ… ๋žญํ‚น ์‹œ์Šคํ…œ ๊ตฌํ˜„ (์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์ƒ์œ„ ์ ์ˆ˜ ์ˆœ ์ •๋ ฌ) โœ… CSV ๊ธฐ๋ฐ˜ ํ€ด์ฆˆ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐ ์ž๋™ ๊ฐ์ง€ โœ… JWT ์ธ์ฆ์„ ํ™œ์šฉํ•œ ๋ณดํ˜ธ๋œ API ๊ตฌํ˜„

3๏ธโƒฃ API ์—ฐ๋™

โœ… FastAPI ๊ธฐ๋ฐ˜ REST API

  • FastAPI๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ณ ์„ฑ๋Šฅ์˜ RESTful API ์„ค๊ณ„
  • auth, quiz, ranking ๋“ฑ ๋„๋ฉ”์ธ๋ณ„ API ์—”๋“œํฌ์ธํŠธ ๊ตฌ์„ฑ
  • uvicorn์„ ์‚ฌ์šฉํ•œ ๋น„๋™๊ธฐ ์„œ๋ฒ„ ์šด์˜

โœ… JWT ์ธ์ฆ ๋ฐ ๋ณด์•ˆ ๊ฐ•ํ™”

  • OAuth2PasswordBearer๋ฅผ ํ™œ์šฉํ•œ ๋ณด์•ˆ ๊ฐ•ํ™”
  • ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ณดํ˜ธ๋œ API ์—”๋“œํฌ์ธํŠธ ์ œ๊ณต
  • /auth/verify-token API๋ฅผ ํ†ตํ•œ ํ† ํฐ ์œ ํšจ์„ฑ ๊ฒ€์ฆ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • /auth/logout ๋กœ๊ทธ์•„์›ƒ ์‹œ JWT ํ† ํฐ ์‚ญ์ œ

โœ… ํ€ด์ฆˆ ๋ฐ์ดํ„ฐ ๋™์  ๊ด€๋ฆฌ

  • csv_listener.py๋ฅผ ํ™œ์šฉํ•˜์—ฌ CSV ํŒŒ์ผ ๋ณ€๊ฒฝ ๊ฐ์ง€ ๋ฐ ์ž๋™ ์—…๋ฐ์ดํŠธ
  • DB๊ฐ€ ๋น„์–ด ์žˆ์„ ๊ฒฝ์šฐ CSV ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™ ๋กœ๋“œ
  • PostgreSQL & SQLite ์ง€์› (ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๊ธฐ๋ฐ˜ ์„ค์ •)

โœ… ์นดํ…Œ๊ณ ๋ฆฌ ๊ธฐ๋ฐ˜ ํ€ด์ฆˆ ํ•„ํ„ฐ๋ง

  • /quiz/get API๋ฅผ ํ†ตํ•ด ๋žœ๋ค ํ€ด์ฆˆ ๋กœ๋“œ ๋ฐ ์นดํ…Œ๊ณ ๋ฆฌ ํ•„ํ„ฐ ์ ์šฉ ๊ฐ€๋Šฅ
  • /quiz/categories API๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์นดํ…Œ๊ณ ๋ฆฌ ์กฐํšŒ ๊ฐ€๋Šฅ

โœ… ์ ์ˆ˜ ์ €์žฅ ๋ฐ ๋žญํ‚น ์กฐํšŒ

  • /quiz/submit API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ ์ˆ˜ ์ €์žฅ (๋ฎ์–ด์“ฐ๊ธฐ ๋ฐฉ์‹ ์ง€์›)
  • /ranking/get API๋ฅผ ํ†ตํ•ด ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ TOP 10 ๋žญํ‚น ์กฐํšŒ

๐ŸŒ ๋ฐฐํฌ ๊ฐœ์š”

๋ฐฐํฌ ์ฃผ์†Œ: Coding Quiz Project

์ด ํ”„๋กœ์ ํŠธ๋Š” AWS ํ™˜๊ฒฝ์—์„œ ๋ฐฑ์—”๋“œ์™€ ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ถ„๋ฆฌ ๋ฐฐํฌํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์šด์˜๋ฉ๋‹ˆ๋‹ค.

  • ๋ฐฑ์—”๋“œ (FastAPI)

    • EC2 (Ubuntu) + Docker + PostgreSQL (RDS)
    • JWT ์ธ์ฆ ๋ฐ API ๋ณดํ˜ธ
    • CORS ๋ฌธ์ œ ํ•ด๊ฒฐ ์ ์šฉ
    • .env ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๊ธฐ๋ฐ˜ ์„ค์ •
  • ํ”„๋ก ํŠธ์—”๋“œ (Next.js)

    • EC2 (Ubuntu) + PM2
    • NEXT_PUBLIC_API_URL์„ ํ†ตํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
    • pm2 restart --update-env ๋ช…๋ น์–ด ์ ์šฉํ•˜์—ฌ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋ฐ˜์˜

๐Ÿ“ฆ ํ”„๋กœ์ ํŠธ ํด๋” ๊ตฌ์กฐ

๐Ÿ“ฆ CodingQuizProject
โ”œโ”€โ”€ ๐Ÿ“‚ backend
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ app
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ core
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ config.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ database.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ security.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ csv_listener.py
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ models
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ user.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ quiz.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ score.py
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ routes
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ auth.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ quiz.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ranking.py
โ”‚   โ”œโ”€โ”€ Dockerfile
โ”‚   โ”œโ”€โ”€ main.py
โ”‚   โ”œโ”€โ”€ requirements.txt
โ”‚   โ”œโ”€โ”€ .env
โ”‚
โ”œโ”€โ”€ ๐Ÿ“‚ frontend
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ api
โ”‚   โ”‚   โ”œโ”€โ”€ auth.js
โ”‚   โ”‚   โ”œโ”€โ”€ quiz.js
โ”‚   โ”‚   โ”œโ”€โ”€ ranking.js
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ app
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ login
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ signup
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ quiz
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ result
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ components
โ”‚   โ”‚   โ”œโ”€โ”€ navbar.js
โ”‚   โ”‚   โ”œโ”€โ”€ quizcard.js
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‚ context
โ”‚   โ”‚   โ”œโ”€โ”€ AlertContext.js
โ”‚   โ”œโ”€โ”€ next.config.mjs
โ”‚   โ”œโ”€โ”€ package.json
โ”‚   โ”œโ”€โ”€ .env.local
โ”‚   โ”œโ”€โ”€ README.md

๐Ÿš€ ๋กœ์ปฌ ์‹คํ–‰ ๋ฐฉ๋ฒ•

1๏ธโƒฃ ๋ฐฑ์—”๋“œ ์‹คํ–‰

# ๋ฐฑ์—”๋“œ ํด๋” ์ด๋™
cd backend

# ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™” (Windows)
venv\Scripts\activate

# ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™” (Linux/Mac)
source venv/bin/activate

# ํŒจํ‚ค์ง€ ์„ค์น˜
pip install -r requirements.txt

# ์„œ๋ฒ„ ์‹คํ–‰
uvicorn main:app --reload

2๏ธโƒฃ ํ”„๋ก ํŠธ์—”๋“œ ์‹คํ–‰

# ํ”„๋ก ํŠธ์—”๋“œ ํด๋” ์ด๋™
cd frontend

# ํŒจํ‚ค์ง€ ์„ค์น˜
npm install

# ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰
npm run dev

๐Ÿ“ธ ํ”„๋กœ์ ํŠธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ

๋ฉ”์ธ ํŽ˜์ด์ง€

  • NavBar ๊ตฌํ˜„ (๋กœ๊ทธ์ธ์— ๋”ฐ๋ฅธ ๋™์  ๊ตฌํ˜„) ๋ฉ”์ธ ํŽ˜์ด์ง€

๋กœ๊ทธ์ธ ํŽ˜์ด์ง€

  • ์ด๋ฉ”์ผ & ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ ํ›„ ๋กœ๊ทธ์ธ
  • JWT ์ธ์ฆ์„ ํ†ตํ•œ ์ž๋™ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ์ง€์›
    ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€

ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€

  • ์‚ฌ์šฉ์ž๋ช…, ์ด๋ฉ”์ผ, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ ํ›„ ํšŒ์›๊ฐ€์ž…
  • ์ด๋ฉ”์ผ, ์‚ฌ์šฉ์ž๋ช… ์ค‘๋ณต ํ™•์ธ ๋กœ์ง ํฌํ•จ
    ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€

ํ€ด์ฆˆ ํŽ˜์ด์ง€

  • ์นดํ…Œ๊ณ ๋ฆฌ ์„ ํƒ ํ›„ ๋ฌธ์ œ ํ’€๊ธฐ
  • ์ •๋‹ต ์ž…๋ ฅ ํ›„ ํ™•์ธ ๊ฐ€๋Šฅ
  • ์ •๋‹ต ๋งž์ถœ ๊ฒฝ์šฐ โœ…, ์˜ค๋‹ต ์‹œ โŒ ํ‘œ์‹œ
    ํ€ด์ฆˆ ํŽ˜์ด์ง€

๋žญํ‚น ํŽ˜์ด์ง€

  • ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ TOP 10 ๋žญํ‚น ํ™•์ธ ๊ฐ€๋Šฅ
  • ์‚ฌ์šฉ์ž์˜ ํ€ด์ฆˆ ์ ์ˆ˜ ์ €์žฅ ๋ฐ ๊ฐฑ์‹ 
    ๋žญํ‚น ํŽ˜์ด์ง€

๊ฒฐ๊ณผ ํŽ˜์ด์ง€

  • ์‚ฌ์šฉ์ž์˜ ์ •๋‹ต ๊ฐœ์ˆ˜, ์ •๋‹ต๋ฅ  ํ‘œ์‹œ
  • ์˜ค๋‹ต ๋‚ด์—ญ ํ™•์ธ ๊ธฐ๋Šฅ
    ๊ฒฐ๊ณผ ํŽ˜์ด์ง€

๐Ÿ“œ ๊ฐœ๋ฐœ ๋กœ๊ทธ & ๋ฌธ์„œ ์ •๋ฆฌ

  • ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •์„ ์ƒ์„ธํžˆ ๊ธฐ๋กํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐœ๋ฐœ ๋ฌธ์„œ ๋งํฌ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’Œ ๊ฐœ๋ฐœ์ž ์ •๋ณด

๐Ÿ‘จโ€๐Ÿ’ป ์•ˆ์ œํ˜ธ (JELKOV)

  • ์—ญํ• : ํ’€์Šคํƒ ๊ฐœ๋ฐœ
  • ์ฃผ์š” ์ž‘์—…:
    • ํ”„๋ก ํŠธ์—”๋“œ ์ „์ฒด ๊ฐœ๋ฐœ (Next.js ๊ธฐ๋ฐ˜ UI/UX ์„ค๊ณ„ ๋ฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„)
    • ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ (User, Ranking, Score ๊ด€๋ จ API ๋ฐ ์ˆ˜์ •)
    • ํ”„๋ก ํŠธ์—”๋“œ AWS EC2 ๋ฐ PM2 ์„ค์ • ๋ฐ ๋ฐฐํฌ
    • CORS, ํ™˜๊ฒฝ๋ณ€์ˆ˜ (.env) ๊ด€๋ฆฌ ๋ฐ ์ตœ์ ํ™”
  • GitHub: jelkov

๐Ÿ‘จโ€๐Ÿ’ป ์žฅ์ค€ํฌ (jejuorangee)

  • ์—ญํ• : ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ
  • ์ฃผ์š” ์ž‘์—…:
    • FastAPI ๊ธฐ๋ฐ˜ ๋ฐฑ์—…๋“œ ๊ฐœ๋ฐœ (Quiz API ๊ตฌํ˜„)
    • CSV Listener ๊ตฌํ˜„ ๋ฐ ๋ฐ์ดํ„ฐ ์ž๋™ ์—…๋ฐ์ดํŠธ ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ
    • ๋ฐฑ์—”๋“œ Docker ์ปจํ…Œ์ด๋„ˆํ™” ๋ฐ AWS EC2 ๋ฐ RDS ์‚ฌ์šฉ ๋ฐฐํฌ
  • GitHub: jejuorangee

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages