Skip to content

thermoCat/WebRTC-Reference

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

448 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

ChatForYou v2 - WebRTC ํ™”์ƒ์ฑ„ํŒ… & ๊ฒŒ์ž„ ํ”Œ๋žซํผ

License Hits

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

ChatForYou v2๋Š” Node.js ํ”„๋ก ํŠธ์—”๋“œ์™€ Spring Boot ๋ฐฑ์—”๋“œ๋กœ ๊ตฌ์„ฑ๋œ ์‹ค์‹œ๊ฐ„ ํ™”์ƒ์ฑ„ํŒ… ๋ฐ ๊ฒŒ์ž„ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. WebRTC ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•œ N:M ํ™”์ƒ์ฑ„ํŒ…๊ณผ CatchMind ๊ฒŒ์ž„, ํŒŒ์ผ ๊ณต์œ  ๋“ฑ ๋‹ค์–‘ํ•œ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ—๏ธ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

ChatForYou_v2/
โ”œโ”€โ”€ nodejs-frontend/          # Node.js ํ”„๋ก ํŠธ์—”๋“œ ์„œ๋ฒ„ (ํฌํŠธ: 3000)
โ”‚   โ”œโ”€โ”€ static/              # ์ •์  ํŒŒ์ผ (JS, CSS, ์ด๋ฏธ์ง€)
โ”‚   โ”œโ”€โ”€ templates/           # HTML ํ…œํ”Œ๋ฆฟ
โ”‚   โ”œโ”€โ”€ config/              # ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ํŒŒ์ผ
โ”‚   โ””โ”€โ”€ server.js            # Node.js ์„œ๋ฒ„
โ”œโ”€โ”€ springboot-backend/       # Spring Boot ๋ฐฑ์—”๋“œ API (ํฌํŠธ: 8080)
โ”‚   โ”œโ”€โ”€ src/main/java/       # Java ์†Œ์Šค ์ฝ”๋“œ
โ”‚   โ”œโ”€โ”€ src/main/resources/  # ์„ค์ • ํŒŒ์ผ
โ”‚   โ””โ”€โ”€ build.gradle         # Gradle ๋นŒ๋“œ ์„ค์ •
โ””โ”€โ”€ README.md

๐Ÿ› ๏ธ ์‚ฌ์šฉ ๊ธฐ์ˆ 

Frontend

  • Node.js - ํ”„๋ก ํŠธ์—”๋“œ ์„œ๋ฒ„
  • jQuery - DOM ์กฐ์ž‘ ๋ฐ AJAX
  • Bootstrap 5 - UI ํ”„๋ ˆ์ž„์›Œํฌ
  • WebRTC - ์‹ค์‹œ๊ฐ„ ํ™”์ƒํ†ต์‹ 
  • Socket.IO - ์‹ค์‹œ๊ฐ„ ํ†ต์‹ 

Backend

  • Java 17 - ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด
  • Spring Boot - ๋ฐฑ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ
  • Spring WebSocket - ์‹ค์‹œ๊ฐ„ ํ†ต์‹ 
  • Stomp - ๋ฉ”์‹œ์ง• ํ”„๋กœํ† ์ฝœ
  • Kurento Media Server - ๋ฏธ๋””์–ด ์„œ๋ฒ„

Infrastructure

  • Gradle - ๋นŒ๋“œ ๋„๊ตฌ
  • Docker - ์ปจํ…Œ์ด๋„ˆํ™”
  • Kubernetes - ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜
  • Prometheus & Grafana - ๋ชจ๋‹ˆํ„ฐ๋ง

โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

๐ŸŽฏ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ

  • ์ฑ„ํŒ…๋ฐฉ ๊ด€๋ฆฌ: ์ฑ„ํŒ…๋ฐฉ ์กฐํšŒ, ์ƒ์„ฑ, ์‚ญ์ œ, ์ˆ˜์ •
  • ๋ฌด์ค‘๋‹จ ์ฑ„ํŒ…๋ฐฉ ๊ด€๋ฆฌ : Redis ๊ธฐ๋ฐ˜ ์„œ๋ฒ„ ์žฌ๋ฐฐํฌ ์‹œ์—๋„ ์ฑ„ํŒ…๋ฐฉ ์œ ์ง€ ๊ด€๋ฆฌ
  • ๋ณด์•ˆ ๊ธฐ๋Šฅ: ์ฑ„ํŒ…๋ฐฉ ์•”ํ˜ธํ™” ๋ฐ ์ ‘๊ทผ ์ œ์–ด
  • ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ: ๋‹‰๋„ค์ž„ ์ค‘๋ณต ๊ฒ€์‚ฌ ๋ฐ ์ž๋™ ์กฐ์ •
  • ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง•: DataChannel ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…

