전체 글
-
[Typescript] - Type Alias 와 InterfaceLanguage/Typescript 2021. 12. 12. 19:16
Typescript Interface 와 Type 차이점 타입스크립트를 통해 개발하다보면 Type Alias 와 Interface 중 어는 것을 사용해서 Type 을 정의해야할까 라는 문제가 생깁니다. 공통점 객체 타입에 대한 이름 지어주기 Interface interface UserInterface { name: string age: number } const user: UserInterface = { name: 'choi', age: 100 } Type Alias type UserTypeAlias = { name: string, age: number } const user: UserTypeAlias = { name : 'choi', age: 100 } 차이점 1. 확장 하는 법 Type Alias 와..
-
TypeORM - N + 1 문제ORM/TypeORM 2021. 12. 11. 22:19
ORM N + 1 문제 N + 1 문제가 뭘까? ORM 의 연관 관계에서 발생하는 문제로, 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수(N) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오게 되는 것입니다. 예를 들어 사용자는 여러개의 상품을 가지고 있을 수 있기 때문에 User 와 Product 엔티티가 1 : N 관계로 설정되어 있다고 가정해봅시다. 특정 유저를 조회 했을 때 (SELECT 1번), 해당 유저와 관련된 상품을 N 번 더 조회합니다(SELECT N번). 위의 문제에 대한 해결 방법을 알아보기 전에 관련된 중요한 개념인 Eager Loading 과 Lazy Loading 에 대해서 알아봅시다. Eager Loading 이란? Eager Loading 이란 즉..
-
NodeJS - Event LoopFramework/NodeJS 2021. 12. 10. 00:46
NodeJS 란?공식 사이트에서 확인해보면 "Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다" 라고 되어있습니다.NodeJS 의 대표적인 특징은 비동기, 이벤트 기반, 싱글스레드, Non Blocking, 확장성 등이 있습니다.우선 Javascript 의 동작원리를 먼저 알아야 합니다.Javascript 동작원리Javascript 는 싱글스레드 기반 콜백 큐를 사용합니다.위의 그림처럼 Javascript 는 메모리 힙과 콜 스택으로 구성되어 있습니다.메모리 힙은 메모리 할당이 일어나는 곳이고 콜 스택은 코드가 실행됨에 따라 호출 스택이 쌓이는 곳입니다.Javascript 는 싱글 스레드기반이기 때문에 하나의 메인 스레드와 하나의 콜 스택을 가지고 있습..
-
NestJS - numeric query parameterFramework/NestJS 2021. 11. 30. 21:52
개발을 하던 도중, query parameter 에 대한 validation 처리를 하려고 dto 파일을 만들고 있었는데 아래와 같은 오류가 발생했습니다. // xxx.dto.ts import { IsNumber } from 'class-validator'; export class PaginationDto { @IsNumber() private readonly pageNo: number; @IsNumber() private readonly pageSize: number; getSkip(): number { return (this.pageNo - 1) * this.pageSize; } getTake(): number { return this.pageSize; } } 분명히 query parameter 에 ..
-
NestJS - 의존성 주입Framework/NestJS 2021. 11. 28. 15:37
NestJS - 의존성 주입이란 NestJS 의 핵심 중 하나는 바로 의존성 주입(Defendency Injection) 입니다. 의존성 주입(Defendency Injection) 의존성 주입은 제어의 역전(Inversion of Control) 의 기술중 하나입니다. 제어의 역전: 개발자가 제어해야할 영역을 프레임워크에게 믿고 맏기는 것. 의존성 주입: 개발자가 필요한 자원(클래스, 함수..)들을 외부에서 생성자를 통해 넣어준다. 위키피디아에 실려있는 5살에게 의존성을 설명하는 내용이 있어서 가져와봤습니다.링크 아이가 냉장고에서 스스로 물건을 꺼낼 때 문제가 발생할 수 있습니다. 문을 열어두거나 엄마나 아빠가 원하지 않는 것을 얻게 될 수도 있습니다. 냉장고에 있지 않거나 유통기한이 지난 것을 찾고 ..
-
TypeORM - Active Record / Data Mapper PatternORM/TypeORM 2021. 11. 25. 17:19
TypeORM 패턴 TypeORM 에서는 Active Record 와 Data Mapper 패턴을 지원합니다. Data Mapper 는 큰 서비스에서 유지보수하며 개발하기 좋다는 장점이 있고, Active Record 는 간단하기에 작은 서비스에서 유지보수하면서 사용하기 좋습니다. Active Record Pattern Model 을 테이블로 보기에 모델에서 바로 메서드를 사용할 수 있습니다. Entity 에서 쿼리 메서드를 정의하고, 쿼리 메소드를 통해 객체를 조회, 저장, 삭제합니다. 또한 모든 Active Record entity 들은 BaseEntity 를 상속해야하며 이것은 여러가지 메서드들을 제공합니다(save, remove, find,...). BaseEntity 는 기본적인 Reposito..
-
ORM(Object-relatinal mapping) 이란ORM/TypeORM 2021. 11. 23. 15:57
ORM(Object-relatinal mapping) ORM 이란 객체(클래스) 와 관계형 데이터 베이스의 데이터를 자동으로 매핑(연결) 해주는 역할을 합니다. 대표적으로 Flask - SQLAlchemy, Django - 내장 ORM, Node.js - Sequalize, NestJS - TypeORM , java - Hybernate, JPA 등이 있습니다. ORM 장/단점 장점 1. 객체지향적인 코드 직관적이고, 비즈니스 로직에 더 집중할 수 있도록 도와준다. SQL 문을 사용하면서 필요한 선언문, 할당, 종료 같은 부수적인 코드가 줄어든다. 코드를 별도로 작성하기 때문에 코드의 가독성을 올려준다. SQL 의 절차적이고, 순차적인 접근이 아닌, 객체 지향적인 접근으로 생산성이 증가한다. 2. 재사용..
-
NestJS, TypeORM - Entity 상속(inheritance)Framework/NestJS 2021. 11. 22. 14:19
NestJS, TypeORM - Entity inheritance 프로젝트를 진행하면서 entity 를 개발하던 도중 entity 별로 중복되는 컬럼들(idx, createdAt, updatedAt, status...)이 있었다. 이를 해결할 방법을 찾아보니 Entity inheritance(Entity 상속) 이라는 것이 있었다. 해결 방법 1 - Concrete Table Inheritance 공통 되는 필드를 추상 클래스를 두고 상속을 통해 사용하는 방식이다. common.entity.ts 파일을 만든 후, 다른 Entity 들을 개발할 때는 상속해서 사용할려고 한다. common.entity.ts import { Column, CreateDateColumn, PrimaryGeneratedColum..