-
Coding Quiz Project๋ FastAPI ๊ธฐ๋ฐ์ ๋ฐฑ์๋์ Next.js ๊ธฐ๋ฐ์ ํ๋ก ํธ์๋๋ก ๊ตฌ์ฑ๋ ์ฝ๋ฉ ํด์ฆ ํ๋ซํผ์ ๋๋ค.
-
์ฌ์ฉ์๋ ํ์๊ฐ์ ๋ฐ ๋ก๊ทธ์ธ ํ ํด์ฆ๋ฅผ ํ๊ณ ์ ์๋ฅผ ํ์ธํ ์ ์์ผ๋ฉฐ, JWT ์ธ์ฆ์ ํ์ฉํ์ฌ ๋ณด์์ ๊ฐํํ์์ต๋๋ค.
-
์ด ํ๋ก์ ํธ๋ AWS EC2, RDS๋ฅผ ํ์ฉํ์ฌ ๋ฐฑ์๋์ ํ๋ก ํธ์๋๋ฅผ ๋ถ๋ฆฌ ๋ฐฐํฌํ๋ ๊ตฌ์กฐ๋ก ์ค๊ณ๋์์ต๋๋ค.
๐๏ธ 2025๋ 2์ 28์ผ ~ 2025๋ 3์ 14์ผ (์ฝ 2์ฃผ )
- ์ธ์ด: Python 3.10+
- ์น ํ๋ ์์ํฌ: FastAPI
- ์๋ฒ: Uvicorn
- DB: PostgreSQL (RDS ์ฌ์ฉ) + SQLAlchemy
- ์ธ์ฆ: JWT (PyJWT)
- ํ๊ฒฝ ๋ณ์ ๊ด๋ฆฌ: dotenv
- ๋ฐฐํฌ: Docker, AWS EC2, RDS
- ๊ธฐํ: CORS ์ค์ , API ๋ผ์ฐํ , CSV ๋ฐ์ดํฐ ๊ด๋ฆฌ
- ์ธ์ด: 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
โ
JWT ๊ธฐ๋ฐ ์ธ์ฆ ์์คํ
(Access Token ์ฌ์ฉ)
โ
์ด๋ฉ์ผ/๋น๋ฐ๋ฒํธ๋ฅผ ํตํ ํ์๊ฐ์
๋ฐ ๋ก๊ทธ์ธ
โ
์๋ ๋ก๊ทธ์ธ (LocalStorage ํ์ฉ)
โ
๋ณด์ ๊ฐํ๋ฅผ ์ํ ํด์ฑ๋ ๋น๋ฐ๋ฒํธ ์ ์ฅ (bcrypt)
โ
์ค๋ณต ๊ฐ์
๋ฐฉ์ง (์ด๋ฉ์ผ, ์ฌ์ฉ์๋ช
์ค๋ณต ์ฒดํฌ)
โ
๋ก๊ทธ์ธ๋ ์ฌ์ฉ์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ๋ณดํธ๋ ํ์ด์ง ๊ตฌํ
โ
๋ก๊ทธ์์ (ํ๋ก ํธ์์ ํ ํฐ ์ญ์ )
โ
ํด์ฆ ๋ชฉ๋ก ๋ถ๋ฌ์ค๊ธฐ (์นดํ
๊ณ ๋ฆฌ๋ณ ํด์ฆ ์ ๊ณต ๊ฐ๋ฅ)
โ
์ฌ์ฉ์๊ฐ ์ ๋ต์ ์ ํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ฆ์ ํ์ธ ๊ฐ๋ฅ
โ
ํด์ฆ ์งํ ์ํฉ ๊ด๋ฆฌ (useReducer ํ์ฉ)
โ
์ ์ ๊ณ์ฐ ๋ฐ ์๋ ์ ์ฅ (์ ๋ต๋ฅ ๊ธฐ๋ฐ)
โ
๋ญํน ์์คํ
๊ตฌํ (์นดํ
๊ณ ๋ฆฌ๋ณ ์์ ์ ์ ์ ์ ๋ ฌ)
โ
CSV ๊ธฐ๋ฐ ํด์ฆ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ฐ ์๋ ๊ฐ์ง
โ
JWT ์ธ์ฆ์ ํ์ฉํ ๋ณดํธ๋ 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
# ๋ฐฑ์๋ ํด๋ ์ด๋
cd backend
# ๊ฐ์ํ๊ฒฝ ํ์ฑํ (Windows)
venv\Scripts\activate
# ๊ฐ์ํ๊ฒฝ ํ์ฑํ (Linux/Mac)
source venv/bin/activate
# ํจํค์ง ์ค์น
pip install -r requirements.txt
# ์๋ฒ ์คํ
uvicorn main:app --reload# ํ๋ก ํธ์๋ ํด๋ ์ด๋
cd frontend
# ํจํค์ง ์ค์น
npm install
# ๊ฐ๋ฐ ์๋ฒ ์คํ
npm run dev- ์ฌ์ฉ์๋ช , ์ด๋ฉ์ผ, ๋น๋ฐ๋ฒํธ ์ ๋ ฅ ํ ํ์๊ฐ์
- ์ด๋ฉ์ผ, ์ฌ์ฉ์๋ช
์ค๋ณต ํ์ธ ๋ก์ง ํฌํจ

