Node.js8 Socket.io와 WebSocket 비교 공통점 - 이벤트 기반의 실시간 양방향 통신 차이점 1. Socket.io는 웹 소켓 외에도 폴링 등 다양한 트랜스포트를 지원. 이로 인해 다양한 환경에서도 동작할 수 있으며 이벤트 기반의 통신을 간편하게 구현할 수 있는 방법을 제공 2. socket.io는 연결이 끊겼을 때 자동으로 재연결을 시도하고, 유실된 패킷을 처리함 3. WebSocket은 오래된 버전의 웹 브라우저는 미지원하지만 Socket.io는 상관 X 4. WebSocket은 HTML 5 표준기술이며 Socket.Io는 라이브러리 5. WebSocket에는 room 개념 존재 X (Socket.io는 room 개념이 있어 일부 클라이언트들에게만 데이터를 전송하는 브로드캐스팅 가능) 6. WebSocket은 더 가벼우며(빠르며) 순수한 웹.. 2023. 11. 27. Node.js로 Redis 연결 const express = require("express"); const app = express(); const redis = require("redis"); const http = require("http"); const server = http.createServer(app); const { Server } = require("socket.io"); const Subscriber = redis.createClient({url: "redis://redis-server:6379"}); // Redis 연결 성공 시 Subscriber.on('connect', () => { console.info('Redis Sub connected!'); }); // Redis 연결 실패 시 Subscriber.on.. 2023. 9. 5. Node.js 클러스터 클러스터(Cluster) - 기본적으로 싱글 스레드인 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈 (작업 관리자 - 성능에서 개수 확인 가능) - 포트를 공유하는 노드 프로세스를 여러 개 둘 수 있음 - 요청이 많이 들어왔을 때 병렬로 실행된 서버의 개수만큼 요청이 분산 - 클러스터로 코어 하나당 노드 프로세스 하나를 배정 가능 => 멀티 프로세스 방식 - 멀티 프로세스 방식이라 자원 공유 X - Node.js 클러스터 = Primary 프로세스(1) + Worker 프로세스(나머지) 2023. 8. 28. Node.js 정의 및 장단점 Node.js - Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임 환경 - 서버 사이드 애플리케이션 개발에 주로 사용되는 소프트웨어 플랫폼 - 브라우저 외부 환경에서 자바스크립트 애플리케이션 개발에 사용 장점 - 모든 API가 비동기로 동작 - HTTP 서버 모듈 내장 => 별도의 웹서버 설치 필요 X - 이벤트 기반 => 이벤트가 발생할 때 미리 지정해둔 작업 수행 - 논 블로킹 I/O = 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행 (빨리 처리할 수 있는 작업부터 실행) - 노드 프로세스는 멀티 스레드이지만, 직접 다룰 수 있는 스레드는 하나(싱글 스레드) - npm을 기반으로 다양한 모듈 제공 => 효율성이.. 2023. 6. 6. Node.js Swagger 적용 Swagger.js const swaggerUi = require("swagger-ui-express"); const swaggereJsdoc = require("swagger-jsdoc"); const options = { swaggerDefinition: { info: { title: "", // 프로젝트 제목 version: "1.0.0", // 프로젝트 버전 description: "This is project" // 프로젝트 설명 }, host: "localhost:3000", // 요청 URL basePath: "/", }, apis: ["./routes/*.js"], //@Swagger 적용한 js 파일 연동 // (파일 경로 입력은 swaggerUi, specs를 import하여 사용하는 .. 2023. 6. 3. Socket.io Socket.io - 웹소켓에 기반하여 서버와 브라우저 간의 양방향 통신을 돕는 JavaScript 라이브러리 - 하나의 소켓 연결은 하나의 namespace를 가지며, 하나의 namespace 안에는 여러 개의 room을 생성할 수 있음 - 하나의 room 안에 특정 클라이언트들을 입장시키거나(join) 퇴장시킬(leave) 수 있음 기본 세팅 const express = require("express"); const app = express(); const http = require("http"); const { Server } = require("socket.io"); const server = http.createServer(app); const io = new Server(server, { co.. 2023. 5. 31. Nodemon/PM2 Nodemon(Node moniter) - npm install nodemon - 노드가 실행하는 파일이 속한 디렉터리를 감시하고 있다가 파일이 수정되면 자동으로 노드 애플리케이션을 재시작하는 확장 모듈 => 애플리케이션을 개발할 때 주로 사용 - 기존에 [node 파일명]으로 실행했던 것과 다르게 [nodemon 파일명]으로 실행 - [node 파일명] 방식 => 서버 구동 중에 코드를 수정하여 반영하려면 서버를 개발자가 수동으로 끈 후 재실행 - [nodemon 파일명] 방식 => 서버 구동 중에 코드를 수정한 후 파일을 저장하면 서버가 자동으로 재실행하면서 변경사항 반영 PM2(Process Manager) - npm install pm2 - Node.js 서버 운영 패키지 => 애플리케이션 배포에.. 2023. 5. 30. Winston (Node.js 로그 관리) Winston - Node.js에서 Log를 효율적으로 관리할 수 있도록 하는 모듈 winston 로그 레벨 - error(빨강) > warn(노랑) > info(초록) > http(초록) > verbose(하늘) > debug(파랑) > silly(보라) winston.format - 기본 포맷은 JSON이지만 combine을 통해 여러 형식을 혼합해서 지정할 수 있음 - timestamp = 로그 발생 시점 (날짜 형식 지정) - label = 로그가 발생한 어플리케이션 이름 지정 - level = 로그 레벨 - message = 로그 내용 - printf = 출력 형태 지정 ※ level과 message는 자동으로 지정됨 const winston = require('winston'); const w.. 2023. 5. 26. 이전 1 다음