๐ŸŽฅ ํ™”์ƒ์ฑ„ํŒ… ๊ธฐ๋Šฅ

  • WebRTC ํ™”์ƒ์ฑ„ํŒ…: P2P ๊ธฐ๋ฐ˜ ์Œ์„ฑ/์˜์ƒ ํ†ตํ™”
  • Kurento Media Server: N:M ํ™”์ƒ์ฑ„ํŒ… ์ง€์›
  • ํ™”๋ฉด ๊ณต์œ : ์‹ค์‹œ๊ฐ„ ํ™”๋ฉด ๊ณต์œ  ๊ธฐ๋Šฅ
  • ์žฅ๋น„ ์„ ํƒ: ๋งˆ์ดํฌ/์Šคํ”ผ์ปค ์„ ํƒ ๊ธฐ๋Šฅ
  • DataChannel: ํŒŒ์ผ ์ „์†ก ๋ฐ ์ถ”๊ฐ€ ์ฑ„ํŒ…
  • ํ…์ŠคํŠธ ์˜ค๋ฒ„๋ ˆ์ด: ๋ฌธ์ž ์ฑ„ํŒ… ๋‚ด์šฉ์„ ๋น„๋””์˜ค์— ํ‘œ์‹œํ•˜๋Š” ํ…์ŠคํŠธ ์˜ค๋ฒ„๋ ˆ์ด ๊ธฐ๋Šฅ
  • ์‹ค์‹œ๊ฐ„ ์ž๋ง‰: ์Œ์„ฑ์„ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ์ž๋ง‰ ๊ธฐ๋Šฅ
  • SSE ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๋ชฉ๋ก ํ™•์ธ: SSE ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๋ชฉ๋ก ํ™•์ธ ๊ธฐ๋Šฅ

๐ŸŽฎ ๊ฒŒ์ž„ ๊ธฐ๋Šฅ

  • CatchMind ๊ฒŒ์ž„: N ๋ผ์šด๋“œ ๊ทธ๋ฆผ ๋งž์ถ”๊ธฐ ๊ฒŒ์ž„
  • ์‹ค์‹œ๊ฐ„ ์บ”๋ฒ„์Šค: ์‹ค์‹œ๊ฐ„ ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ
  • ์Œ์„ฑ ์ธ์‹: ์Œ์„ฑ์„ ํ†ตํ•œ ์ •๋‹ต ํ™•์ธ
  • ๋ชจ๋ฐ”์ผ ์ง€์›: ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ ํ„ฐ์น˜ ์ด๋ฒคํŠธ
  • Dynamic Topic: ChatGPT ๊ธฐ๋ฐ˜ ๋™์  ์ฃผ์ œ ์ƒ์„ฑ

๐Ÿ“ ํŒŒ์ผ ๊ด€๋ฆฌ

  • MinIO Object Storage: ์‹ค์‹œ๊ฐ„ ํŒŒ์ผ ๊ณต์œ 
  • ํŒŒ์ผ ์—…๋กœ๋“œ/๋‹ค์šด๋กœ๋“œ: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ง€์›
  • ์šฉ๋Ÿ‰ ์ œํ•œ: ์ตœ๋Œ€ 10MB
  • ํ™•์žฅ์ž ์ œํ•œ: jpg, jpeg, png, gif

๐Ÿ“Š ์‹œ์Šคํ…œ ๊ด€๋ฆฌ

  • ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง: Prometheus & Grafana
  • ์ ‘์† ์ฐจ๋‹จ: Blacklist IP ๊ด€๋ฆฌ
  • ๋ฐฐ์น˜ ์ž‘์—…: ํšจ์œจ์ ์ธ ๋ฐฉ ๊ด€๋ฆฌ
  • RESTful API: ํ‘œ์ค€ํ™”๋œ API ์„ค๊ณ„

๐ŸŒ ์ ‘์† ์ •๋ณด

์‚ฌ์ดํŠธ ์ด์šฉ์‹œ ๊ณต์‹œ ์‚ฌํ•ญ