- ์นดํ ๊ณ ๋ฆฌ ์ ํ ํ ๋ฌธ์ ํ๊ธฐ
- ์ ๋ต ์ ๋ ฅ ํ ํ์ธ ๊ฐ๋ฅ
- ์ ๋ต ๋ง์ถ ๊ฒฝ์ฐ โ
, ์ค๋ต ์ โ ํ์

- ์ด๋ฒ ํ๋ก์ ํธ์์๋ ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ ๊ณผ์ ์์ ๋ฐ์ํ ๋ฌธ์ ํด๊ฒฐ ๊ณผ์ ์ ์์ธํ ๊ธฐ๋กํ์์ต๋๋ค.
- ์์ธํ ๋ด์ฉ์ ๊ฐ๋ฐ ๋ฌธ์ ๋งํฌ์์ ํ์ธํ ์ ์์ต๋๋ค.
- ์ญํ : ํ์คํ ๊ฐ๋ฐ
- ์ฃผ์ ์์
:
- ํ๋ก ํธ์๋ ์ ์ฒด ๊ฐ๋ฐ (Next.js ๊ธฐ๋ฐ UI/UX ์ค๊ณ ๋ฐ ๊ธฐ๋ฅ ๊ตฌํ)
- ๋ฐฑ์๋ ๊ฐ๋ฐ (User, Ranking, Score ๊ด๋ จ API ๋ฐ ์์ )
- ํ๋ก ํธ์๋ AWS EC2 ๋ฐ PM2 ์ค์ ๋ฐ ๋ฐฐํฌ
- CORS, ํ๊ฒฝ๋ณ์ (.env) ๊ด๋ฆฌ ๋ฐ ์ต์ ํ
- GitHub: jelkov
- ์ญํ : ๋ฐฑ์๋ ๊ฐ๋ฐ
- ์ฃผ์ ์์
:
- FastAPI ๊ธฐ๋ฐ ๋ฐฑ์ ๋ ๊ฐ๋ฐ (Quiz API ๊ตฌํ)
- CSV Listener ๊ตฌํ ๋ฐ ๋ฐ์ดํฐ ์๋ ์ ๋ฐ์ดํธ ์์คํ ๊ฐ๋ฐ
- ๋ฐฑ์๋ Docker ์ปจํ ์ด๋ํ ๋ฐ AWS EC2 ๋ฐ RDS ์ฌ์ฉ ๋ฐฐํฌ
- GitHub: jejuorangee



