프레임워크(9)
-
argon2 vs bcrypt
언젠가 당연하게 bcrypt 를 이용해 비밀번호를 해싱했다.과연 bcrypt 가 최선이 맞을까? 암호화 암호화는 평문을 암호문으로 바꾸는 과정이다.암호화는 가장 기본적인 정보보안 방법으로 그 자체로 데이터의 유출 등을 막지는 못하지만 데이터에 담긴 정보를 알 수 없게 하는 것이 목적이다.bcrypt 가 무엇인가 단방향 암호화를 위해 만들어진 해시 함수 bcrypt 는 sha256 같은 해시 함수들의 문제점을 해결하기위해 설계되었다.sha256 는 원래 암호화를 위해 설계된 것이 아니라 짧은 시간 데이터를 검색하기 위한 자료구조로 설계가 되었다.이 때문에 빠른 속도가 장점이지만 취약점의 원인이 되기도 한다. 그래서 미리 해시값들을 계산해놓은 테이블을 가지고 해시 함수 반환값을 역추적하는 레인보우 테이블 공..
2024.04.25 -
NestJS TypeORM 테이블 생성 with PostgreSQL
선행작업 https://muyeon95.tistory.com/311 TypeORM을 사용해 클래스기반 자동 테이블 생성을 진행해본다. 이는 TypeORM 의 기능이다. // src/posts/entities/posts.entity.ts import { Column, Entity } from 'typeorm'; @Entity() export class PostsModel { @Column() id: number; @Column() author: string; @Column() title: string; @Column() content: string; @Column() likeCount: number; @Column() commentCount: number; } 엔티티 추가 TypeOrmModule.forR..
2023.12.14 -
NestJS TypeORM 설정 및 연결 with PostgreSQL
설치 npm install @nestjs/typeorm typeorm pg typeORM 세팅 app.module.ts 에 세팅한다. import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { PostsModule } from './posts/posts.module'; import { TypeOrmModule } from '@nestjs/typeorm'; @Module({ imports: [ PostsModule, TypeOrmModule.forRoot({ type: 'postgres', // 데이터베이스 타..
2023.12.14 -
Dependency Injection / Inversion of Control [의존성 주입 / 제어의 역전] [NestJS]
인스턴스를 생성하지 않았는데 컨트롤러에서 어떻게 주입을 받고 어떻게 서비스에 대한 권한과 접근이 가능할까? 이는 NestJS의 가장 핵심이 되는 요소중 하나이다. 일반 인스턴스화 클래스 B 를 클래스 A에 사용해야 한다면? class A { const b = B(); } class B { } A라는 클래스를 인스턴스로 만들때마다 A 안에 클래스 B의 인스턴스를 매번 새로 생성하게 된다. DI (Dependency Injection) class A { constructor(instance: B) } class B { } B라는 클래스를 생성을 해서 constructor에 입력해준다. 이를 주입이라고 한다. 외부에서 클래스 A가 생성될 때 무조건 클래스 B에 해당되는 인스턴스를 넣어주도록 정의를 하는 것이다..
2023.12.13 -
NestJS 요청 라이프 사이클 (NestJS Request Lifecycle)
요청 라이프 사이클이란? 요청이 디바이스로부터 서버로 보내진 다음에 응답이 되어서 돌아오는 과정을 전부 표현한 것 NestJS Docs 들어오는 요청 미들웨어 - 전역적으로 바인딩 된 미들웨어 - 모듈 바인딩 미들웨어 가드 - 글로벌 가드 - 컨트롤러 가드 - 라우트 가드 컨트롤러 이전 인터셉터 - 글로벌 인터셉터(컨트롤러 이전) - 컨트롤러 인터셉터(컨트롤러 이전) - 라우트 인터셉터(컨트롤러 이전) 파이프 - 글로벌 파이프 - 컨트롤러 파이프 - 라우트 파이프 - 매개변수 파이프 경로 지정 컨트롤러(메서드 핸들러) 서비스(존재하는 경우) 요청 후 인터셉터 - 라우트 인터셉터(요청 후) - 컨트롤러 인터셉터(요청 후) - 전역 인터셉터(요청 후) 예외 필터(라우트, 컨트롤러, 전역) 서버응답 아래 사진..
2023.12.11 -
nestjs prisma 사용해보기 with AWS RDS
1. Prisma 란? Prisma Client : NodeJS 와 TypeScript 전용 Type Safe 및 자동 생성 쿼리 빌더 Prisma Migrate : Migration system, 데이터 모델링 Prisma Studio : GUI 를 통해 DB 를 수정할 수 있는 기능 -Prisma Docs- 2. 왜 Prisma 를 사용하는가 Prisma 의 목적은 데이터베이스 작업 시 개발자의 생산성을 높이는 것이다. 관계형 데이터를 매핑하는 것 대신 객체를 사용 복잡한 모델 객체를 피하기 위해 클래스가 아닌 쿼리를 사용 데이터베이스 및 어플리케이션 모델을 위한 Single source of Truth 이론(정보의 중복, 비적 합성 등의 문제를 해결하기 위한 이론) 흔한 함정과 안티패턴을 막기 위한..
2023.12.04