공부하기/node.js
-
NestJs TypeOrm 엔티티 공통 컬럼 관리공부하기/node.js 2023. 2. 24. 18:38
TypeOrm을 사용하여 엔티티를 선언할 때 공통적으로 들어가는 컬럼들을 모든 엔티티에 하나하나 선언하는건 유지보수 측면에서 너무 불편하다고 판단했다. 예를들어 id, created_at, updated_at가 있다. 공통적으로 여러 엔티티에서 사용하는 컬럼들은 쉽게 관리할 수 있도록 추상클래스에 선언한 후 추상 클래스를 extends사용할 계획이다. 클래스가 아닌 추상 클래스를 선택한 이유 : 직접 사용할 일이 없기 때문에 추상 클래스를 선택 1. 공통적으로 사용될 id, created_at, updated_at 컬럼이 선언된 BaseEntity 추상 클래스를 선언한다. import { CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColum..
-
NestJs TypeOrm MySql Entity Name Error공부하기/node.js 2023. 2. 24. 18:05
NestJs + TypeOrm을 사용해서 프로젝트를 진행하던 도중 Option 엔티티의 테이블명을 따로 지정하지 않고 프로젝트를 진행했다. seed data를 넣고 테스트를 하던 중 option 테이블의 인덱스 목록을 확인하고자 SHOW INDEXES FROM option 명령을 진행하니 아래와 같은 에러가 발생했다. 테이블 명을 question_option 과 question-option으로 바꿔서 진행했지만 동일한 에러가 발생했다. 1. index 확인 불가 2. 테이블 명을 question-option 또는 question_option으로 변경 후 select 명령 실행 시 아래와 같은 에러가 발생 해결 방안 1. `option` 와 같이 백쿼드로 감싸고 사용한다. -> 여러가지 상황을 고려한다면 ..
-
MySql [ Like, Full Text Index ] 테스트공부하기/node.js 2023. 2. 24. 16:43
MySql 테이블 테스트 환경 AWS RDS MYSQL db.t3.micro 클래스 survey(설문지) 각 설문지는 5개의 Question(질문)을 갖는다. Question(질문지) 각 질문지는 4개의 Question_opt(선택지)를 갖는다. 설문지, 질문지, 선택지 각 테이블의 더미 데이터는 250만개~ 270만 설문지 찾기, 설문지 상세 두개 메서드를 테스트 진행 ERD 인덱스 적용 전 LIKE 검색 실행코드 select id, name, description from survey where name like "%Odio iure%" limit 10; 실행계획 5번 실행 결과 : 0.005, 0.004, 0.004, 0.004, 0.005 sec 인덱스 적용 후 LIKE 검색 적용 전과 실행계획,..
-
nestjs, typeorm-extension을 사용한 seeding공부하기/node.js 2023. 2. 22. 03:34
https://github.com/tsCalm/new-nest-survey/tree/seeder GitHub - tsCalm/new-nest-survey Contribute to tsCalm/new-nest-survey development by creating an account on GitHub. github.com 위 이미지의 빨간 박스를 친 부분에 대한 seeding 작업을 진행합니다. 개념 Seeder 데이터베이스에 데이터를 삽입하는 방법 중 하나 개발자들이 원하는 데이터를 자동으로 생성하고 데이터베이스에 추가할 수 있는 프로그램 Seeder는 일반적으로 데이터베이스 구성 파일과 함께 사용 개발자들은 Seeder를 실행하여 데이터를 자동으로 생성 및 삽입할 수 있다 Seeding Seeder를 ..
-
4. NestJs & Hexagonal - [ 테스트 ] - 실패하는 테스트가 성공하도록 최소한으로 구현하기공부하기/node.js 2023. 2. 14. 18:46
지난 포스팅글로 실패하는 survey module의 crud 및 search 메서드의 실패하는 테스트 케이스를 작성했습니다. 이번 포스팅으로 실패하는 테스트가 성공할 수 있도록 최소한으로 구현해보도록 하겠습니다. 포스팅으로 사용되는 코드는 Create 메서드를 기준으로 작성했습니다. 코드는 여기를 참고해주세요 survey module import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { CREATE_SURVEY_INBOUND_PORT } from './in-port/survey-create.ip'; import { CREATE_SURVEY_OUTBOUND_PORT } from './..
-
3. NestJs 설문조사 미니 프로젝트 - [ 테스트 ] - 실패하는 테스트 케이스공부하기/node.js 2023. 2. 14. 18:37
지난 포스팅에서 작성한 in bound port, out bound port, service를 사용하여 실패하는 테스트 케이스를 작성하도록 하겠습니다. 실패하는 테스트 케이스를 작성한 뒤 각각의 테스트 케이스가 통과할 수 있도록 구현할 예정입니다. 지난 포스팅에서 모든 서비스의 execute의 리턴값을 null로 설정했기 때문에 이번 포스팅에서 작성된 모든 테스트 케이스는 실패합니다. 설문지 목록(findAll) 테스트 케이스 import { SurveyFindAllInPortInputDto, SurveyFindAllInPortOutputDto, } from '../../in-port/survey-findall.ip'; import { SurveyFindAllService } from '../survey..
-
2. NestJs & Hexagonal - [ ports ]공부하기/node.js 2023. 2. 12. 20:52
헥사고날 아키텍처로 애플리케이션을 만들기 위해서 우선 in-bound-port, out-bound-port 인터페이스와 dto의 타입을 미리 선언하고 in bound port를 implements한 service를 사용하여 테스트 케이스를 작성할 생각입니다. 구현된 서비스는 모두 null을 리턴하고, 곧 작성할 테스트 케이스에서 실패하는 테스트 케이스를 작성하는데 활용할 예정입니다. 전체 코드는 여기를 참고해 주시고 이 포스팅은 Survey Create 과정을 기준으로 진행됩니다. survey-module 디렉토리 구조 Survey Create UseCase SurveyController : 컨트롤러는 service를 의존하는 것이 아닌 in bound port인 interface를 의존한다. Creat..
-
1. NestJs 설문조사 미니 프로젝트 - [ 엔티티 ]공부하기/node.js 2023. 2. 12. 19:56
각 모듈을 구현하기 전 엔티티를 설계합니다. 인덱스는 설정하지 않았습니다. 초기 버전의 엔티티를 미리 설계한 후 구현하면서 필요한 부분을 수정하는 방향으로 포스팅을 이어나갈 생각입니다. ERD 하나의 설문지는 여러개의 질문을 갖을 수 있고 하나의 질문은 여러개의 보기를 갖을 수 있는 구조입니다. 응답하는 유저 테이블과 유저 응답테이블이 존재하고 유저 응답 테이블의 경우 질문 테이블과 관계를 갖습니다. response 테이블의 경우 survey_id를 따로 저장하지 않았습니다만, 성능테스트를 통해 survey_id를 넣는것이 더 좋은 성능을 갖는다면 추가하는 방향을 생각하고 있습니다. Entities src/survey/Survey.entity.ts import { Question } from '../qu..