๋ณธ ์‚ฌ์ดํŠธ๋Š” ์˜ค์ง Spring Boot์™€ Node.js, JavaScript๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜์—ฌ WebRTC ๋ฐ WebSocket ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•œ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ๊ณต๋ถ€ํ•˜๊ธฐ ์œ„ํ•œ ์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ์‚ฌ์ดํŠธ๋ฅผ ์ด์šฉํ•จ์— ์žˆ์–ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฒ•์  ์ฑ…์ž„์€ ์‚ฌ์ดํŠธ๋ฅผ ์ด์šฉํ•˜์‹œ๋Š” ๋ณธ์ธ์—๊ฒŒ ์žˆ์Œ์„ ๋ช…์‹œํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Disclaimer when using this site

This site is only for studying various functions using WebRTC and WebSocket technologies based on Spring Boot, Node.js and JavaScript. Please note that all legal responsibilities that may arise from using this site are the responsibility of the person using the site.

๐Ÿš€ ๊ตฌ๋™ ๋ฐฉ๋ฒ•

1. ์„œ๋ฒ„ ์•„ํ‚คํ…์ณ

https://github.com/SeJonJ/ChatForYou/wiki/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%95%84%ED%82%A4%ED%85%8D%EC%B3%90

2. ์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ

  • Node.js 16+ ์„ค์น˜
  • Java 17 ์„ค์น˜
  • Kurento Media Server ์„ค์น˜
  • TURN Server (coturn) ์„ค์น˜
  • Redis ์„ค์น˜

3. ํ”„๋ก ํŠธ์—”๋“œ ์‹คํ–‰

cd nodejs-frontend

# ์˜์กด์„ฑ ์„ค์น˜
npm install

# ๋กœ์ปฌ ํ™˜๊ฒฝ ๋นŒ๋“œ
npm run local

# ์„œ๋ฒ„ ์‹คํ–‰ (ํฌํŠธ: 3000)
npm run start

4. ๋ฐฑ์—”๋“œ ์‹คํ–‰

cd springboot-backend

# Gradle ๋นŒ๋“œ
./gradlew clean build

# JAR ์‹คํ–‰ (ํฌํŠธ: 8080)
java -Dkms.url=ws://[KMS_IP]:[PORT]/kurento -jar build/libs/*.jar

5. ํ™˜๊ฒฝ ์„ค์ •

ํ”„๋ก ํŠธ์—”๋“œ ์„ค์ • ํŒŒ์ผ

// nodejs-frontend/config/config.local.js
window.__CONFIG__ = {
  API_BASE_URL: 'http://localhost:8080/chatforyou/api',
};

// nodejs-frontend/config/config.prod.js
window.__CONFIG__ = {
  API_BASE_URL: {์‚ฌ์šฉ์ž ์„œ๋น„์Šค ๋„๋ฉ”์ธ},
};

๋ฐฑ์—”๋“œ ์„ค์ • ํŒŒ์ผ

# application.properties
server.port=8080

# Kurento Media Server ์„ค์ •
kms.url=ws://localhost:8888/kurento

6. Docker ์‹คํ–‰

# ํ”„๋ก ํŠธ์—”๋“œ Docker ๋นŒ๋“œ
cd nodejs-frontend
docker build -t chatforyou-frontend .

# ๋ฐฑ์—”๋“œ Docker ๋นŒ๋“œ
cd springboot-backend
docker build -t chatforyou-backend .

# Docker Compose ์‹คํ–‰
docker-compose up -d

๐Ÿ“ธ ๊ตฌ๋™ ํ™”๋ฉด

ํ™”์ƒ ์ฑ„ํŒ… ํ™”๋ฉด

ChatForYou.gif

DataChannel ํŒŒ์ผ ์—…๋กœ๋“œ/๋‹ค์šด๋กœ๋“œ

chatforyou_fileupdown.gif

CatchMind ๊ฒŒ์ž„

catchmind_r60.gif

Grafana ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง

monitoring.png

์‹ค์‹œ๊ฐ„ ์ž๋ง‰ ๊ธฐ๋Šฅ

chatforyou_subtitle.gif

SSE ๊ธฐ๋Šฅ

chatforyou_sse.gif

๐Ÿ“ˆ ์„ฑ๋Šฅ ๊ฐœ์„ 

CI/CD Pipeline with GitHub Actions for K8S Deployment

