์ด ํ๋ก์ ํธ๋ ์ค์๊ฐ ์ฑํ ์ ์ํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก, Node.js, Next.js, Redis, MongoDB๋ฅผ ํ์ฉํ์ฌ ๊ตฌํ๋์์ต๋๋ค.
- ์ด๋ฉ์ผ ๊ธฐ๋ฐ์ ์ฌ์ฉ์ ์ธ์ฆ ์์คํ
- ์ธ์ ๊ด๋ฆฌ ๋ฐ ์ค๋ณต ๋ก๊ทธ์ธ ์ฒ๋ฆฌ
- ํ๋กํ ์ด๋ฏธ์ง ์ ๋ก๋ ๋ฐ ๊ด๋ฆฌ
- ๋น๋ฐ๋ฒํธ ์ํธํ ๋ฐ ๋ณด์ ์ฒ๋ฆฌ
- ์ค์๊ฐ ์ฑํ (Socket.IO)
- ๋งํฌ๋ค์ด ํ์ ์ง์
- ์ด๋ชจ์ง ๋ฆฌ์ก์
- ๋ฉ์ ๊ธฐ๋ฅ (@์ฌ์ฉ์)
- AI ์ฑ๋ด ์ฐ๋ (@wayneAI, @consultingAI)
- ๋ฉ์์ง ์ฝ์ ์ํ ํ์
- ํ์ผ ์ฒจ๋ถ ๋ฐ ๊ณต์ ๊ธฐ๋ฅ
- ๋น๋ฐ๋ฒํธ ์ค์ ๊ฐ๋ฅํ ์ฑํ ๋ฐฉ ์์ฑ
- ์ฐธ์ฌ์ ๊ด๋ฆฌ
- ์ค์๊ฐ ์ฐธ์ฌ์ ์ํ ํ์
- ์ด๋ฏธ์ง, ๋น๋์ค, ์ค๋์ค, PDF ๋ฑ ๋ค์ํ ํ์ผ ํ์ ์ง์
- ํ์ผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ธฐ๋ฅ
- ์์ ํ ํ์ผ ์ ๋ก๋ ๋ฐ ๋ค์ด๋ก๋
- ํ์ผ ํ์๋ณ ํฌ๊ธฐ ์ ํ
# Node.js ์ค์น (v18 ์ด์)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
# MongoDB ์ค์น (v7.0)
sudo apt-get install -y mongodb
# Redis ์ค์น
sudo apt-get install -y redis-server
# PM2 ์ ์ญ ์ค์น
npm install -g pm2
# ํ๋ก์ ํธ ํด๋ก
git clone [repository-url]
cd bootcampchat
# ๋ฃจํธ ๋๋ ํ ๋ฆฌ์์ ๋ชจ๋ ํจํค์ง ์ค์น
npm install # concurrently ์ค์น
npm run setup # frontend์ backend ํจํค์ง ์ค์น
backend/.env
MONGO_URI=mongodb://localhost:27017/bootcampchat
JWT_SECRET=your_jwt_secret
REDIS_HOST=localhost
REDIS_PORT=6379
OPENAI_API_KEY=your_openai_key
ENCRYPTION_KEY=your_encryption_key
PASSWORD_SALT=your_password_salt
frontend/.env.local
NEXT_PUBLIC_API_URL=http://localhost:5000
NEXT_PUBLIC_ENCRYPTION_KEY=your_encryption_key
NEXT_PUBLIC_PASSWORD_SALT=your_password_salt
backend/.env
MONGO_URI=mongodb://0.0.0.0:27017/bootcampchat
JWT_SECRET=your_jwt_secret
REDIS_HOST=0.0.0.0
REDIS_PORT=6379
OPENAI_API_KEY=your_openai_key
ENCRYPTION_KEY=your_encryption_key
PASSWORD_SALT=your_password_salt
NEXT_PUBLIC_API_URL=https://bootcampchat-be.run.goorm.site
frontend/.env.local
NEXT_PUBLIC_API_URL=https://bootcampchat-be.run.goorm.site
NEXT_PUBLIC_ENCRYPTION_KEY=your_encryption_key
NEXT_PUBLIC_PASSWORD_SALT=your_password_salt
backend/.env
MONGO_URI=mongodb://your-mongodb-uri
JWT_SECRET=your_jwt_secret
REDIS_HOST=your-redis-host
REDIS_PORT=6379
OPENAI_API_KEY=your_openai_key
ENCRYPTION_KEY=your_encryption_key
PASSWORD_SALT=your_password_salt
NEXT_PUBLIC_API_URL=https://api.your-domain.com
frontend/.env.local
NEXT_PUBLIC_API_URL=https://api.your-domain.com
NEXT_PUBLIC_ENCRYPTION_KEY=your_encryption_key
NEXT_PUBLIC_PASSWORD_SALT=your_password_salt
# ๊ฐ๋ฐ ๋ชจ๋๋ก ์คํ (frontend์ backend ๋์ ์คํ)
npm run dev
# ํ๋ก๋์
๋ชจ๋๋ก ์คํ
npm run build # frontend ๋น๋
npm start # frontend์ backend ๋์ ์คํ
์ฐธ๊ณ : MongoDB์ Redis๊ฐ ์คํ ์ค์ด์ด์ผ ํฉ๋๋ค.
- MongoDB:
mongod --dbpath ~/data/db
- Redis:
redis-server
http://localhost:3000
- ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์คํ ์ ์๋์ผ๋ก ํด๋น ํฌํธ๋ก ์ ์
- ํ๊ฒฝ ๋ณ์ ์ค์ :
NEXT_PUBLIC_API_URL=http://localhost:5000
- ์๋จ ๋ฉ๋ด์ "ํ๋ก์ ํธ" โ "์คํ URL๊ณผ ํฌํธ" ํด๋ฆญ
- ์๋์ผ๋ก ์์ฑ๋ URL ํ์ธ (์:
https://chat.goorm-kdt-001.goorm.team
) - ํฐ๋ฏธ๋์์ ์คํ:
npm run dev
- EC2 ์ธ์คํด์ค์ ํผ๋ธ๋ฆญ IP๋ ๋๋ฉ์ธ ์ฌ์ฉ
https://your-domain.com http://your-ec2-public-ip
- EC2 ๋ณด์๊ทธ๋ฃน ์ค์ :
- ์ธ๋ฐ์ด๋ ๊ท์น: TCP 3000(ํ๋ก ํธ์๋), 5000(๋ฐฑ์๋) ํฌํธ ๊ฐ๋ฐฉ
- HTTPS ์ฌ์ฉ ์ 443 ํฌํธ ๊ฐ๋ฐฉ
-
๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ
- Node.js, MongoDB, Redis๊ฐ ๋ก์ปฌ์ ์ค์น๋์ด ์์ด์ผ ํจ
- ๋ฐฉํ๋ฒฝ ์ค์ ์์ ํด๋น ํฌํธ ํ์ฉ ํ์
-
goormIDE
- ์ปจํ ์ด๋ ์์ฑ ์ Node.js ํ ํ๋ฆฟ ์ ํ
- ์ธ๋ถ ์ ์์ ์ํ ํฌํธ ์ค์ ํ์
- CORS ์ค์ ํ์ธ
-
AWS ๋ฐฐํฌ
- SSL ์ธ์ฆ์ ์ค์ ๊ถ์ฅ
- ๋ก๋๋ฐธ๋ฐ์ ์ฌ์ฉ ์ ์น์์ผ ์ค์ ํ์
- MongoDB Atlas ์ฌ์ฉ ๊ถ์ฅ
- Redis ElastiCache ๊ณ ๋ ค
- ์๋น์ค์ ์ ์
- ํ์๊ฐ์ ๋ฒํผ ํด๋ฆญ
- ์ด๋ฆ, ์ด๋ฉ์ผ, ๋น๋ฐ๋ฒํธ ์ ๋ ฅํ์ฌ ๊ณ์ ์์ฑ
- ์์ฑ๋ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ
- ์๋จ ๋ค๋น๊ฒ์ด์ ๋ฐ์ ํ๋กํ ์์ด์ฝ ํด๋ฆญ
- ํ๋กํ ์ค์ ๋ฉ๋ด ์ ํ
- ํ๋กํ ์ด๋ฏธ์ง ์ ๋ก๋ ๋ฐ ์ด๋ฆ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ํ์์ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ์ฑํ ๋ฐฉ ๋ชฉ๋ก์์ '์ ์ฑํ ๋ฐฉ' ๋ฒํผ ํด๋ฆญ
- ์ฑํ ๋ฐฉ ์ด๋ฆ ์ ๋ ฅ (ํ์)
- ํ์์ ๋น๋ฐ๋ฒํธ ์ค์ (์ ํ)
- ์ฑํ ๋ฐฉ ์์ฑ ํ ์๋์ผ๋ก ์ ์ฅ
- ๊ธฐ์กด ์ฑํ ๋ฐฉ ์ฐธ์ฌ์ ๋น๋ฐ๋ฒํธ๊ฐ ์๋ ๊ฒฝ์ฐ ์ ๋ ฅ ํ์
- ํ๋จ ์ ๋ ฅ์ฐฝ์ ๋ฉ์์ง ์ ๋ ฅ ํ Enter ํค๋ก ์ ์ก
- Shift + Enter๋ก ์ค๋ฐ๊ฟ ๊ฐ๋ฅ
- ๊ตต๊ฒ:
**ํ ์คํธ**
๋๋ Ctrl+B - ๊ธฐ์ธ์:
*ํ ์คํธ*
๋๋ Ctrl+I - ์ฝ๋ ๋ธ๋ก: ```์ธ์ด๋ช ๋๋ Ctrl+Shift+C
- ๋งํฌ:
[ํ ์คํธ](URL)
๋๋ Ctrl+K
- '@' ์ ๋ ฅ ํ ์ฌ์ฉ์ ์ด๋ฆ ์ ๋ ฅ
- AI ์ฑ๋ด ๋ฉ์ : @wayneAI ๋๋ @consultingAI
- ๋ฐฉํฅํค๋ก ๋ฉ์ ํ ์ฌ์ฉ์ ์ ํ
- ํด๋ฆฝ ์์ด์ฝ ํด๋ฆญ ๋๋ ํ์ผ ๋๋๊ทธ ์ค ๋๋กญ
- ์ง์ ํ์:
- ์ด๋ฏธ์ง: jpg, jpeg, png, gif, webp (์ต๋ 10MB)
- ๋น๋์ค: mp4, webm, mov (์ต๋ 50MB)
- ์ค๋์ค: mp3, wav, ogg (์ต๋ 20MB)
- ๋ฌธ์: pdf (์ต๋ 20MB)
- ์ด๋ชจ์ง ๋ฒํผ ํด๋ฆญํ์ฌ ์ด๋ชจ์ง ์ ํ
- ๋ฉ์์ง์ ๋ง์ฐ์ค ์ค๋ฒ ์ ๋ฆฌ์ก์ ์ถ๊ฐ ๊ฐ๋ฅ
- ์ฑํ ๋ฐฉ ์ฐธ์ฌ์ ๋ชฉ๋ก ํ์ธ
- ์ด์ ๋ฉ์์ง ์คํฌ๋กคํ์ฌ ๋ก๋
- ํ์ผ ๋ฐ ๋ฏธ๋์ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ
- ๋ฉ์์ง ์ฝ์ ์ํ ํ์ธ
- ์ฃผ๊ธฐ์ ์ธ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ๊ถ์ฅ
- ๋ฏผ๊ฐํ ์ ๋ณด๋ ํ์ผ๋ก ๊ณต์ ํ์ง ์๋๋ก ์ฃผ์
- ๋ก๊ทธ์์ ์ ๋ฐ๋์ '๋ก๊ทธ์์' ๋ฒํผ ์ฌ์ฉ
์ฑํ ์ด ์ฐ๊ฒฐ๋์ง ์๋ ๊ฒฝ์ฐ
- ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ํ ํ์ธ
- ํ์ด์ง ์๋ก๊ณ ์นจ
- ์ฌ๋ก๊ทธ์ธ ์๋
ํ์ผ ์ ๋ก๋ ์คํจ ์
- ํ์ผ ํฌ๊ธฐ ๋ฐ ํ์ ํ์ธ
- ๋คํธ์ํฌ ์ํ ํ์ธ
- ํ์ด์ง ์๋ก๊ณ ์นจ ํ ์ฌ์๋
์ฑ๋ฅ ์ต์ ํ ํ
- ๋์ฉ๋ ํ์ผ์ ์์ถํ์ฌ ์ ๋ก๋
- ์ค๋๋ ์ฑํ ๋ฐฉ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๋ฆฌ
- ๋ถํ์ํ ์ฑํ ๋ฐฉ์ ๋๊ฐ๊ธฐ ์ฒ๋ฆฌ
- Next.js
- React
- Socket.IO Client
- Vapor Components (@goorm-dev/vapor)
- Markdown ๋ ๋๋ง
- ๋ชจ๋ฐ์ผ ์ต์ ํ UI
- Node.js
- Express.js
- Socket.IO
- MongoDB & Mongoose
- Redis
- JWT ๊ธฐ๋ฐ ์ธ์ฆ
- MongoDB: ์ฌ์ฉ์ ์ ๋ณด, ์ฑํ ๋ฐฉ, ๋ฉ์์ง ์ ์ฅ
- Redis: ์ธ์ ๊ด๋ฆฌ, ์ค์๊ฐ ์ํ ๊ด๋ฆฌ
- PM2: ํ๋ก์ธ์ค ๊ด๋ฆฌ
- Docker ์ง์
- ํ๊ฒฝ ๋ณ์ ๊ธฐ๋ฐ ์ค์