본문 바로가기

코딩/NodeJS

(23)
메모리 효율적인 자바스크립트 기반 Fulltext 검색엔진 MiniSearch 소개 해커톤에서 챗봇 개발을 했는데, 보유한 데이터를 검색해서 보여줄 수 있는 기능이 필요했다. 별도의 서버를 사용할 수 있다면 좀 더 정석적인 도구를 사용할 수 있었겠지만, 주어진 환경이 글리치 서버 환경 뿐이라서 MariaDB나 MongoDB 같은 DB 연동이 불가능한 환경이었고, 글리치 특성 상 무거운 라이브러리를 설치하기가 부담스러웠다. 그래서 주어진 환경에서 가장 가볍고 효율적으로 원하는 기능을 구현할 수 있는 MiniSearch를 사용하게 됐다. MiniSearch의 깃허브 주소는 아래와 같다. 사용 방법과 소개 또한 원문으로 존재하기 때문에 혹시 사용해보고 싶다면 참고하면 좋을 것 같다. https://lucaong.github.io/minisearch/ MiniSearch MiniSearch M..
nodejs에 웹소켓으로 채팅 기능 구현하기 1. 개요 socket.io 를 이용해서 실시간 채팅 기능을 구현 단체 채팅 및 1:1 채팅 기능 구현 2. 코드 (1) server.js // 누가 웹소켓 접속하면 코드 실행 io.on('connection', function(socket){ console.log('유저 접속됨'); console.log(socket.id); // room1-send 이벤트 발생 시 코드 실행 socket.on('room1-send', function(data){ // room1 채팅방 내 모든 사람들에게 메시지 전송 io.to('room1').emit('broadcast', data); }); // joinroom 이벤트 발생 시 코드 실행 socket.on('joinroom', function(data){ // 채팅..
nodejs에서 웹소켓 기능 구현하기 1. 개요 서버 - 유저 실시간 양방향 통신 가능 2. 설치 npm install socket.io 소켓 라이브러리 설치 // 소켓 사용 설정 const http = require('http').createServer(app); const {server} = require('socket.io'); const io = new Server(http); server.js파일에 위 설정 추가 http.listen(process.env.PORT, function () { console.log("db connected"); }); 원래 app.listen이었는데 http.listen으로 바꿔주기 3. 코드 (1) socket.ejs socket.ejs파일 만들기 채팅방 서버에 메시지 보내기 body태그에 위 코드들..
nodejs로 실시간 채팅 기능 만들기 1. 개요 실시간으로 DB데이터를 가져오는 방법을 알아야 함 2. 알고리즘 서버랑 유저랑 실시간 소통채널(Server Sent Events)을 열어야 함 서버가 유저에게 일방적으로 데이터 실시간 전송 가능 HTTP 요청시 몰래 전달되는 정보들이 있음(유저의 언어, 브라우저 정보, 쿠키, 위치정보 등) 이런 정보는 Header에 담겨있음 이 Header를 수정하면 서버와 유저간 실시간 소통 창구 열 수 있음 MongoDB Change Stream이란거 쓰면 DB가 업데이트될때마다 유저에게 데이터 쏴줄 수 있음 3. 코드 (1) server.js // 서버-유저 실시간 소통 코드 app.get("/message/:id", 로그인했니, function (req, res) { // Header 셋팅 res.wr..
nodejs로 채팅방 기능 만들기 1. 개요 게시글 간의 종속관계를 알아야 함 채팅기능 = 댓글기능 + 실시간 통신임 채팅방에 접속 후 메시지 전송 게시글에 접속 후 댓글을 달기 2. 알고리즘 채팅과 유사한 댓글기능에는 댓글 게시글에 부모 게시물이 뭔지도 기록되어 있어야 함 = document끼리 종속 관계 맺는 방법임 채팅 기능 버튼 누르면 채팅방 게시물 발행 댓글(메시지) 게시물 남길 수 있게 하면 됨 이때 댓글에는 부모 게시물이 뭔지를 알아야 함 3. 코드 (1) chat.ejs 채팅 페이지 만들기 ! 채팅방1 내용 채팅방1 내용 채팅방1 내용 전송 (2) server.js 요청받은 URL을 통해 데이터를 DB에 저장 // 채팅 기능 코드 app.post("/chatNow", 로그인했니, function (req, res) { //..
구글 클라우드로 nodejs 프로젝트 배포하기 1. 개요 구글 클라우드에 내가 만든 서비스 업로드하고 배포하기 그럼 localhost말고 딴데서도 접속 가능함 2. 셋팅 runtime: nodejs env: flex manual_scaling: instances: 1 resources: cpu: 1 memory_gb: 0.5 disk_size_gb: 10 server.js랑 동일한 경로에 app.yaml생성 3. 구글 클라우드 설정 클라우드 컴퓨팅 서비스 | Google Cloud 클라우드 컴퓨팅 서비스 | Google Cloud 데이터 관리, 하이브리드 및 멀티 클라우드, AI와 머신러닝 등 Google의 클라우드 컴퓨팅 서비스로 비즈니스 당면 과제를 해결하세요. cloud.google.com 위 링크로 접속하고 무료로 시작하기 눌러서 로그인 + ..
nodejs로 이미지 업로드 기능 만들기 1. 개요 이미지는 mongoDB같은데에 저장하진 않고 그냥 서버에 저장 함 public 폴더에 image 폴더 만들어서 거기에 이미지 저장합시다 2. multer 라이브러리 설치 파일전송을 도와주는 라이브러리임 npm install multer 위 명령어 입력해서 설치 3. 코드 (1) upload.ejs upload.ejs파일 만들거임 업로드페이지 전송 form태그 만들고 /upload라는 URL로 POST요청 할 수 있도록 속성 줍시다 그리고 name값이 uploadImg인 input태그 만들어주세요 (2) server.js // multer 사용 설정 let multer = require("multer"); var storage = multer.diskStorage({ // 저장 경로 설정하기 d..
nodejs에서 routes폴더 이용해서 라우터 관리하기 1. 개요 라우터 여러개 생기면 관리 귀찮음 router 폴더에다가 JS파일로 라우터 들을 저장해놓을 수 있음 server.js에 JS파일 등록해서 쓰면 됨 2. 설정 server.js랑 같은 경로에 routes 폴더 만들기 routes 폴더 안에 JS파일 만들기 3. 코드 (1) server.js // 라우터 가져오는 코드 // app.use는 미들웨어 쓰는 코드 // 미들웨어는 요청과 응답 사이에 실행하는 코드 // URL없이 미들웨어 쓰면 모든 응답과 요청 사이에서 실행 // app.use('/', 미들웨어, function) 형태는 '/'요청왔을대 미들웨어 실행 app.use("/shop", require("./routes/shop")); shop.js라는 파일에다가 라우터 집어넣어둠 경로에 왜 ..