공부하기/node.js
-
NodeJs 동기(블로킹)와 비동기(논블로킹) 분석 기록공부하기/node.js 2023. 5. 7. 17:49
사전지식 - 블로킹은 Node.js 프로세스에서 추가적인 JavaScript의 실행을 위해 JavaScript가 아닌 작업이 완료될 때까지 기다려야만 하는 상황입니다. 이는 이벤트 루프가 블로킹 작업을 하는 동안 JavaScript 실행을 계속할 수 없기 때문입니다. - Node.js 표준 라이브러리의 모든 I/O 메서드는 논블로킹인 비동기 방식을 제공하고 콜백 함수를 받습니다. 일부 메서드는 같은 작업을 하는 블로킹 메서드도 가지는데 이는 이름 마지막에 Sync가 붙습니다. 테스트 환경 - Mac M1 Pro - Node v18.13.0 - VueJs - NestJs 테스트 코드 fe vue.js async mounted() { let testCount = 10; const httpRequest = a..
-
TypeOrm Migration 학습공부하기/node.js 2023. 4. 8. 14:10
* 운영 데이터베이스라고 가정하기 때문에 synchronize: false * 탐색한 마이그에이션 명령 목록 typeorm migration:create 비어있는 마이그레이션 파일이 생성된다. 생성된 마이그레이션 파일에 변경하고자 하는 스키마 sql문을 작성한다. migration:run 명령을 통해 적용한다. typeorm migration:generate 변경된 내용을 감지하고, 변경 사항을 새로운 마이그레이션 파일로 생성한다. 자동으로 변경 내용을 sql문으로 생성해준다. migration:run 명령을 통해 적용한다. typeorm schema:sync migration 파일이 따로 생성되지 않는다. 엔티티를 업데이트 한 후 typeorm schema:sync 명령으로 마이그레이션을 진행한다. m..
-
NestJs, Redis 캐싱 기록공부하기/node.js 2023. 3. 12. 13:46
과거 프로젝트를 진행할 때 조인이 많이 걸린 테이블 행의 상세 정보(findOne)를 데이터베이스에서 select할 경우 쿼리 속도가 굉장히 느렸던 경험이 있습니다. 테이블간의 관계가 많고 테이블 행의 갯수가 많을 수록 select 하는 시간은 오래걸리기 때문에 요청한 클라이언트에 대한 응답은 느릴 수 밖에 없었던 것입니다. 이 포스팅은 ' 이러한 문제를 어떻게 해결해야할까? '에서 출발하였습니다. 물론 데이터베이스 쿼리 실행계획을 고려한 쿼리 최적화 및 테이블 인덱스 설정이 우선이지만 이 포스팅에서는 다루지 않겠습니다. 테스트는 실제 데이터베이스에 연결하지는 않지만 sleep 함수를 통해 쿼리에 1초 딜레이를 발생시켜 쿼리를 수행한다고 가정합니다. - 레디스 전략 중 Look Aside (Lazy Lo..
-
NestJs Cache 탐색 및 기록공부하기/node.js 2023. 3. 9. 19:09
그림으로 이해하기 1. in-memory에 캐싱 데이터가 존재할 경우 엔드포인트를 거치지 않고 곧바로 캐싱 데이터를 리턴 2. 캐싱 데이터가 존재하지 않을 경우 DB 탐색 후 데이터를 캐싱 후 리턴 @nestjs/common 모듈의 cache-module 캐시 탐색 및 기록 예제 코드 import { CacheModule, Module } from '@nestjs/common'; import { UserController } from './user.controller'; import { UserService } from './user.service'; @Module({ imports: [ CacheModule.register({ ttl: 5, // 캐싱 만료 시간 max: 10, // 캐싱 데이터 수 }..
-
NestJs Swagger 문서 만들기공부하기/node.js 2023. 3. 2. 22:02
Swagger가 뭐야? API 문서화 툴로서, API의 요청/응답 데이터, 파라미터, 경로, 헤더 등 API를 이용하는 데 필요한 모든 정보를 제공합니다. 또 API를 이용하는 클라이언트가 API를 쉽게 이해하고, 테스트할 수 있으며, 개발자는 API의 사용 방법을 명확하게 이해할 수 있습니다. 저희는 NestJs에서 소개하는 @nestjs/swagger 모듈을 사용하여 스웨거 문서를 만들도록 하겠습니다. @nestjs/swagger를 사용하여 swagger 문서 만들기 1. 모듈 install npm install --save @nestjs/swagger 2. main.ts에서 swagger setup main.ts async function bootstrap() { ... const config = ..
-
헥사고날 NestJs, TypeOrm dto type 리펙토링공부하기/node.js 2023. 2. 26. 19:18
간단한 설문조사 프로젝트를 만들던 중 문득 의문이 들었다. 의문 인바운드 포트와 아웃 바운드 포트의 인풋, 아웃풋이 같은 경우가 상당히 많은데 구지 똑같은 타입을 여러개 선언할 필요가 있을까?? TypeOrm을 사용하기 때문에 엔티티의 클래스와 TypeScript의 유틸리티 타입을 사용하면 유지보수 측면에서 더 좋지 않을까? 리펙토링 도전 before survey/out-port/survey-findone.op.ts 인바운드 포트, 아웃바운드 포트의 output 타입은 같습니다. export type SurveyFindOneOutPortOutputDto = { id: number; name: string; description: string; question: Array; }; after survey/t..
-
NestJs Controller @Query Pipe 기록공부하기/node.js 2023. 2. 25. 01:38
컨트롤러의 엔드포인트에서 @Query 데코레이터를 사용하여 page, size, sort 변수값을 핸들링 하는 과정을 기록하는 포스팅 통과 기준 page, size, sort 변수값을 입력하지 않을 경우 default value 리턴 page, size, sort의 타입이 일치하지 않는 경우 에러 리턴 page, size, sort 변수 중 일부를 제외한 요청에 정상 작동해야 한다 @Query() 변수에 기본값을 설정한 후 리턴 실험 코드 enum SORT_OPTION { ASC ='ASC', DESC = 'DESC' } @Get('find') async findAll( @Query('page') page: number = 1, @Query('size') size: number = 10, @Query( ..
-
NestJs TypeOrm Exception공부하기/node.js 2023. 2. 24. 20:09
소프트웨어를 개발하면서 예외처리는 필수 사항이다. 만약 예외 상황이 발생할 경우 프로그램이 강제로 종료될 수 있어 사용자에게 나쁜 경험을 제공하며 심각할 경우 데이터 손실을 초래할 수 있다. 예외 처리를 통해 발생한 오류 메시지를 적절하게 처리하면, 디버깅과 오류 추적이 용이해지고 오류가 발생한 원인과 위치를 파악할 수 있다. 또 예기치 않은 입력이나 상황에 대응할 수 있어 안정성을 높이고 예외 상황에 대한 처리 방법을 명시적으로 나타내 코드의 가독성을 높여준다. 목표 예측 가능한 에러 httpException 처리 Http Response 값 체크 후 에러 처리 query error 전부 핸들링 데이타베이스 에러는 전부 500 에러로 처리 개발자의 실수로 발생한 서버에러 핸들링 개발자의 실수로 발생하는..