JS 공부/NestJS 5

[NestJS] 쿼리 헤치우기(2. 트랜잭션화 하기, 그리고 이걸로 테스트하기 === 왜이래이거;;)

https://jangsarchive.tistory.com/147 [NestJS] 쿼리 헤치우기(1. 인덱스 넣기 & 쓸데없는 쿼리 줄이기) 부스트캠프에서 프로젝트를 진행하면서, 전체 테스트를 실행할 때 항상 13~16초의 시간이 걸렸다. 테스트가 약 260개정도였을 때 이 정도가 나온다고 했을 때, 초당 20개의 테스트가 돌아간다고 생 jangsarchive.tistory.com 기존 쿼리 최적화를 보고 오는 것도 추천한다. 이걸 하고 나서 그 다음에 처리한 과정이기 때문이다. 트랜잭션이란? 그리고 트랜잭션화의 필요성 데이터베이스를 사용할 때 트랜잭션이란 무엇일까? 정말 간단하게, 트랜잭션은 DB에 보내는 쿼리를 묶음이라고 생각하면 된다. 쿼리를 하나씩 계속 보내는 것이 아닌, 하나를 통째로 보내서 성..

JS 공부/NestJS 2023.12.13

[NestJS] 헬스체크?? 라잇웨잇베이베!!!(Cron, HealthCheck로 주기적으로 서버 확인하기, 로깅하기)

부스트캠프 팀 프로젝트를 진행하면서, 서버의 상태를 확인하는 플로우를 만들어야 했다. 쉘스크립트를 crontab을 이용해서 slack에 서버 상태 메시지를 보내는 방법을 만들었지만, 이걸로는 부족했다. 내가 원하는 것은 일종의 서버실이었다. 서버 하나에서 DB, Main서버를 계속해서 확인하는 로직을 원했다. 로컬에서도 실행시켜 서버 상태를 계속 확인하고, 다른 서버에서 주기적으로 시그널링을 처리했으면 좋겠다는 생각을 했다. 그래서 어떻게 처리했을까? 크게 라이브러리 추가, 모듈 구현, 프로바이더 구현으로 나누어보았다. 라이브러리 추가 이 동작을 구현하기 위해서, 3가지 라이브러리를 추가했다. npm install @nestjs/terminus npm install @nestjs/schedule npm ..

JS 공부/NestJS 2023.12.13

[NestJS] Team NDD. 영상 인코딩~클라우드 업로딩까지의 험난한 여정(그리고 쓰지 못한 이유...)

간단하게 팀 NDD에 대해서 설명을 해...주진 않겠다. 궁금하면 팀 블로그를 보는 것도 방법이지!!! 왜 우리는 인코딩을 해서 클라우드 스토리지에 올리려는 계획을 세웠을까? 기존에는 클라이언트에서 녹화한 webm파일을 바로 클라우드 스토리지에 전송시키는 방식을 이용했다. 이 방식은 클라이언트가 백엔드에게 녹화한 면접 영상의 이름을 만들기 위한 데이터를 준다(우리는 질문 이름과 jwt토큰을 주었다) 백엔드에서는 해당 정보로 영상 이름(key : 회원이름_질문내용_uuidv4()을 url에 받을 수 있게 파싱했다)와, presigned-url(영상을 저장할 권한을 미리 담아둔 url)을 보내주었다. 클라이언트에서 presigned url로 영상 저장을 요청하면 저장한 영상의 주소가 나온다. 영상의 주소와 ..

JS 공부/NestJS 2023.12.10

[NestJS] 쿼리 헤치우기(1. 인덱스 넣기 & 쓸데없는 쿼리 줄이기)

부스트캠프에서 프로젝트를 진행하면서, 전체 테스트를 실행할 때 항상 13~16초의 시간이 걸렸다. 테스트가 약 260개정도였을 때 이 정도가 나온다고 했을 때, 초당 20개의 테스트가 돌아간다고 생각했다. 하지만 나는 더, 더 빨라지길 원했다... 그래서 모든 API의 쿼리 로그를 분석해보기 시작했다. 이렇게 모든 로깅을 true로 설정하고, 로그를 분석하면서 조금씩 메모를 진행했다. 쓰다보니, 필요한 부분과, 이게 꼭 있어야 할까 싶은 부분들이 있었다. 이에 대한 간단한 정리들과, 내가 처리한 방법을 공유해보려고 한다. SAVE repository.save라는 로직을 정말 흔하게 사용했다. 이유는? 겁나게 편했다. 진짜 다른 뭔가를 생각할 필요가 없었다. 하지만 편하다는건? 라이브러리처럼 그 속에서 겁..

JS 공부/NestJS 2023.12.05

[NestJS] Spring을 공부하다 왔을 때 처음 낯설던 것(DTO)

SpringBoot에서 @RequestBody를 통해 dto 객체를 받을 수 있었다. 똑같은 로직을 생각하고, RegisterRequest객체를 js에서 아래와 같이 만들었다. const EMAIL_REGEX = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/; export class RegisterRequest{ username:string; nickname:string; email:string; password:string; passwordCheck:string; constructor(username:string, nickname:string, email:string, password:string, passwordCheck:string) { this.usern..

JS 공부/NestJS 2023.11.03