Skip to content

imleokkkk/ktb-BootcampChat

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

2 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

์ด ํ”„๋กœ์ ํŠธ๋Š” ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์„ ์œ„ํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ, Node.js, Next.js, Redis, MongoDB๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

์ธ์ฆ ๋ฐ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ

  • ์ด๋ฉ”์ผ ๊ธฐ๋ฐ˜์˜ ์‚ฌ์šฉ์ž ์ธ์ฆ ์‹œ์Šคํ…œ
  • ์„ธ์…˜ ๊ด€๋ฆฌ ๋ฐ ์ค‘๋ณต ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ
  • ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๋ฐ ๊ด€๋ฆฌ
  • ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ๋ฐ ๋ณด์•ˆ ์ฒ˜๋ฆฌ

์ฑ„ํŒ… ๊ธฐ๋Šฅ

  • ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… (Socket.IO)
  • ๋งˆํฌ๋‹ค์šด ํ˜•์‹ ์ง€์›
  • ์ด๋ชจ์ง€ ๋ฆฌ์•ก์…˜
  • ๋ฉ˜์…˜ ๊ธฐ๋Šฅ (@์‚ฌ์šฉ์ž)
  • AI ์ฑ—๋ด‡ ์—ฐ๋™ (@wayneAI, @consultingAI)
  • ๋ฉ”์‹œ์ง€ ์ฝ์Œ ์ƒํƒœ ํ‘œ์‹œ
  • ํŒŒ์ผ ์ฒจ๋ถ€ ๋ฐ ๊ณต์œ  ๊ธฐ๋Šฅ

์ฑ„ํŒ…๋ฐฉ ๊ด€๋ฆฌ

  • ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ • ๊ฐ€๋Šฅํ•œ ์ฑ„ํŒ…๋ฐฉ ์ƒ์„ฑ
  • ์ฐธ์—ฌ์ž ๊ด€๋ฆฌ
  • ์‹ค์‹œ๊ฐ„ ์ฐธ์—ฌ์ž ์ƒํƒœ ํ‘œ์‹œ

ํŒŒ์ผ ์ฒ˜๋ฆฌ

  • ์ด๋ฏธ์ง€, ๋น„๋””์˜ค, ์˜ค๋””์˜ค, PDF ๋“ฑ ๋‹ค์–‘ํ•œ ํŒŒ์ผ ํ˜•์‹ ์ง€์›
  • ํŒŒ์ผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ธฐ๋Šฅ
  • ์•ˆ์ „ํ•œ ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ๋‹ค์šด๋กœ๋“œ
  • ํŒŒ์ผ ํ˜•์‹๋ณ„ ํฌ๊ธฐ ์ œํ•œ

์„ค์น˜ ๋ฐ ์‹คํ–‰ ๊ฐ€์ด๋“œ

1. ์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ ์„ค์น˜

# 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

2. ํ”„๋กœ์ ํŠธ ํด๋ก  ๋ฐ ํŒจํ‚ค์ง€ ์„ค์น˜

# ํ”„๋กœ์ ํŠธ ํด๋ก 
git clone [repository-url]
cd bootcampchat

# ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋ชจ๋“  ํŒจํ‚ค์ง€ ์„ค์น˜
npm install  # concurrently ์„ค์น˜
npm run setup  # frontend์™€ backend ํŒจํ‚ค์ง€ ์„ค์น˜

3. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

๋กœ์ปฌ ํ™˜๊ฒฝ ์„ค์ •

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

goormIDE ํ™˜๊ฒฝ ์„ค์ •

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

AWS ํ™˜๊ฒฝ ์„ค์ •

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

4. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰

# ๊ฐœ๋ฐœ ๋ชจ๋“œ๋กœ ์‹คํ–‰ (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

