분류 전체보기
-
[MongoDB] 배열 필드의 lookup 시 도큐먼트 순서Database 2021. 11. 23. 23:50
MongoDB는 relation의 개념이 없는 대표적인 NoSQL 데이터베이스이다. 하지만 MongoDB에서 RDB의 join처럼 서로 다른 collection을 참조할 수 있는 방법이 있는데, 바로 aggregation의 $lookup을 사용하는 것이다. $lookup 사용법 $lookup의 기본적인 동작을 확인하기 위해서 다음과 같은 테스트 데이터를 준비한다. db.tasks.insert([ { "_id": 1, "name": "task1", "required_time": 8 }, { "_id": 2, "name": "task2", "required_time": 2 }, { "_id": 3, "name": "task3", "required_time": 6 }, { "_id": 4, "name": "t..
-
[PG] 쿼리 실행 계획 분석하기 - Table ScanDatabase 2021. 11. 17. 23:47
데이터베이스에 날릴 쿼리를 최적화하기 위해서는, 데이터베이스가 실제로 쿼리를 실행하는 방식과 해당 쿼리의 성능을 알고 있어야 한다. 그러기 위해서 데이터베이스의 쿼리 실행 계획(Query execution plan)을 보고 분석할 수 있어야 한다. PostgreSQL의 실행 계획을 분석하기 위해서 PostgreSQL가 테이블을 조회하는 방식인 테이블 스캔(Table Scan) 방식에 대해서 제일 먼저 알아보고 정리하려고 한다. 테스트 데이터 테스트할 테이블은 다음 쿼리로 생성했다. 게시판의 게시물에 해당하는 테이블이고, 사용자 테이블은 생성하지 않은 관계로 외래 키 참조는 생략했다. CREATE TABLE post ( id serial PRIMARY KEY, title varchar(255), autho..
-
[JS] 비동기 작업들의 순차실행과 병렬실행Javascript, Typescript 2021. 11. 9. 22:55
어떤 결과를 만들기 위해 5개의 비동기 작업을 수행해야 한다고 가정해보자. 5개의 작업이 서로 연관되어 있어서 작업을 한 번에 하나씩 끝내야 한다면, 작업을 순차적(sequential)으로 처리해야한다. 하지만 5개의 작업이 서로 연관이 없어서 동시에 5개의 작업을 끝내도 상관이 없다면, 작업을 병렬적(parallel)으로 처리할 수 있다. 1초의 수행시간이 걸리는 비동기 작업을 다음과 같이 만들어보았다. 이 함수는 실행하고 1초 뒤에 task finished!라는 로그를 출력할 것이다. function handleTask(id) { return new Promise(resolve => { setTimeout(() => { console.log(`task${id} finished!`); resolve()..
-
[TS] Typescript의 메소드 오버로딩Javascript, Typescript 2021. 11. 4. 22:41
최근에 유용하게 사용하고 있는 TypeORM 이라는 Typescipt의 ORM 라이브러리는 데이터를 저장하는 함수로 repository 클래스의 save라는 메소드를 제공한다. 이 save 메소드는 공식문서에서 확인할 수 있는 것처럼, 매개변수로 단일 객체 또는 배열 두 가지를 다 넘겨줄 수 있기 때문에 굉장히 유용하다. 그리고 VS code 같은 IDE의 Intellisense를 통해, save메소드에 단일 객체를 넘겨주면 단일 객체를 resolve하는 Promise를, 배열을 넘겨주면 배열을 resolve하는 Promise를 반환한다는 것을 알 수 있다. 그렇다면 타입스크립트 컴파일러는 어떻게 단일 객체를 넘겨주면 단일 객체를, 배열을 넘겨주면 배열을 반환한다는 것을 알고 있는 걸까? save 메소드..
-
[TS] Typescript의 타입 검사Javascript, Typescript 2021. 11. 1. 20:58
타입스크립트의 공식문서에서 말하기를, Typescipt의 타입 검사는 해당 값의 ‘형태’에 관심을 갖는 덕 타이핑(구조적 타이핑)을 따른다고 한다. One of TypeScript’s core principles is that type checking focuses on the shape that values have. This is sometimes called “duck typing” or “structural typing”. Typescript의 이 타입 검사 시스템은 개발자에게 편리함을 줄 때도 있지만, 개발자가 예상하지 못한 곳에서 버그를 일으킬 수도 있다. 덕 타이핑(Duck typing) 또는 구조적 타이핑(Structural typing)이라고 하는 타입스크립트의 타입 체킹 방법에 대해 알..