JaeUpSu / zoom_nd

ZOOM Clone using NodeJS, WebRTC and WebSockets

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ZOOM 코딩

ZOOM Clone using NodeJS, WebRTC and WebSockets


  • 설정
npm init -y
npm i nodemon -D
npm i @babel/core @babel/cli @babel/node -D
npm i @babel/preset-env -D
npm i express
npm i pug
npm i ws

  • 실행
// terminal
npm run dev

// web
http://localhost:3000/

  • 학습내용

    • node.js
    Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임
    기본적으로 JavaScript를 브라우저 외부에서 실행
    
    
    (특징)
    1) 비동기 I/O 처리
        ㄴ> 이벤트 루프와 함께 비동기적인 태스크 처리를 지원
    2) 단일 스레드
        ㄴ> 여러 작업을 동시에 처리하는 것처럼 보이지만
            실제로는 이벤트 루프를 통해 단일 스레드에서 작동
    3) npm
        ㄴ> Node Package Manager를 통해 수많은 라이브러리와
            도구에 접근 가능
    
    • express
    Node.js의 웹 애플리케이션 프레임워크
    웹 및 모바일 애플리케이션의 개발을 위한 기능 집합을 제공
    
    
    (특징)
    1) 미들웨어
        ㄴ> 요청과 응답 사이의 함수들을 정의하여
            웹 애플리케이션에서 발생하는 요청에 대해 응답할 방식을 결정
    2) 라우팅
        ㄴ> URL 기반의 라우트 정의가 가능
    3) 템플릿 엔진 지원
        ㄴ> Pug, EJS, Handlebars 등 다양한 템플릿 엔진을 지원
    
    • pug
    Node.js를 위한 템플릿 엔진 중 하나로,
    HTML을 간결한 방식으로 작성
    
    
    (특징)
    1) 들여쓰기 기반
        ㄴ> HTML 태그들의 계층 구조를 들여쓰기로 표현
    2) 코드 실행
        ㄴ> 템플릿 내에서 JavaScript 코드 실행이 가능
    3) 미리 컴파일
        ㄴ> 빠른 렌더링을 위해 템플릿을 미리 컴파일
    
    • WebSocket
    단일 TCP 연결을 통해 전체 양방향 통신 채널을 제공하는 프로토콜
    
    전통적인 HTTP 요청/응답 모델과 달리
    WebSocket은 서버와 클라이언트 간에 지속적인 연결을 유지,
    한 쪽에서 데이터를 전송할 때마다 새 연결을 설정할 불필요
    
    
    (특징)
    1) 실시간 통신
        ㄴ> 빠르고 실시간으로 데이터를 교환
    2) 저 오버헤드
        ㄴ> 한 번 연결되면, 데이터 패킷의 오버헤드가 최소화
    3) 지속적인 연결
        ㄴ> HTTP와는 달리, 연결이 지속적으로 유지되므로 채팅,
            게임 및 실시간 애플리케이션에서 이상적
    
    /*
    @ Express 함께 사용
    
    - express와 http 모듈을 사용하여 HTTP와 
      WebSocket 서버를 동일한 포트에서 실행
    
    - express 앱을 생성하고 해당 앱을 기반으로 
      http 서버를 만든 다음, 그 서버를 ws에 전달
    */
    const express = require("express");
    const http = require("http");
    const WebSocket = require("ws");
    
    const app = express();
    const server = http.createServer(app);
    const wss = new WebSocket.Server({ server });
    
    wss.on("connection", (ws) => {
      // ... 이전 코드와 동일 ...
    });
    
    server.listen(8080, () => {
      console.log("Server is listening on port 8080");
    });

주의

npm i "@socket.io/admin-ui"

About

ZOOM Clone using NodeJS, WebRTC and WebSockets


Languages

Language:JavaScript 89.4%Language:Pug 10.6%