😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

[Node js Project - 4] Zoom Clone with Node JS λ³Έλ¬Έ

πŸ‘©‍πŸ’» λ°±μ—”λ“œ(Back-End)/Node js

[Node js Project - 4] Zoom Clone with Node JS

μ§•μ§•μ•ŒνŒŒμΉ΄ 2023. 6. 18. 01:06
728x90
λ°˜μ‘ν˜•

<λ³Έ λΈ”λ‘œκ·ΈλŠ” Traversy Media μ˜ 유튜브λ₯Ό μ°Έκ³ ν•΄μ„œ κ³΅λΆ€ν•˜λ©° μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€ :-)>

=> Build a Zoom Clone with Node JS for Beginners

 

🌏 개발 ν™˜κ²½ μ„€μ •

npm init

npm i express uuid ejs

npm install -D nodemon

 

🏠 package.json

{
  "name": "zoomclone",
  "version": "1.0.0",
  "description": "- nodejs init - first view init - create a room id - add ability to view our own video - add ability to allow others to stream their video - add styling - add ability to create message - add mute button - add stop video button",
  "main": "server.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "ejs": "^3.1.9",
    "express": "^4.18.2",
    "nodemon": "^2.0.22",
    "peer": "^1.0.0",
    "peerjs": "^1.4.7",
    "socket.io": "^4.6.2",
    "uuid": "^9.0.0"
  }
}


🌏 Socket.io

: node.js 기반 μ‹€μ‹œκ°„ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 지원 라이브러리

 

🏠 ν΄λΌμ΄μ–ΈνŠΈ -> μ„œλ²„

: ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—κ²Œ μ „μ†‘ν•œ λ©”μ‹œμ§€ μˆ˜μ‹ 

io.on
// ν˜„μž¬ μ ‘μ†λ˜μ–΄ μžˆλŠ” ν΄λΌμ΄μ–ΈνŠΈλ‘œλΆ€ν„° λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•˜λ €λ©΄ on λ©”μ†Œλ“œ μ‚¬μš©
// 'connection' : socket.io의 κΈ°λ³Έ 이벀트, μ‚¬μš©μžκ°€ μ›Ήμ‚¬μ΄νŠΈμ— μ ‘μ†ν•˜λ©΄ μžλ™μœΌλ‘œ λ°œμƒν•˜λŠ” 이벀트

 

🏠 μ„œλ²„ -> ν΄λΌμ΄μ–ΈνŠΈ

: μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ©”μ‹œμ§€ 전솑

io.emit
// μ„œλ²„κ°€ ν˜„μž¬ μ ‘μ†ν•΄μžˆλŠ” λͺ¨λ“  ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 이벀트 전달
socket.emit
// μ„œλ²„μͺ½μ—μ„œ eventλ₯Ό λ°œμƒμ‹œν‚€λŠ” ν•¨μˆ˜
// μ„œλ²„μ—μ„œ 이벀트 λ°œμƒμ‹œν‚€λ©΄ ν΄λΌμ΄μ–ΈνŠΈ νŽ˜μ΄μ§€μ˜ ν•΄λ‹Ή 이벀트 λ¦¬μŠ€λ„ˆμ—μ„œ 처리
// ν•΄λ‹Ή μ†ŒμΌ“μ„ 톡해 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ©”μ‹œμ§€ 전솑

 

🌏 WebRTC

: 톡신 ν‘œμ€€μœΌλ‘œ, μ›Ή λΈŒλΌμš°μ €κ°„ μ‹€μ‹œκ°„ μ˜μƒ/μŒμ„±/데이터 톡신을 κ°€λŠ₯

: 즉 λ³„λ„μ˜ ν”ŒλŸ¬κ·ΈμΈμ΄λ‚˜ ν”„λ‘œκ·Έλž¨μ΄ ν•„μš” μ—†μŒ

: WebRTCλŠ” P2P ꡬ쑰둜 λ˜μ–΄μžˆμœΌλ©°, κΈ°κΈ°κ°„ ν†΅μ‹ ν•˜κΈ° λ•Œλ¬Έμ— μ„œλ²„μ˜ μ„±λŠ₯이 크게 ν•„μš”ν•˜μ§€ μ•ŠμŒ

 

🏠 PeerJS

: WebRTCλ₯Ό μ‰½κ²Œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„ wrapper

: ID만 지정해주면 μ†μ‰½κ²Œ P2P 연결을 처리

npm install peer

 

🌏 μ€Œ κΈ°λŠ₯

🏠 μ›ΉμΊ  κ΅¬ν˜„ν•˜κΈ°

🏠 μƒˆλ‘œμš΄ User μΆ”κ°€ν•˜κΈ°

// server.js
// ν˜„μž¬ μ ‘μ†λ˜μ–΄ μžˆλŠ” ν΄λΌμ΄μ–ΈνŠΈλ‘œλΆ€ν„° λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ 
io.on("connection", (socket) => {
  socket.on("join-room", (roomId) => {
    socket.join(roomId);
    socket.broadcast.to(roomId).emit("user-connected");
  });
});

λ‚˜λŠ” μ €κΈ° broadcast 의 μœ„μΉ˜λ₯Ό λ°”κΆœλ”λ‹ˆ λ˜μ—ˆλ‹€. (유튜브 κ³ λŒ€λ‘œ λ”°λΌν•˜λ‹ˆ μ—λŸ¬ μƒκ²ΌμŒ γ… γ…‘γ… )

 

🏠 ID만 지정해주면 μ†μ‰½κ²Œ P2P 연결을 처리

 

🏠 쀌 λ ˆμ΄μ•„μ›ƒ 예쁘게 κΎΈλ―ΈκΈ°

 

🏠 μ€Œμ—μ„œ chat ν•˜κΈ°

 

λ¬΄μŠ¨μΌμ΄μ§€ μ™œ λ‚˜λŠ λ‘κ°œ μ•ˆλ– ???

728x90
λ°˜μ‘ν˜•
Comments