개발일지

개발일지

Nest.JS MySQL 연결

TypeORM으로 데이터베이스 연결 라이브러리 설치 npm i typeorm@0.3.7 @nestjs/typeorm@9.0.0 mysql2 app.module.ts import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; @Module({ imports: [ UsersModule, ConfigModule.forRoot({ //환경변수 파일 지정 envFilePath: ['.development.env'], load: [emailConfig, authConfig], //전역으로 설정옵션 isGlobal: true, validationSchema, }), //AppModule에 TypeOrmModule을 ..

개발일지

Nest.js Pipe

파이프(Pipe) 요청이 라우터 핸들러로 전달되기 전에 요청 객체를 변환할 수 있는 기회를 제공 미들웨어의 역할과 비슷하지만 미들웨어는 애플리케이션의 모든 콘텍스트에서 사용하도록 할 수 없음 => 미들웨어는 현재 요청이 어떤 핸들러에서 수행되는지, 어떤 매개변수를 가지고 있는지에 대한 실행 콘텍스트를 알지 못함 파이프의 목적 변환(trasform): 입력 데이터를 원하는 형식으로 변환, => users/user/1 의 경로 매개변수 1을 문자열에서 정수로 변환 유효성 검사(validation): 입력 데이터가 사용자가 정한 기준에 유효하지 않은 경우 예외 처리를 반환함 파이프의 종류 ValidationPipe 용도: 들어오는 데이터의 유효성 검사를 수행함 @Post() //ValidationPipe를 통..

개발일지

Nest.js 모듈

모듈 여러 작은 단위의 컴포넌트들을 조합하여 큰 작업을 수행할 수 있게 하는 단위 Nest 앱이 실행되기 위해서 하나의 루트 모듈이 존재하고 이 루트 모듈(AppModule)은 다른 모듈들로 구성됨 여러 모듈에 각기 맡은 바 책임을 나누고 응집도를 높이기 위함 유사한 기능끼리 모듈로 묶어야함 import: 이 모듈에서 사용하기 위한 프로바이더를 가지고 있는 다른 모듈을 가져옴 controllers / providers : 모듈 전반에서 컨트롤러와 프로바이더를 사용할 수 있도록 Nest가 객체를 생성하고 주입 export: 이 모듈에서 제공하는 컴포넌트를 다른 모듈에서 가져오기해서 사용하고자 한다면 export를 해야함 AppModule 애플리케이션의 Root 모듈 CoreModule만을 가져오고 Core..

개발일지

Nest.js DB연동

Nest.js RDS 연동 config파일 설정 config폴더에 typeorm.cofig.ts 파일 설정 db와 연동 되는지 확인 import { DataSource, DataSourceOptions } from "typeorm"; export const dataSourceOptions: DataSourceOptions = { type: 'mysql', host: 'HOST', port: 3306, username: '이름', password: '비밀번호', database: 'diedie_backend', entities: [__dirname + '/../**/*.entity.{js,ts}'], synchronize: false, // true로 설정할 경우 서버가 구동될 때마다 테이블이 자동으로 생..

개발일지

Nest MySQL 연동

app.module.ts mysql과 nest.js 매핑 import { Module } from "@nestjs/common"; import { TypeOrmModule } from "@nestjs/typeorm"; import { UsersModule } from "./users/users.module"; @Module({ imports: [ TypeOrmModule.forRoot({ type: "mysql", host: "127.0.0.1", port: 3306, username: "root", password: "1234", database: "test", autoLoadEntities: true, synchronize: true, }), UsersModule, ], }) export class ..

개발일지

Nest.js bull Queue

Bull Quere란? Redis를 기반으로 하는 분산 큐 라이브러리 대기열에 작업을 추가하고 작업자들이 해당 작업을 처리 ex) 요청이 몰릴때 분산하고, 지연 시간을 설정하여 부하를 줄임. Nest.js mp3파일을 업로드하는 bull Queue코드작성 app.module.ts redis에 저장 @Module({ imports: [ BullModule.forRoot({ redis: { host: 'localhost', port: 6379, }, }), AudioModule, ], controllers: [AppController], providers: [AppService], }) export class AppModule {} audio.controller.ts import { InjectQueue }..

개발일지

Nest.js 초기설정

Nest.js 설치 nest.js를 글로벌환경에 설치하고 프로젝트 생성 CLI $ npm i -g @nestjs/cli $ nest new '생성하려는 프로젝트이름' Nest.js 실행 start:dev로 실행시 package.json에 기술된 스크립트에 --watch 옵션이 포함되어 있어서 코드 변경후 저장할때 마다 서버를 자동으로 다시 실행함 npm run start:dev Controller 생성 컨트롤러는 들어오는 요청을 받고 처리된 결과를 응답으로 돌려주는 인터페이스 역할 엔드포인트 라우팅 매커니즘을 통해 각 컨트롤러가 받을 수 있는 요청을 분류 nest g controller '이름' 보일러 플레이트 생성 '이름'에 해당하는 module, controller, service, entity, d..

개발일지

개발일지 86일차

Redis 트래픽 분산 Redis도 트래픽이 늘어나면 한 대의 Redis 인스턴스로는 트래픽 처리가 어려운 상황발생가능, Redis의 트래픽을 분산 시키는 방법중 Cluster와 Master/Slave가 존재함, Redis Cluster master 노드를 여러대 두어 트래픽을 분산 master노드에는 하나 이상의 slave노드를 둘 수 있음 하나의 master 노드가 다운되어도 다른 2개의 master 노드가 존재하기 때문에 redis의 가용성을 높힐 수 있음 데이터를 저장하는 방식은 해시슬롯 이라는 방식을 사용함. CRC-16 해시 함수를 사용해 key를 정수로 변환하고 해당정수값을 16,385로 모듈 연산한 값 cluster는 총 16384개의 해시슬롯이 있으면 각 master노드에 자유롭게 할당이..

index.ys
'개발일지' 카테고리의 글 목록 (3 Page)