분류 전체보기
[DB] db에 데이터넣기, 인덱스
* db에 데이터 넣기초안문제 : connection timeout error-- User 테이블 생성CREATE TABLE IF NOT EXISTS `User` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `nickname` VARCHAR(30) NOT NULL, `rank` INT NOT NULL CHECK (`rank` BETWEEN 1 AND 10), `money` BIGINT NOT NULL CHECK (`money` BETWEEN 1 AND 99999999), `start_date` DATE NOT NULL, `last_login` DATETIME);-- 인덱스 생성CREATE INDEX idx_user_rank ON `User`(`rank`);CREATE..
[Nest] Exception Filter 구현
* 개념주로 에러발생시 모니터링시스템 API 호출등에 사용된다.로그파일 생성* 구현간단하게 res를 바꿔주는 ExceptionFilterimport { ArgumentsHost, Catch, ExceptionFilter, HttpException } from "@nestjs/common";@Catch(HttpException) //모든예외는 HttpException의 자식임 -> 이 예외를 잡겠다.export class HttpExceptionFilter implements ExceptionFilter { catch(exception: HttpException, host: ArgumentsHost) { const context = host.switchToHttp(); const req = c..
[Nest] Interceptor => logger 구현, @Transactional 구현
* 개념res, req에 둘다 실행되는 특징이 있다.로거, @Transactinoal 등에 유용하다.res, req에 모두 반복되는 공통 로직을 처리하고싶을때 사용하면 좋다. * 로거구현import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from "@nestjs/common";import { Observable, map, tap } from "rxjs";import {v4 as uuid} from 'uuid';@Injectable()export class LogInterceptor implements NestInterceptor { intercept(context: ExecutionContext, next: CallHandler)..
[Nest] Transaction 구현
* 설계이미지가 생성되고post 생성되고 를 묶어서all or nothing으로 만들고자 함. * 구현컨트롤러에서 dataSouce 를 주입받음.이걸로 db와 통신할수있는 api임.컨트롤러주의할점은, controller, service에서 같은 qr을 사용해야 트랜잭션이 적용된다는점임이를위해 서비스에서 getRepository 함수를 만듬.@Controller('posts')export class PostsController { constructor( private readonly postsService: PostsService, private readonly dataSource: DataSource, ) {}@Post()@UseGuards(AccessTokenGua..
[Next] 연관관계 매핑, ImageModel 생성 구현
* 설계이미지가 생성되고post 생성되고 를 묶어서all or nothing으로 만들고자 함. * image table 생성post 는 여러개의 image를 가진다.import { BaseModel } from "./base.entity";import { IsEnum, IsInt, IsOptional, IsString } from "class-validator";import { Column, Entity, ManyToOne } from "typeorm";import { Transform } from "class-transformer";import { join } from "path";import { POST_PUBLIC_IMAGE_PATH } from "../const/path.const";import ..
[Nest] 이미지 업로드 구현V2
기존의 문제이미지는 용량이큼 -> 사용자가 모두 업로드후 서버로보내면 시간이오래걸림 -> 느린사이트 -> 앱 삭제해결이미지를 업로드할때 바로 temp 폴더에 업로드해버림업로드 버튼을 누르면, 업로드될 이미지를 txt로 받아서 처리함이후에 서버에서 temp에서 posts 폴더로 이미지들을 옮기면 됨. * 구현 Multermodule을 common 모듈로 옮겨준다.//임시파일들을 저장할 폴더// /public/tempexport const TEMP_FOLDER_PATH = join( PUBLIC_FOLDER_NAME, TEMP_FOLDER_NAME,)@Controller('common')export class CommonController { constructor(private readonly comm..
[Nest] 이미지 업로드 구현 V1
post 컬럼추가@Column({ nullable:true,})image?: string;이미지 저장할 절대경로, 상대경로 추가import {join} from 'path';//서버 프로젝트의 루트폴더 절대경로export const PROJECT_ROOT_PATH = process.cwd();export const PUBLIC_FOLDER_NAME = 'public';//포스트 이미지들을 저장할 폴더 이름export const POSTS_FOLDER_NAME = 'posts';//공개폴더의 절대경로// /{}/publicexport const PUBLIC_FOLDER_PATH = join( PROJECT_ROOT_PATH, PUBLIC_FOLDER_NAME)//포스트 이미지를 저장할 폴더/// /{..
[Nest] 환경변수 .env 구현
.envJWT_SECRET=tempHASH_ROUNDS=10PROTOCOL=httpHOST=localhost:3000DB_HOST=localhostDB_PORT=5432DB_USERNAME=postgresDB_PASSWORD=postgresDB_DATABASE=postgresnpm 설치yarn add @nestjs/config앱 모듈에 import@Module({ imports: [ UsersModule, PostsModule, ConfigModule.forRoot({ envFilePath: ".env", isGlobal: true, //모든서비스에 자동 import }), * 서비스 코드 수정서비스 주입@Injectable()export class AuthSer..