프로그래밍 언어/JS TS 8

express에서 공통 트랜잭션 ID 부여하기

express를 사용한 서버를 만들면서 각 트랜잭션마다 공통적인 ID가 있으면 좋겠다는 생각이 들었다. 이러한 생각에 기반하여 여러가지 방법을 찾아 보았는데, 역시 동시성 제어 관련해서 문제가 있었다. 해당 문제와 관련해서 해결 방법을 생각해 보았다. 개요 한개의 요청마다 고유ID를 부여하여 로그를 쉽게 남길 수 있게 하고 싶다. 이 때 동시성 제어와 관련한 문제를 해결해 보려고 한다. 사례 조사 오래전부터 사용되었던 Spring 프레임워크에서는 ThreadLocal를 사용하고 있었다. Java는 기본적으로 멀티스레드를 지원하는 언어이기 때문에 동시에 여러개의 트랜잭션을 처리할 때 스레드를 나누어서 처리한다. 이 때 ThreadLocal를 사용하여 각 스레드마다 특정 값을 저장할 수 있다. 이 덕분에 각..

This is not the tsc command you are looking for 에러 해결하기

Express를 JS에서 TS로 마이그레이션을 하는 도중, tsc를 사용해 js로 컴파일 할려고 tsc 명령어를 치니 다음과 같은 에러 메시지가 나왔다. This is not the tsc command you are looking for To get access to the TypeScript compiler, tsc, from the command line either: - Use npm install typescript to first add TypeScript to your project before using npx - Use yarn to avoid accidentally running code from un-installed packages 검색을 해보니, 해당 문제는 tsc 패키지와 typ..

JSON 데이터 엑셀로 저장하기

최근 Node환경에서 데이터를 받아와 excel로 저장하는 로직을 구현해야 해서 라이브러리를 찾아보니, 압도적으로 많이 사용하는 SheetJS (xlsx) 라이브러리가 있었다. 하지만 해당 라이브러리는 xlsx를 stream을 사용해서 저장할 수 없었기에, stream을 지원하는 exceljs를 사용하기로 했다. 내가 뽑으려는 데이터의 row가 100만개 이상이고, nodejs의 메모리를 초과하기에 충분히 큰 데이터였기에 stream을 지원하는 라이브러리를 사용하게 되었다. Stream을 사용하는 이유 파일을 로컬에 쓰거나 로컬에 있는 파일을 가져올 때, 이는 메모리에 적재가 된다. 만약 메모리 한계보다 더 큰 파일을 처리해야 될 때는 당연히 프로그램이 터진다. NodeJS의 메모리 한계는 1.9GB이고..

JS 코딩테스트 준비하기

최근에 코딩테스트를 보면서 알고리즘이 말도 안되게 부족하다는 것을 많이 느꼈다. 그래서 외부 에디터를 사용할 수 있는 환경이라는 상황에서 코딩 결과물을 빠르게 확인할 수 있는 환경을 꾸며볼려고 한다. JS 코딩테스트 환경 꾸미기 목표는 지속적인 테스트와 신속히 결과물을 내는 것이다. 여기서 사용할 것은 nodemon이다. nodemon은 파일이 저장될 때 마다 js파일을 다시 실행켜준다. 그래서 명령어를 따로 입력하여 결과물을 보는 과정이 생략이 된다. node 환경이 설치되어 있다는 기준으로 설명을 할 것이다. 임의 폴더를 하나 생성 후, 다음과 같은 명령어를 입력한다. npm init npm i nodemon 이후에 package.json 파일에 스크립트를 하나 추가한다. ... "scripts": ..

Typescript 유틸리티 타입 탐방하기

타입스크립트에서는 타입을 정의하고, 이를 유연하게 다루고 재가공하기 위한 다양한 기법이 있다. 이 중 타입스크립트에서는 기본적으로 제공되는 몇 가지의 유틸리티 타입이 있다. 공부 목적으로 간단히 정리해 보려고 한다. 입문 타입과 관련된 내용을 유연하게 다루기 위한 기초 문법(키워드)을 간단히 정리해 보려고 한다. 유니온 타입 (Union Type) 가능한 타입들의 종류를 나열한 타입이다. OR연산자로 묶여 있다. // a는 number 또는 string 만 될 수 있다. typeof a 로 타입 판별 가능 let a: number | string keyof 타입에 존재하는 모든 key 값들을 union 형태로 반환한다. type Point = { x: number; y: number }; // P는 'x..

Object 전체 순회하기

TS를 사용하면서 Object에 대해서 전체 순회를 해야 할 일이 생겼다. Object 안의 Object도 모두 순회할 일이 있다 보니, 한번 만들어 두면 나중에도 요긴하게 쓰일 것 같았다. 간단히 생각해보면, 모든 key값을 불러온 뒤에 모든 value에 대해서 순회하면 될 것 같다. 이 때 value가 object일 경우에는 한번 더 순회를 돌려주는 것이다. 이와 같은 생각으로 코드를 작성해 보았다. TS일 경우에는 data의 타입을 any로 두면 편하긴 하다. 단 특정한 타입을 두고 있는 Object일 경우에는 data extends T 로 두면은 타입에 대한 걱정을 조금은 줄일 수 있다.

TS 데코레이터

데코레이터는 TS에서 사용 가능한 특정 형식의 함수이다. 데코레이터는 아직 완전한 기능이 아니지만, Angular 및 nestjs에서 도입하여 사용중인 기능이다. 아직 완전한 기능이 아니기 때문에 tsconfig.json 파일에 "experimentalDecorators" : true 값을 주어야 데코레이터가 잘 작동한다. 특정 형식의 함수라고 하면 솔직히 이해가 잘 안된다. 뒤에 나올 사용 범위 앞(위)에 데코레이터를 붙여서 이미 선언된 함수, 프로퍼티, 메소드 등을 수정해 주는 함수라고 생각하면 된다. 데코레이터 사용 범위 데코레이터는 다음에 적용 가능한 특정 형식의 함수이다.' 1. Class -> 클래스 선언 전에 사용해서 클래스의 생성자와 프로토타입을 수정할 수 있다. 2. Class Prope..

TS 클래스 다중 상속하기

TS는 기본적으로 클래스 상속을 지원한다. 클래스 상속은 다음과 같이 사용할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 class A { numA: number; } class B extends A { numB: number; } const newClass = new B(); newClass.numA = 1; newClass.numB = 2; cs 위의 경우에는 클래스 B에서 클래스 A를 상속받아 최종적으로 클래스B에는 numA 와 numB가 모두 들어간 것을 볼 수 있다. 하지만 TS에서는 한 개의 클래스에 대해서는 상속이 가능하나, 여러개의 클래스 상속(다중 상속) 은 안타깝게도 지원하지 않는다. 그렇다면 다중 상속을 사용할 경우에는 어떠한 식으로 접근해야 할까? 답은 mixin을 이..