์ค์๊ฐ ์ฑํ ํ๋ซํผ. ์ ์ฅ์๋ ๋ฐฑ์๋์ ํ๋ก ํธ์๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
.
โโโ backend/ Spring Boot 4 + Kotlin (REST API, JWT ์ธ์ฆ, MySQL/Redis)
โโโ frontend/ Vue 3 + Vite SPA
- JDK 17
- Node.js 18+ (LTS ๊ถ์ฅ)
- Docker / Docker Compose (MySQL ยท Redis ๊ธฐ๋์ฉ)
Spring Boot 4 + Kotlin. :8080์์ ๋์ํ๋ฉฐ ์ธ์ฆ/ํ์ REST API๋ฅผ ์ ๊ณตํฉ๋๋ค.
cd backend
cp .env.example .env # ํ์ ์ ๊ฐ ์์
docker compose up -ddocker-compose.yml์ด MySQL 8.4(:3306)์ Redis 7.4(:6379)๋ฅผ ๋์๋๋ค.
cd backend
./gradlew bootRun๋น๋ ์ฐ์ถ๋ฌผ(jar)๋ก ์คํํ๋ ค๋ฉด:
cd backend
./gradlew build
java -jar build/libs/realtime-chat-platform-0.0.1-SNAPSHOT.jarapplication.yaml์ ์๋ ๊ฐ์ ํ๊ฒฝ๋ณ์๋ก ์ค๋ฒ๋ผ์ด๋ํ ์ ์์ต๋๋ค(๊ดํธ๋ ๊ธฐ๋ณธ๊ฐ).
| ๋ณ์ | ์ค๋ช | ๊ธฐ๋ณธ๊ฐ |
|---|---|---|
MYSQL_HOST / MYSQL_PORT |
MySQL ์ ์ | localhost / 3306 |
MYSQL_DATABASE |
DB ์ด๋ฆ | rtchat |
MYSQL_USER / MYSQL_PASSWORD |
DB ๊ณ์ | rtchat / rtchatpassword |
REDIS_HOST / REDIS_PORT |
Redis ์ ์ | localhost / 6379 |
JWT_SECRET_KEY |
JWT ์๋ช ํค | (๊ฐ๋ฐ์ฉ ๊ธฐ๋ณธ๊ฐ ๋ด์ฅ) |
JWT_EXPIRATION |
ํ ํฐ ๋ง๋ฃ(๋ถ) | 3000 |
MySQL/Redis ๊ด๋ จ ๊ธฐ๋ณธ๊ฐ์
backend/.env.example๋ฐdocker-compose.yml๊ณผ ๋์ผํฉ๋๋ค.
| ๋ฉ์๋ | ๊ฒฝ๋ก | ์ค๋ช |
|---|---|---|
POST |
/member/sign-up |
ํ์๊ฐ์ |
POST |
/member/sign-in |
๋ก๊ทธ์ธ โ JWT ํ ํฐ ๋ฐ๊ธ |
GET |
/member/list |
ํ์ ๋ชฉ๋ก (์ธ์ฆ ํ์, Authorization: Bearer <token>) |
CORS๋ http://localhost:3000(ํ๋ก ํธ์๋ dev ์๋ฒ)๋ฅผ ํ์ฉํฉ๋๋ค.
Vue 3 + Vite SPA. :3000์์ ๋์ํ๋ฉฐ ๋ฐฑ์๋(:8080) API์ ์ฐ๋๋ฉ๋๋ค.
cd frontend
npm install
npm run devํ๋ก๋์ ๋น๋ / ๋ฏธ๋ฆฌ๋ณด๊ธฐ:
cd frontend
npm run build # dist/ ์์ฑ
npm run previewfrontend/.env
VITE_API_BASE_URL=http://localhost:8080
/sign-upํ์๊ฐ์ โPOST /member/sign-up/sign-in๋ก๊ทธ์ธ โPOST /member/sign-in, ๋ฐ์token์localStorage์ ์ ์ฅ/membersํ์๋ชฉ๋ก โGET /member/list(axios ์ธํฐ์ ํฐ๊ฐAuthorization: Bearer <token>์๋ ์ฒจ๋ถ)
๋ ์์ธํ ๋ด์ฉ์ frontend/README.md ์ฐธ๊ณ .
# 1) ๋ฐฑ์๋ ์ธํ๋ผ
cd backend && cp .env.example .env && docker compose up -d
# 2) ๋ฐฑ์๋ (์ ํฐ๋ฏธ๋)
cd backend && ./gradlew bootRun
# 3) ํ๋ก ํธ์๋ (์ ํฐ๋ฏธ๋)
cd frontend && npm install && npm run dev์ดํ http://localhost:3000 ์ ์.