개발/nodejs
-
Javascript LRU Cache개발/nodejs 2023. 10. 11. 11:54
Javascript 언어에서는 메모리 애플리케이션 메모리 공간을 캐시처럼 사용할 수 있는 기능을 제공한다. Redis처럼 key - value 로 사용하면 되는 줄 알았는데 사용방법이 약간 다르다. 설명에 앞서 아래 코드의 결과 값을 예상해보자 import LRU from 'lru-cache'; const cache = new LRU({ max: 3 }); const props = new Set(); cache.set(1, props); props.add('1'); props.add('2'); const result1 = cache.get(1); console.log('Result 1:', result1); set 함수가 실행된 후 props 에 ‘1’, ‘2’가 들어갔으므로 결과값이 빈 집합으로 예상할..
-
멀티 서버 환경에서 Socket.io 사용하기개발/nodejs 2021. 11. 29. 20:00
서버 인스턴스가 하나로 이뤄진 환경에서는 클라이언트와 서버간의 소켓 통신은 그림 1 처럼 하나의 서버에서 모든 소켓 세션을 관리하는 형태로 구현된다. Server1 이 클라이언트와 연결된 모든 소켓 세션을 갖고 있기 때문에 모든 클라이언트에게 Event를 전달할 수 있다. 그런데 그림 1에서 서버를 하나 늘리면 클라이언트와 서버간의 소켓 통신은 그림 2처럼 된다. 클라이언트는 최초에 접속한 서버에 대해서 소켓 세션을 유지하게 되므로 Server1와 Server2 모두 별도의 소켓 세션을 갖게 된다. 그림 2와 같은 형태에서 Server1 에서 모든 클라이언트에게 직접 이벤트를 보내는 것은 불가능하다. 그림 3에서도 알 수 있듯이 Server1과 Client 2 간의 소켓 연결 세션이 없으므로 Server..
-
nodejs + android Socket.IO 를 이용해 소켓 통신 만들기개발/nodejs 2021. 10. 28. 21:32
NodeJs Socket Server nodejs 의 socket.io 라이브러리를 사용하면 손쉽게 클라이언트와 소켓 통신을 할 수 있는 코드를 구현할 수 있다. 코드도 몇줄 되지 않는다. 아래 코드는 typescript로 소켓 통신 부분을 구현해본 것이다. import express from 'express' import httpLib from 'http'; import socketIO from 'socket.io'; const http = httpLib.createServer(express()) const socketio = new socketIO.Server(http, {}) socketio.on("connection", (socket: socketIO.Socket) => { console.log(..
-
nodejs + typescript 버전 heroku로 푸쉬하기개발/nodejs 2021. 10. 27. 21:46
nodejs를 typescript로 짜고 로컬에서 테스트 할 때는 아래 처럼 nodemon 명령어를 사용하면 된다. 그런데 heroku 서버 상에서는 이 명령어를 사용할 수 없다. nodemon --exec ts-node src/index.ts heroku 서버상에서도 typescript를 사용하기 위해선 typescript를 javascript로 변환하는 과정이 필요하다. package.json을 수정하면 heroku에 push 하는 과정에서 typescript를 javascript로 빌드하는 과정을 추가할 수 있다. 아래 코드에서 postinstall 속성이 npm run build로 되어 있는데 이 과정에서 heroku에 설치하면서 최종 명령어로 불리게 된다. build 속성을 tsc로 두면 타입 ..
-
우분투에 최신 nodejs 설치하기개발/nodejs 2021. 3. 28. 12:23
sudo apt-get install nodejs 우분투의 패키지매니저 apt 를 이용해서 Nodejs를 설치 할 수 있기는 하다. 그러나 최신 버전이 아니라 우분투 팀에서 마지막으로 테스르를 완료한 버전(현재 글 작성 시점에서는 8.x.x)을 설치돼서 자바스크립트에서 Optional Chaning으로 짠 코드가 컴파일 되지 않는 문제가 있었다. 그래서 apt 말고 다른 방법으로 설치해야한다. 여러가지 방법이 있겠지만 가장 좋은 방법은 nvm(node version manager)를 쓰는 것 같다. nvm을 사용하면 다양한 노드 버전에서 설치가 가능한데 최신 버전도 물론 설치가 가능하다. curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/ins..
-
nodejs + postgresql개발/nodejs 2021. 1. 10. 13:12
nodejs로 postgresql 데이터베이스를 사용하는 방법. 엄청 간단하다. 먼저 pg 라이브러리를 npm으로 설치한 후 npm install pg // pg library install host 주소랑 포트번호 그리고 유저 정보들을 담은 오브젝트를 만든 후 pg client를 생성해 연결을 시켜준다. const dbconfig = { host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PW, database: process.env.DB_NAME, port: process.env.DB_PORT, ssl: { rejectUnauthorized: false } } const client = new pg.Client(..
-
nodejs + multer 파일 업로드개발/nodejs 2021. 1. 7. 20:07
multer 라는 npm 라이브러리를 사용하면 nodejs로 쉽게 파일 업로드 api를 구축 할 수 있다. multer 라이브러리를 설치하고 내부 함수인 diskStorage 로 저장 받는 파일의 장소와 저장하게될 파일 이름을 설정하자. destination 필드에 파일 다운 받을 경로를 정하고 filename 필드에 다운 받는 파일 이름을 정한다. 그리고 정해둔 값으로 multer 오브젝트를 생성한다. const multer = require('multer') const path = require('path') const storage = multer.diskStorage( { destination: './uploads', filename: function (req, file, cb) { cb(null..
-
nodejs + s3 upload/get개발/nodejs 2021. 1. 7. 19:56
nodejs로 AWS S3 스토리지에 업로드를 하기 위해선 먼저 S3 access 권한을 갖고 있는 IAM 사용자가 있어야 한다. 이것까지 설명하면 어려우니 아래 사진과 같은 권한을 가진 사용자가 필요하다는 것을 먼저 알아두자. 사용자를 만들면 accessKeyId랑 secretAccessKey를 받는다. 이 string 값을 이용해 nodejs의 AWS S3 오브젝트를 만든다 const AWS = require('aws-sdk') const s3 = new AWS.S3({ accessKeyId: process.env.S3_ACCESS_KEY_ID, secretAccessKey: process.env.S3_SECRET_ACCESS_KEY }) 만든 객체로 s3 고유 함수를 호출 할 수 있다. 업로드의 인..