본문 바로가기

NestJS8

[NestJS] nestJS 소켓통신 (part2. 채널마다 fetchSockets를 통한 메세지 보내주기) 0. 배경 1. 해결방법 0. 배경 서로 구분되는 채널에다가 메세지를 보내줄 수 있도록 구현이 필요했었다. 처음에는 socket.io에서 지원하는 room 을 통해 채널id 내부에있는 소켓들에게 메세지를 보내주는 식으로 고안했는데.. 하나의 소켓이 다른 채널(룸) 으로 참여할 때 기존의 룸에서 메세지를 보내도 다른 채널에서 메세지가 보이는(!) 문제가 발생했다. 그래서 아래와 같이 다른 채널에서 메세지를 보낼 때 구분하기 위해 channelId 와 메세지 내용을 객체로 던져주는 방식을 생각했다. const eventMessageEmitDto = { nickname: user.nickname, message, channelId, }; 이러한 과정중에 room으로 들어가기 위해 소켓을 가지고 와야하는 과정이.. 2024. 2. 8.
[NestJS] nestJS 소켓통신 (part1. 기본설정) 0. 웹소켓의 특징, 한계 1. Socket.io? 2. Lifecycle hooks 3. Postman으로 연결 테스트 웹소켓의 특징 양방향 송수신 가능(Full duplex) 데이터 송수신을 동시에 처리할 수 있는 통신방법 클라이언트와 서버가 서로 원할 때 데이터를 주고 받을 수 있음 ws 프로토콜을 사용하면 웹소켓 포트에 접속해 있는 모든 클라이언트에게 이벤트 방식으로 응답함 통상적인 http 통신은 단방향 통신임 실시간 네트워킹 가능(Real-time Networking) 채팅, 주식, 비디오 등 웹 환경에서 연속된 데이터를 빠르게 노출함 여러 단말기에서 빠르게 데이터 교환할 수 있음 웹소켓의 한계 HTML5에 최적화 된 프로토콜이기 때문에 HTML5 이전의 기술로 구현된 서비스에서는 동작하지 않.. 2024. 2. 8.
[NestJS] TypeORM Tips1 (Part 1: Don't use save()) (해당 포스트는 아래의 내용을 기반으로 작성되었습니다.) https://dev.to/rishit/optimizing-typeorm-tips-from-experience-part-1-dont-use-save-4ke9 1. save()를 쓰게되면 무엇이 문제인가 2. 왜 나쁜가? 2. 어떻게 고쳐야 잘 쓸 수 있을까? .save()를 쓰게되면 무엇이 문제인가 Repository 내부의 save는 두가지 역할을 한다. (엔티티가) 없으면 생성 (It inserts the entity if it doesn't already exist.) (엔티티가) 있으면 업데이트 (If the entity exists, it attempts to update the existing one.) 그러나 save는 위의 과정이 한.. 2024. 2. 7.
[NestJS] bcrypt로 패스워드 해시화 하기 0. 배경 1. bcrypt? 2. 용례 및 주의점 배경 사용자 정보를 담고있는 DB에서 암호를 해시화 시킬 필요가 있다고 생각해서 bycrypt 로 해싱 시켜주었는데 한번만 업데이트 되고 이후 업데이트에선 해싱되지 않아서 알아보게 되었다. bcrypt? bcrypt 이전에 'crypt' 라는 함수를 통해 유닉스(Unix) 시스템에서 비밀번호를 해싱하기 위해 처음 도입된 함수가 있었다. 그러나, 기본적인 crypt 함수는 솔트를 사용하여 해시 충돌의 위험을 줄였지만, 초기 버전은 현대의 컴퓨팅 파워에 의해 쉽게 깨질 수 있는 약한 해싱 알고리즘을 사용했다고 한다. 이러한 배경으로 나오게 된게 bcrypt 이다. bcrypt는 'Blowfish' 알고리즘을 사용했는데 이를 통한 이점은 다음과 같다. Bl.. 2024. 2. 6.
[NestJS] 요즘 MZ들은 NGINX 대신 mkcert 쓴다. 0. 배경 1. SSL / TLS? 2. mkcert? Nginx? 배경 백엔드에서는 res.cookie를 통해 accessToken과 refreshToken을 넣어줬는데, 프론트엔드에서는 쿠키를 받지 못했다. auth.controller.ts res.cookie('accessToken', jwtAccessToken, { httpOnly: true, secure: true, sameSite: 'none', expires: new Date(Date.now() + 1000 * 60 * 60 * 24 * 7), }); SameSite=None으로 설정했는데 이 경우 Secure 옵션은 항상 true여야 한다. localhost 에서 포트번호만 3000(BE), 8000(FE)로 다르게 해서 개발하고 있기 때문.. 2024. 2. 5.
[NestJS] NestJS 에서 Swagger을 사용해보자 스웨거란? API 명세서이며, 자동으로 구현한 api를 문서화 시켜주어서 명세서를 쉽게 구현할 수 있다. 파라미터, 에러코드 등 swagger으로 정리하면 프론트와 백 효율적인 소통이 가능하게 해준다는 장점이 있다. NestJS 이외에도 Express, Spring에서도 Swagger을 지원하기 때문에 다른 프레임워크 적용에 있어서 러닝커브가 낮다. npm setup $ npm install --save @nestjs/swagger 맨처음 initializing 시켜주는건 main.ts에서 진행하고 있지만 기타 셋업들을 swagger.config로 따로 분리해서 구현했다. main.ts import { setupSwagger } from './config/swagger.config'; ... setupS.. 2024. 2. 4.
반응형