ํ”„๋กœ์„ธ์Šค ๋‹จ๊ณ„ ๋„์ž… ์ „ ์†Œ์š”์‹œ๊ฐ„ ๋„์ž… ํ›„ ์†Œ์š”์‹œ๊ฐ„ ์ ˆ๊ฐ ์‹œ๊ฐ„ ํšจ์œจ์„ฑ ํ–ฅ์ƒ๋ฅ 
Gradle ๋นŒ๋“œ 105.2์ดˆ 66์ดˆ 39.2์ดˆ 37.3% โ†‘
์ด๋ฏธ์ง€ ์—…๋กœ๋“œ 25์ดˆ 9์ดˆ 16์ดˆ 64.0% โ†‘
๋ฐฐํฌ ์ž๋™ํ™” 15์ดˆ(์ˆ˜๋™) 14์ดˆ(์ž๋™) 1์ดˆ 6.7% โ†‘
์ „์ฒด ํ”„๋กœ์„ธ์Šค 145.2์ดˆ 89์ดˆ 56.2์ดˆ 38.7% โ†‘

๐Ÿ”— ๊ด€๋ จ ํ”„๋กœ์ ํŠธ

  • Python API Server: chatforyou-python-api
    • CatchMind ๊ฒŒ์ž„์˜ ๋™์  ์ฃผ์ œ ์ƒ์„ฑ์„ ์œ„ํ•œ ChatGPT ์—ฐ๋™ ์„œ๋ฒ„

๐Ÿ‘ฅ ํŒ€ ์†Œ๊ฐœ

์—ญํ•  ์ด๋ฆ„ ๋‹ด๋‹น ์—…๋ฌด ์ด๋ฉ”์ผ ํ”„๋กœํ•„
๐Ÿ‘‘ ํ”„๋กœ์ ํŠธ ๋ฆฌ๋” ์žฅ์„ธ์กด ํ”„๋กœ์ ํŠธ ์ด๊ด„ ยท ํ’€์Šคํƒ ๊ฐœ๋ฐœ ยท DevOps ๋‹ด๋‹น wkdtpwhs@gmail.com GitHub Tistory
โš™๏ธ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ๊น€๋™ํ˜„ ๋ฐฑ์—”๋“œ ยท ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์ด๋ฉ”์ผ ์˜ˆ์ • GitHub ์˜ˆ์ •
๐Ÿ’ป ํ’€์Šคํƒ ๊ฐœ๋ฐœ ๋ฐ•ํƒœ์‹ ๋ฐฑ์—”๋“œ ยท ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์ด๋ฉ”์ผ ์˜ˆ์ • GitHub ์˜ˆ์ •
๐ŸŽจ ๋””์ž์ธ ๋ฐ ์›น ํผ๋ธ”๋ฆฌ์‹ฑ ์ด๊ด„ ์ž„๊ฐ€ํ˜„ ์›น ํผ๋ธ”๋ฆฌ์‹ฑ ยท UI/UX ๋””์ž์ธ ์ด๋ฉ”์ผ ์˜ˆ์ • GitHub ์˜ˆ์ •

๐Ÿ“ฌ ์—ฐ๋ฝ์ฒ˜

ํŒ€์›๋“ค์˜ ๊ฐœ๋ณ„ ์—ฐ๋ฝ์ฒ˜์™€ GitHub ํ”„๋กœํ•„์€ ๊ณง ์—…๋ฐ์ดํŠธ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

๐Ÿ“š Reference

๐Ÿ“„ ๋ผ์ด์„ ์Šค

Copyright 2024 SejonJang (wkdtpwhs@gmail.com)

์ด ํ”„๋กœ์ ํŠธ๋Š” Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License ํ•˜์— ๋ผ์ด์„ ์Šค๋ฉ๋‹ˆ๋‹ค.

๋น„์ƒ์—…์  ์‚ฌ์šฉ๋งŒ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค:

  • โœ… ๊ฐœ์ธ์ , ๊ต์œก์ , ์—ฐ๊ตฌ ๋ชฉ์ ์˜ ์‚ฌ์šฉ
  • โœ… ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ ๋ฐ ๊ฐœ์„ 
  • โŒ ์ƒ์—…์  ๋ชฉ์ ์˜ ์‚ฌ์šฉ ๋ฐ ๋ฐฐํฌ
  • โŒ ์ˆ˜์ต ์ฐฝ์ถœ์„ ์œ„ํ•œ ํ™œ์šฉ

์ž์„ธํ•œ ๋‚ด์šฉ์€ LICENSE ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

About

SpringBoot WebSocket & WebRTC Chatting

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • JavaScript 38.7%
  • Java 25.6%
  • CSS 15.0%
  • HTML 8.2%
  • SCSS 6.6%
  • Less 5.8%
  • Dockerfile 0.1%