nodejs

    [Nodejs] Slack Message 슬렉 메시지 보내기 slack-freinds

    slack을 업무 환경에서 주로 다루다보니까, 쓸 일이 많았다. api를 직접 사용하다가 여러가지로 귀찮아서 라이브러리 하나를 만들었다. slack-friends slack-friends slack-friends good. Latest version: 0.1.2, last published: 5 days ago. Start using slack-friends in your project by running `npm i slack-friends`. There are no other projects in the npm registry using slack-friends. www.npmjs.com 토큰 발급부터 자세한 설명이 있다. GitHub - ehdaydkv112/slack-friends: slack-f..

    [Nodejs] Express Typescript SocketIo

    여러 챗봇과 실시간 채팅을 만들어야 했다. 기획이 굉장히 납득가지 않았지만, 기획자는 기획자의 일이 있는거니까 일단 이해하고 만들었다.. socket.model.ts const socketConnect = (httpServer: any) => { const ioConnect = new socketIo.Server(httpServer, { cors: { origin: '*', methods: ['GET', 'POST'], credentials: true, }, }); const io = ioConnect.of('/socket/chat'); return io; }; export = socketConnect; 소켓을 여는 함수를 만든다. app.ts import express from 'express'; im..

    [Ubuntu] firebase-admin - error:25066067:DSO support routines:dlfcn_load:could not load the shared library

    이번에 채팅 서버를 새로 파면서 처음 보는 문제가 생겼다. 파이어 베이스를 활용해 푸시 알람을 보냈는데, 특정 알람은 푸시가 가고, 또 어떤건 안되고, 확인해보니 이런 로그가 떴다. Error: error:25066067:DSO support routines:dlfcn_load:could not load the shared library at Sign.sign (node:internal/crypto/sig:131:29) at ServiceAccountSigner.sign (/node_modules/firebase-admin/lib/utils/crypto-signer.js:65:37) at /node_modules/firebase-admin/lib/auth/token-generator.js:135:44 a..

    [Node.js] Express-typescript 전환

    8개 서버에서 2개는 js, 6개는 ts를 사용했는데, 유지보수가 하기가 굉장히 불편하다. 그래서 시간이 좀 남을 떄 조금씩 바꾸기 시작했다. 천천히.. 다치지않게 소중히.. 구조도 바꿨는데, 바꾸면서 느끼는게 굉장히 많았다. 간단하게나마 기록을 해보려한다. battle라우터를 예로 들면 현재 구조는 이렇다. router.ts const router: Router = Router(); router.post( '/', memberAuthMiddleWare, createBattleContractInterceptor, createBattleContractController, responseSuccessInterceptor, ); 일반적인 라우터. 들어오면, 멤버검증하는 미들웨어 -> 타입 및 예외처리만 하는 ..

    [MySQL, Redis, Node.js] Cache를 활용한 Update query 속도 개선

    그지같은 Update 속도 때문에, 여러 곳에서 병목 현상이 났다. 프로덕트 성격상, update, Insert, delete가 활발한 table이 있는데, 이 곳에서 데드락도 잘 걸리고, 고통스러웠다. 매번 투매니커넥션 뜰 때마다, 프로세스 리스트에서 병목 현상을 일으키는 쿼리를 보고, 놀러갈 때도, 노트북을 들고다니며, 눈물의 스크립트를 날리는 고통을 받았다... 이번에 시간이 좀 나서, 어떻게든 개선해보려했다. 전체를 다 고치는건, 공수가 너무 들어서 힘들었고, 일단 임시조치를 취했다. 처음엔 서브쿼리, 임시테이블을 활용했으나, 이것도 여의치 않아서, 그냥 캐시를 활용하기로 했다. Redis를 활용해서, Pk를 캐시로 만들었다. redis.commend는 미리 모듈화해 둔 redis 명령어 함수다..

    [Node.js] FCM Notification 알람 자동화 작업

    앱에서 각종 알람들을 자동화해야했다ㅠ 나는 회사에서 사용하는 서비스를 AWS에서 작은 용량의 ec2를 여러개 놓고, 용도와 필요에 맞게 나눠서 쓰는 식으로 설계했는데, 알람도 자동화를 돌릴 알람들을 용도와 연결된 것들에 맞게끔 나눴다. 그래야 유지보수가 편할 것 같아서인데, 이건 나중에 지켜봐야겠지.. 일단 간단한 예제 파일을 만들었다. 실제 프로덕트에 적용할 땐 인터페이스와 모듈화를 잘 해놓아야한다. app.controller.ts const customNotiCron = cron.schedule('* * * * *', async () => { try { const day: number = dayjs().tz('Asia/Seoul').day(); const notiTime: string = dayjs..

    [Node.js, Redis] Nodejs AWS Elasticache Redis

    점점 규격이 커지다 보니, 반복 요청 하는 구간이나, 계산이 많은 곳에서 부하가 조금씩 생겼다. 디비랑 서버에서 짱구를 아무리 굴려봐도 어쩔 수 없는 부분이 있었다. 그렇다. 이젠 캐시처리가 필요했다... 여러가지를 알아보다가, 엘라스틱캐시-레디스를 선택했다. EC2에 레디스를 직접 배포해서 할 수도 있었지만, 증설, 로그 등 관리에 용이했기 때문이다. elasticcache는 아마존에서 Redis로 만들면 된다. 셋팅은 생략한다. Nodejs에 연결하려 한다. 리더 엔드포인트는 읽기만 하는 용도고, 기본 엔드 포인트로 연결을 일단 해보자. 해당 사진은 ElasticCache 대시보드에 Redis에 있다. 여러 Npm이있는데, redis를 사용했다. 사람들의 인기도나, 속도, 쓰이는 함수, 업데이트 주기..

    [Node.js, MySQL] Pool.getConnection() 속도 문제

    회사에선 cafe24와 AWS 두 개의 호스팅을 사용한다. 모두 3계층 아키텍쳐를 사용하여, 프레젠테이션 / 애플리케이션 / 데이터베이스의 구조다. 데이터베이스는 기존 쇼핑몰 쪽의 cafe24와 내가 만든 AWS Aurora가 있다. AWS Aurora는 Pool연결이 빠른데, cafe24쪽 db의 첫 연결이 굉장히 느렸다.. 처음 mysql2/promise의 pool연결이 느리고 그 후부턴 빨랐다. 그래서 생기는 문제가 첫로그인시 6초나 걸리는 기현상이 일어났다.. 처음 연결에만 5초가 걸렸다. 끔찍 레퍼런스도 없고 고통받았다. pool을 어플을 켜자마자 한번 강제로 연결시켜버리고, 로그인이 끝나면 Pool을 해제시키니까 시간이 많이 단축됐다. exports.mysqlShopStart = async (..