Typescript
-
TypeORM - 수백만건의 데이터 0.1초만에 조회하기Typescript 2024. 4. 12. 19:21
물론 제목은 어그로다... 기존데이터 데이터 수 100만건 100만건 조회 시간 10분이상 0.1초 조회 방식 like tsvector 1. tsvector란? like & like 연산자가 db를 풀 스캔하고 있을때 너무나 시간이 오래 소요된다. 이를 해결하기 위해서 postgresql 에서 제공하는 데이터 유형으로, 텍스트 검색을 위한 벡터 데이터를 저장하는 방식을 말한다. 이 데이터는 주로 텍스트 문서의 내용을 토큰화 하고, 효율적으로 검색할 수 있게 인덱싱을 하는데 사용된다. 각 토큰은 문서에서의 위치와 옵션으로 가중치도 포함이 가능해진다. 풀 텍스트 검색에서는 문서의 텍스트를 어휘적 분석을 거쳐 중요 토큰으로 나누고 이 토큰들을 TSVector로 변환합니다. 특히 배열이나 JSON 같은 복잡한 ..
-
-
Typescript - SOLID 예제Typescript 2023. 4. 21. 21:14
SOLID 예제 클래스에는 기능을 담는다! 를 생각하자. class Auth { private email: string; private password: string; constructor(email: string, password: string) { this.email = email; this.password = password; } } 이 Auth 클래스는 아이디/패스워드를 가진 멤버변수인데 이 변수를 밖으로 뺄 수는 없는데 class 안에서 사용할 수 있는 변수들을 일컫는다. 변수나 메서드들을 접근제한자들을 걸 수 있다는 것 저렇게 데이터에 접근제한자를 거는것을 데이터 은닉화라 한다. 자 이제 다시 인증으로 가서 이메일 인증기능을 만들고 싶다고 해보자. class Auth { private emai..
-
Typescript - SOLIDTypescript 2023. 4. 20. 21:26
SOLID SOLID는 OOP를 기반으로 하는 규칙이라고 생각하는것이 좋다. 그래서 어떤 코드를 작성할때 확장성, 재사용성에 초점이 맞춰져 있다는 것이다. 즉 개발에 있어서 코드를 좋게 만드는 코드라고 생각하면 된다. 즉 유지보수 및 확장을 위해서 사용하는 코드다! 라고 생각하자는 것이다. S: SRP -> 단일 책임의 원칙, 하나의 클래스/메서드에는 하나의 책임(기능)을 가지도록 구현하자는 것이다. O: OCP -> 개방 폐쇄의 원칙, 개발의 내용에 추가적인 것은 쉽게 되게 구현하지만, 수정은 힘들도록 구현하자는 것 수정과 확장을 위해서 기존에 있는 코드를 수정하지 말자 L: LSP -> 리스코프 치환의 원칙, 상위 클래스와 하위 클래스가 존재한다고 했을때 하위 클래스는 언제든지 상위 클래스로 대체가 ..
-
Typescript - 제네릭Typescript 2023. 4. 20. 21:25
제네릭 함수 이제까지는 그냥 타입을 지정하고 받는 것들을 해봤다. 그런데 우리가 코드를 작성하면서 항상 타입이 지정된 것만 사용할 수 있을까? 또한 우리가 지금까지 object가 너무 추상적이여서 쓰는데 어려움을 겪었는데 그 문제를 해결할 수 있는 한가지 방법이 바로 제네릭 함수이다. 예제코드는 다음과 같다. const echo = (a: T): T => { console.log(a); return a; }; echo(10); echo("asdf"); echo({ name: "test" }); echo(["123"]); 이렇게 코드가 있을때 여기서 중요한 것은 알파벳 T가 아니다. T의 경우는 A로 써도 되고 저기서 중요한 것은 양식이다. 왜냐하면 저 양식을 통해 제네릭 함수를 사용한다는 것을 알면 되기..
-
Typescript - 함수 오버로딩Typescript 2023. 4. 20. 21:24
함수 오버로딩 함수 오버로딩을 간략하게 설명하면 같은 함수를 두번이상 선언하는 것이다. 우선 함수 선언하는 것에서 오버로딩에 대해서 알아보자. function reverse(x: number): number; function reverse(x: string): string; function reverse(x: string | number): string | number { const res = x.toString().split("").reverse().join(""); if (typeof x === "number") return parseInt(res); return res; } console.log(reverse(123)); console.log(reverse("abc")); const result =..
-
Typescript - 자주 사용하는 TS형식에 관해Typescript 2023. 4. 20. 21:23
자주 쓰는 TS 함수 사용 방식에 관해서 선언식, 표현식, 애로우 함수등의 메서드 정의법들이 존재한다. function add(x: number, y: number): void {} const add2 = function (): void {}; const add3 = (): void => {}; Js와의 가장 큰 차이점은 타입들을 지정해야 한다는 것이다. 따라서 익숙해질때까지는 써주는 방향으로 가야 한다. 근데 우리는 함수를 어떨때 만들었는가? 바로 중복된 코드를 뺴고 싶을때 사용했을 것이다. 예를들어, 더하는 함수나, 평균을 내는 함수등을 맨 처음에 만들었던 것을 기억할 것이다. 이러한 함수들의 공통점은 목적성이다. 따라서 함수를 만들때 항상 기억해야 하는것은 목적성을 기억하고 설계하는 것이다. TS에..
-
Tyepscript - 예제코드2/예제코드3Typescript 2023. 4. 20. 21:20
예제코드 2 우리가 만들고 싶은 코드는 할인이라는 기능을 가진 코드를 만들고 싶은것이다. 예전에 코드를 작성할떄는 class에서 자체 메서드를 추가하는 방식으로 구현을 했지만 이제는 추적이 용이하도록 하나씩 만들어보자. 먼저 그냥 디스카운트 하는 친구를 만들어보자. class Products { private name: string; private price: number; constructor(name: string, price: number) { this.name = name; this.price = price; } getName(): string { return this.name; } getPrice(): number { return this.price; } } class ProductDiscoun..