전체 글
-
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..
-
[클린 코드 2장] 의미 있는 이름이 제일 어렵다공부하기/개발서적 2023. 3. 18. 02:09
과거에 내가 의미 있는 이름이라고 착각했던 것들 [CASE_1] const userList = await userRepo.findAll(); [CASE_2] const result = await uRepo.findAll(); [CASE_1]의 문제점 반환되는 데이터의 타입을 변수명에 넣은것 [CASE_2]의 문제점 result라는 변수명으로 어떤 데이터인지 추측하기 어려움 uRepo또한 u가 무엇을 의미하는지 생각해봐야함 개선 const users = await userRepogitory.findAll(); users로 여러명의 유저가 반환된다는 정보를 줄 수 있음 uRepo -> userRepogitory로 변경함으로 누구나 예측할 수 있음 나쁜 이름으로 고생한 경험 예전 기업부설 연구소에서 신입 프론..
-
NestJs, Redis 캐싱 기록공부하기/node.js 2023. 3. 12. 13:46
과거 프로젝트를 진행할 때 조인이 많이 걸린 테이블 행의 상세 정보(findOne)를 데이터베이스에서 select할 경우 쿼리 속도가 굉장히 느렸던 경험이 있습니다. 테이블간의 관계가 많고 테이블 행의 갯수가 많을 수록 select 하는 시간은 오래걸리기 때문에 요청한 클라이언트에 대한 응답은 느릴 수 밖에 없었던 것입니다. 이 포스팅은 ' 이러한 문제를 어떻게 해결해야할까? '에서 출발하였습니다. 물론 데이터베이스 쿼리 실행계획을 고려한 쿼리 최적화 및 테이블 인덱스 설정이 우선이지만 이 포스팅에서는 다루지 않겠습니다. 테스트는 실제 데이터베이스에 연결하지는 않지만 sleep 함수를 통해 쿼리에 1초 딜레이를 발생시켜 쿼리를 수행한다고 가정합니다. - 레디스 전략 중 Look Aside (Lazy Lo..
-
NestJs @CacheTTL() not working이슈 기록 2023. 3. 12. 11:39
개발 버전 nestjs : 9 version cache-manager : 5 version 에러 발생 코드 import { CacheModule, Module } from '@nestjs/common'; ... @Module({ ... }) export class UserModule {} @CacheTTL(4) @Get() @UseInterceptors(CacheInterceptor) ... findAll( ... ) { ... } 에러 내용 @CacheTTl 데코레이터에 설정한 시간이 재대로 동작하지 않는다. 원인 네스트 9 버전은 cache-manager 5 버전과 재대로 호환되지 않음 해결 방법 cache-manager을 4 버전으로 다운그레이
-
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, // 캐싱 데이터 수 }..
-
Redis Data Types 요약공부하기/데이터베이스 2023. 3. 3. 21:00
Keys 레디스 key는 binary safe하며 "tscalm" 같은 문자열에서 JPEG 파일까지 모든 바이너리 시퀀스를 키로 사용할 수 있고 빈 문자열도 유효한 키이다. 키에 대한 몇 가지 다른 규칙: 긴 키 네임은 조회 비용이 많이 들기 때문에 권장되지 않는다. 키 네임이 짧은 것 또한 무조건 좋은게 아니다. 예를 들어 (1)user:1000, (2)u1000 두개의 키가 존재할 때 (1번)이 더 가독성이 좋고 키를 저장하거나 조회하는데 사용되는 메모리의 차이는 신경쓸 정도가 아니다. object-type:id 같은 스키마를 정의해서 사용하며 여러 단어로 이뤄진 필드는 . 또는 - 로 구분한다. 예를 들어 "comment:4321:reply.to" or "comment:4321:reply-to". ..
-
Mac m1 Redis 설치 기록공부하기/데이터베이스 2023. 3. 3. 19:56
1. 홈브루 버전 체크 명령으로 홈브루가 컴퓨터에 설치되어 있는지 체크한다. brew --version // 응답 Homebrew 4.0.4 Homebrew/homebrew-core (~~~어쩌구저쩌구) 2. 홈브루를 통해 레디스를 설치한다. brew install redis 3. 포그라운드 실행 명령으로 레디스가 정상적으로 동작하는지 확인한다. redis-server -> 정상적으로 실행될 경우 종료 명령은 ctrl + c 입니다. 4. 백그라운드로 레디스를 시작합니다. brew services start redis // 응답 ==> Successfully started `redis` (label: homebrew.mxcl.redis) 5. 백그라운드 레디스를 상태를 확인합니다. brew service..