프롤로그 클라이언트-서버 모델에서 클라이언트는 서버에게 다양한 요청을 보냅니다. 일반적으로 서버는 클라이언트의 요청 정보를 식별하기 위해 클라이언트가 적재하는 헤더의 식별 정보를 사용합니다. 예를 들어, HTTP 통신에서 클라이언트는 헤더 ‘[x-request-id]’에 요청 고유 식별자를 적재하여 서버에 보냅니다. 일반적으로 서버는 여러 클라이언트가 보내는 동시다발적인 요청을 시간 순서에 따라 로그에 기록합니다. 이때, 서버는 각 요청에서 발생한 로그에 헤더 ‘x-request-id’를 함께 기록해두는데, 이는 나중에 특정 요청에 대한 로그 내역을 찾기 위해 요청의 고유 식별자인 ‘x-request-id’로 필터링을 걸면 해당 요청 로그만 손쉽게 열람할 수 있습니다. async_hooks가 생긴 이유 ..
NVM (Node Version Manager) Node.js의 여러 버전을 직접 다운로드 및 설치할 필요없이 터미널에서 명령어만 입력하여 손쉽게 버전을 변경할 수 있도록 지원하는 서비스입니다. 오리지널 nvm은 오직 Mac과 리눅스 전용으로 만들어졌습니다. 그렇기 때문에 윈도우 사용자는 NVM 서비스를 사용할 수 없었습니다. 하지만, 윈도우 사용자를 위한 NVM이 제공되면서 이제 윈도우에서도 사용할 수 있습니다. NVM for Windows 다운로드 https://github.com/coreybutler/nvm-windows/ GitHub - coreybutler/nvm-windows: A node.js version management utility for Windows. Ironically writ..
예를 들어, 다음과 같이 두 함수 foo, bar가 있다고 하자. const foo = (a: string, b: string, c: string) => { return `${a}-${b}-${c}` } const bar = (func: (a: string, b: string)=> string) => { return func('wow', 'amazing') } 이때, bar의 파라미터로 foo를 넘겨주고 싶은데, 파라미터 개수가 다르다. 따라서, foo의 첫 번째 파라미터는 'world'로 고정하여 bar에 넘겨주고 싶을 때, Function.bind(this, ...)를 사용할 수 있다. bar(foo.bind(this, 'world')) // wolrd-wow-amazing foo.bind(this,..
웹 앱에서 MariaDB, MySQL 등의 RDB와 통신할 때 보통 쿼리와 파라미터를 넘기는데, 사용하는 DB, 테이블, 칼럼이 많아지면 쿼리도 많아지게 되면서 나중에는 프로젝트에 쿼리 문자열로 가득차게 된다. TypeOrm 패키지는 쿼리 대신 객체와 클래스를 이용해서 DB와 통신할 수 있는 방법을 제공한다. 타입스크립트에서 기본 예제를 소개한다. 우선 프로젝트에 mysql, reflect-metadata, typeorm을 설치한다. $ npm install --save typeorm $ npm install --save reflect-metadata $ npm install --save mysql tsconfig.json 파일에 다음의 속성을 추가한다. { "compilerOptions": { "exp..
테스트 환경 이름 설명 CPU AMD Ryzen 7 1700 Memory DDR4 32GB 테스트 툴 autocannon autocannon Fast HTTP benchmarking tool written in Node.js www.npmjs.com 옵션 동시요청 : 2500 요청시간 : 30초 파이프라이닝 : 4 > autocannon -c 2500 -d 30 -p 4 127.0.0.1:8081 테스트 대상 (Node.js) express (Node.js) hyper-express Go Rust 테스트 방법 각 웹서버는 '/' path 만 구현되어 있으며, 요청 수신 시 Hello를 응답한다. 각 웹 서버 별 30초 동안 요청 처리 개수를 측정한다. 결과 예상대로, express가 가장 낮은 성능을 보..
설정 루트 디렉토리에 .npmrc 파일 추가하기 engine-strict=true package.json에 engines 속성 추가하기 { "engines": { "node": ">=14.16.0" } } 사용자 관점 리파지토리 클론 후 npm install 입력 (버전 옵션 조건을 만족하지 못한 경우) npm ERR! code EBADENGINE npm ERR! engine Unsupported engine npm ERR! engine Not compatible with your version of node/npm: js_test_01@1.0.0 npm ERR! notsup Not compatible with your version of node/npm: js_test_01@1.0.0 npm ERR! ..