goormIDE

  1. ์ƒ๋‹จ ๋ฉ”๋‰ด์˜ "ํ”„๋กœ์ ํŠธ" โ†’ "์‹คํ–‰ URL๊ณผ ํฌํŠธ" ํด๋ฆญ
  2. ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ URL ํ™•์ธ (์˜ˆ: https://chat.goorm-kdt-001.goorm.team)
  3. ํ„ฐ๋ฏธ๋„์—์„œ ์‹คํ–‰:
    npm run dev

AWS ๋ฐฐํฌ

  1. EC2 ์ธ์Šคํ„ด์Šค์˜ ํผ๋ธ”๋ฆญ IP๋‚˜ ๋„๋ฉ”์ธ ์‚ฌ์šฉ
    https://your-domain.com
    http://your-ec2-public-ip
    
  2. EC2 ๋ณด์•ˆ๊ทธ๋ฃน ์„ค์ •:
    • ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™: TCP 3000(ํ”„๋ก ํŠธ์—”๋“œ), 5000(๋ฐฑ์—”๋“œ) ํฌํŠธ ๊ฐœ๋ฐฉ
    • HTTPS ์‚ฌ์šฉ ์‹œ 443 ํฌํŠธ ๊ฐœ๋ฐฉ

์ฃผ์˜์‚ฌํ•ญ

  1. ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

    • Node.js, MongoDB, Redis๊ฐ€ ๋กœ์ปฌ์— ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•จ
    • ๋ฐฉํ™”๋ฒฝ ์„ค์ •์—์„œ ํ•ด๋‹น ํฌํŠธ ํ—ˆ์šฉ ํ•„์š”
  2. goormIDE

    • ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ์‹œ Node.js ํ…œํ”Œ๋ฆฟ ์„ ํƒ
    • ์™ธ๋ถ€ ์ ‘์†์„ ์œ„ํ•œ ํฌํŠธ ์„ค์ • ํ•„์š”
    • CORS ์„ค์ • ํ™•์ธ
  3. AWS ๋ฐฐํฌ

    • SSL ์ธ์ฆ์„œ ์„ค์ • ๊ถŒ์žฅ
    • ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ์‚ฌ์šฉ ์‹œ ์›น์†Œ์ผ“ ์„ค์ • ํ•„์š”
    • MongoDB Atlas ์‚ฌ์šฉ ๊ถŒ์žฅ
    • Redis ElastiCache ๊ณ ๋ ค

์‚ฌ์šฉ ๋ฐฉ๋ฒ• ๊ฐ€์ด๋“œ

1. ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ

  1. ์„œ๋น„์Šค์— ์ ‘์†
  2. ํšŒ์›๊ฐ€์ž… ๋ฒ„ํŠผ ํด๋ฆญ
  3. ์ด๋ฆ„, ์ด๋ฉ”์ผ, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅํ•˜์—ฌ ๊ณ„์ • ์ƒ์„ฑ
  4. ์ƒ์„ฑ๋œ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ

2. ํ”„๋กœํ•„ ์„ค์ •

  1. ์ƒ๋‹จ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”์˜ ํ”„๋กœํ•„ ์•„์ด์ฝ˜ ํด๋ฆญ
  2. ํ”„๋กœํ•„ ์„ค์ • ๋ฉ”๋‰ด ์„ ํƒ
  3. ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๋ฐ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
  4. ํ•„์š”์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

3. ์ฑ„ํŒ…๋ฐฉ ์ƒ์„ฑ ๋ฐ ์ฐธ์—ฌ

  1. ์ฑ„ํŒ…๋ฐฉ ๋ชฉ๋ก์—์„œ '์ƒˆ ์ฑ„ํŒ…๋ฐฉ' ๋ฒ„ํŠผ ํด๋ฆญ
  2. ์ฑ„ํŒ…๋ฐฉ ์ด๋ฆ„ ์ž…๋ ฅ (ํ•„์ˆ˜)
  3. ํ•„์š”์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ • (์„ ํƒ)
  4. ์ฑ„ํŒ…๋ฐฉ ์ƒ์„ฑ ํ›„ ์ž๋™์œผ๋กœ ์ž…์žฅ
  5. ๊ธฐ์กด ์ฑ„ํŒ…๋ฐฉ ์ฐธ์—ฌ์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ž…๋ ฅ ํ•„์š”

4. ์ฑ„ํŒ… ๊ธฐ๋Šฅ ํ™œ์šฉ

๊ธฐ๋ณธ ์ฑ„ํŒ…

  • ํ•˜๋‹จ ์ž…๋ ฅ์ฐฝ์— ๋ฉ”์‹œ์ง€ ์ž…๋ ฅ ํ›„ Enter ํ‚ค๋กœ ์ „์†ก
  • Shift + Enter๋กœ ์ค„๋ฐ”๊ฟˆ ๊ฐ€๋Šฅ

๋งˆํฌ๋‹ค์šด ์‚ฌ์šฉ

  • ๊ตต๊ฒŒ: **ํ…์ŠคํŠธ** ๋˜๋Š” Ctrl+B
  • ๊ธฐ์šธ์ž„: *ํ…์ŠคํŠธ* ๋˜๋Š” Ctrl+I
  • ์ฝ”๋“œ ๋ธ”๋ก: ```์–ธ์–ด๋ช… ๋˜๋Š” Ctrl+Shift+C
  • ๋งํฌ: [ํ…์ŠคํŠธ](URL) ๋˜๋Š” Ctrl+K

๋ฉ˜์…˜ ๊ธฐ๋Šฅ

  • '@' ์ž…๋ ฅ ํ›„ ์‚ฌ์šฉ์ž ์ด๋ฆ„ ์ž…๋ ฅ
  • AI ์ฑ—๋ด‡ ๋ฉ˜์…˜: @wayneAI ๋˜๋Š” @consultingAI
  • ๋ฐฉํ–ฅํ‚ค๋กœ ๋ฉ˜์…˜ํ•  ์‚ฌ์šฉ์ž ์„ ํƒ

ํŒŒ์ผ ๊ณต์œ 

  1. ํด๋ฆฝ ์•„์ด์ฝ˜ ํด๋ฆญ ๋˜๋Š” ํŒŒ์ผ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ
  2. ์ง€์› ํ˜•์‹:
    • ์ด๋ฏธ์ง€: jpg, jpeg, png, gif, webp (์ตœ๋Œ€ 10MB)
    • ๋น„๋””์˜ค: mp4, webm, mov (์ตœ๋Œ€ 50MB)
    • ์˜ค๋””์˜ค: mp3, wav, ogg (์ตœ๋Œ€ 20MB)
    • ๋ฌธ์„œ: pdf (์ตœ๋Œ€ 20MB)

์ด๋ชจ์ง€ ๋ฐ ๋ฆฌ์•ก์…˜

  • ์ด๋ชจ์ง€ ๋ฒ„ํŠผ ํด๋ฆญํ•˜์—ฌ ์ด๋ชจ์ง€ ์„ ํƒ
  • ๋ฉ”์‹œ์ง€์— ๋งˆ์šฐ์Šค ์˜ค๋ฒ„ ์‹œ ๋ฆฌ์•ก์…˜ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ

5. ์ฑ„ํŒ…๋ฐฉ ๊ด€๋ฆฌ

  • ์ฑ„ํŒ…๋ฐฉ ์ฐธ์—ฌ์ž ๋ชฉ๋ก ํ™•์ธ
  • ์ด์ „ ๋ฉ”์‹œ์ง€ ์Šคํฌ๋กคํ•˜์—ฌ ๋กœ๋“œ
  • ํŒŒ์ผ ๋ฐ ๋ฏธ๋””์–ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ
  • ๋ฉ”์‹œ์ง€ ์ฝ์Œ ์ƒํƒœ ํ™•์ธ

6. ๋ณด์•ˆ ๋ฐ ๊ฐœ์ธ์ •๋ณด

  • ์ฃผ๊ธฐ์ ์ธ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ๊ถŒ์žฅ
  • ๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” ํŒŒ์ผ๋กœ ๊ณต์œ ํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜
  • ๋กœ๊ทธ์•„์›ƒ ์‹œ ๋ฐ˜๋“œ์‹œ '๋กœ๊ทธ์•„์›ƒ' ๋ฒ„ํŠผ ์‚ฌ์šฉ

7. ๋ฌธ์ œ ํ•ด๊ฒฐ

์ฑ„ํŒ…์ด ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

  1. ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ์ƒํƒœ ํ™•์ธ
  2. ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ
  3. ์žฌ๋กœ๊ทธ์ธ ์‹œ๋„

ํŒŒ์ผ ์—…๋กœ๋“œ ์‹คํŒจ ์‹œ

  1. ํŒŒ์ผ ํฌ๊ธฐ ๋ฐ ํ˜•์‹ ํ™•์ธ
  2. ๋„คํŠธ์›Œํฌ ์ƒํƒœ ํ™•์ธ
  3. ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ ํ›„ ์žฌ์‹œ๋„

์„ฑ๋Šฅ ์ตœ์ ํ™” ํŒ

  • ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ์€ ์••์ถ•ํ•˜์—ฌ ์—…๋กœ๋“œ
  • ์˜ค๋ž˜๋œ ์ฑ„ํŒ…๋ฐฉ์€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ •๋ฆฌ
  • ๋ถˆํ•„์š”ํ•œ ์ฑ„ํŒ…๋ฐฉ์€ ๋‚˜๊ฐ€๊ธฐ ์ฒ˜๋ฆฌ

๊ธฐ์ˆ  ์Šคํƒ

ํ”„๋ก ํŠธ์—”๋“œ

  • 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 ์ง€์›
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๊ธฐ๋ฐ˜ ์„ค์ •

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 77.1%
  • TypeScript 15.5%
  • CSS 5.7%
  • Shell 1.7%