본문 바로가기
반응형

JavaScript & TypeScript34

NestJS에서 응답/요청 객체 직렬화 (Serialization) 하기 저 같은 경우에 최대한 Dto를 불변으로 만들기 위해 setter나 public 필드는 배제하는데요. 어쩔수 없이 public 필드 (혹은 public setter)를 써야하는 경우 (TypeORM의 Entity 등)를 제외하고는 무조건이다 싶을 정도로 딱 필요한 정도로만 외부 제공용 메소드를 만들어서 사용합니다. 이를 위해서는 Controller에서 사용하는 응답/요청 Dto 객체의 직렬화는 필수로 진행하게 됩니다. 이번 시간에는 이런 상황등을 대비해서 응답/요청 객체의 직렬화 하는 방법을 진행해보겠습니다. 1. 응답 객체 직렬화하기 흔히 소프트웨어 설계에서 이야기하는 응집도(cohesion)와 결합도(coupling)가 있습니다. 좋은 코드 디자인이라 하면, 높은 응집도 / 낮은 결합도로 설계해야 하.. 2021. 10. 24.
Jest CLI 대신에 WebStorm Run (Debug)로 수행하자 NodeJS 통합 테스트를 CLI (jest)로 수행 하는 모습을 자주 보는데요. 개인적으로는 단순 CLI로 수행하기 보다는 디버깅을 비롯해서 IDE가 지원하는 강력한 테스팅 환경을 사용하기 위해서 IDE로 수행하는 것을 추천합니다. 이번시간에는 CLI 보다 IDE로 통합 테스트를 수행하는 방법의 장점을 알아보겠습니다. 1. 장점 먼저 깔끔하게 정리된 테스트 레포트를 볼 수 있는데요. 아래와 같이 지정해놓은 테스트 로그를 숨기고 결과만을 정리 해서 보여줍니다. 기존 CLI에서는 테스트를 수행하는 동안 발생한 콘솔 로그 때문에 (특히 debug 용도로 찍어놓은 ㅠ) 정작 중요하게 봐야할 부분을 놓치기도 하는데요. 해당 테스트에서만 발생한 로그를 골라서 볼 수 있습니다. 추가적으로, 디버거를 사용할 수 있어.. 2021. 10. 19.
NestJS (with Mono Repo) WebStorm으로 디버깅 하기 NestJS 공식 문서에서는 아래와 같이 CLI로 서비스 실행을 소개하곤 하는데요. nest start --watch 물론 대부분의 백엔드 API 개발에 있어서는 nest start 를 쓸 일이 거의 없습니다. 대부분 테스트 코드로 단위 테스트 / E2E 테스트를 작성하면서 진행하다보니 서버 실행할 이유가 없기 때문입니다. 어떤 개발 환경에서도 터미널만 있으면 실행할 수 있으니 좋습니다만, 이럴 경우 WebStorm/IntelliJ 등 디버깅 기능이 강력한 IDE의 도움을 못받습니다. 개발에 있어서 디버거의 사용유무는 중요합니다. 실시간 데이터 변경 흐름 파악 특정 지점에서의 별도 로직 수행 Logger를 추가할 수 없는 외부 라이브러리에 대한 코드 추적 등등 디버거를 통해 좀 더 깊게 문제를 확인할 수.. 2021. 10. 16.
TypeORM에서 연관관계 유지한채 FK만 제거하기 (w. NestJS) 데이터베이스의 FK (Foreign Key) 는 데이터 일관성을 적용하여 데이터베이스를 깨끗하게 유지한다는 큰 장점을 가지고 있습니다. 다만, 서비스의 규모가 커져 테이블당 row가 1억건이 돌파하는 시점부터는 FK는 많은 변경의 병목이 되는데요. 이유는 1억건 이상일 경우 alter table 로는 3~5시간씩 수행 되기 때문입니다. 이 시간동안 테이블 Lock이 발생할 수 있으며, 이를 회피하기 위해 아래와 같은 여러 장치들이 지원됩니다. Online DDL Percona pt-online-schema-change 다만, FK가 있을 경우 테이블 복사, OnlineDDL를 비롯해서 클러스터링 / 샤딩 / 파티셔닝 등 여러 대량의 데이터 상황에서 제약들이 발생하여서 일정 규모 이상의 서비스에서는 DBA.. 2021. 10. 10.
js-joda 로 TypeORM Date 타입 대체하기 (with NestJS) JavaScript 의 Date Type은 JavaScript의 단점을 이야기할때 항상 거론되는 점인데요. javascript-date-type-is-horribly-broken 위 글에서 언급한 연산에 관한 문제도 있지만, 단순히 +1 Day를 해야하는데도 아래와 같이 직관적이지 못한 잘못된 인터페이스의 코드를 사용해야하는 것도 문제인데요. // Local time var tomorrow = new Date(); tomorrow.setDate(tomorrow.getDate() + 1); // UTC var tomorrow = new Date(); tomorrow.setUTCDate(tomorrow.getUTCDate() + 1); 연산 코드 자체가 깔끔하지 못하기 때문에 TypeORM에서 날짜 Type.. 2021. 9. 22.
2. NestJS & TypeORM 환경에서 Monorepo 구성하기 - TypeORM 추가하기 지난 시간 에 이어, Monorepo로 구성된 프로젝트에 TypeORM을 추가해보겠습니다. 1. 환경 설정 저 같은 경우 PostgreSQL을 사용할 예정이라 pg 를 기반으로 진행하겠습니다. 필요한 패키지들을 먼저 추가합니다. yarn add @nestjs/typeorm typeorm pg typeorm-naming-strategies class-transformer typeorm-naming-strategies TypeORM에서 Camelcase 필드를 Snake 컬럼에 매핑하기 를 위해 사용됩니다. class-transformer Entity Json을 Dto Instance으로 편하게 변환하기 위해 사용합니다. 그리고 TypeORM과 연동되어 로컬에서 실행할 PostgreSQL DB를 위해 doc.. 2021. 9. 3.

728x90