본문 바로가기

분류 전체보기102

[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.
[NestJS] PostgreSQL 에서의 SQL Injection 방어 0. SQL Injection? 1. 왜 Injection이 되는걸까 2. 어떻게 대비해야할까 SQL Injection?: https://youtu.be/FoZ2cucLiDs?si=9YFOHgu6Iucb9ZCn 이거만큼 injection 설명 잘해놓은게 없다 SQL 인젝션 공격은 웹사이트의 보안 취약점을 이용하여 데이터베이스를 침투할 수 있는 공격 기법이다. 따옴표(')를 입력하여 발생하는 오류 메시지가 공격 가능한지 확인하는 첫 번째 단계이며, 유니온 셀렉트를 이용하여 다른 테이블의 내용까지 출력하는 것도 가능하다. 왜 Injection이 되는걸까? 인젝션이 왜 되는지 더 딥하게 이해하려면, postgreSQL 파싱과정에 이해를 해야한다. 우리가 select 쿼리를 보내면 DBMS내부에서 문법을 검사할.. 2024. 2. 2.
[NestJS] Redis 연동과 Cron으로 업데이트 0. NestJS에서의 Redis 초기세팅 1. 랭킹조회(zset)하기 위한 레디스 명령어 (zadd, zrange) 2. 페이지네이션을 통해 레디스로부터 랭킹 가져오기 3. NestJS Cronjob NestJS에서의 Redis 초기세팅 (ioredis + liaoliaots/nestjs-redis 사용하는 이유) 기본 redis 는 redis 클라이언트 내부에서 사용하는 instruction(zadd, zrange) 을 사용하는게 불가함 또한, 안정성이 기존의 이미지보다 높다고 이야기 한다. (기존 이미지보다 안정성이 높다는건 의외인데 이부분은 더 알아봐야할것같다) 랭킹조회(zset)하기 위한 레디스 명령어 (zadd, zrange) 실시간 리더보드를 구현하기 위한 레디스의 Sorted Set을 사용.. 2024. 2. 1.
반응형