반응형

nodejs 14

pkg 모듈 실행 시 "(0, assert_1.default)(!this.bar)" 에러 발생하는 경우

발생문제 Node.js를 v14에서 v16으로 버전업 후 pkg 모듈을 통해 실행파일을 생성하려고 하면 아래와 같은 에러가 발생할 수 있습니다. > pkg@5.7.0 > Fetching base Node.js binaries to PKG_CACHE_PATH fetched-v16.15.0-win-x64 [ ] 0%> Not found in remote cache: {"tag":"v3.4","name":"node-v16.15.0-win-x64"} > Building base binary from source: built-v16.15.0-win-x64 > Fetching Node.js source archive from nodejs.org... > Error! AssertionError [ERR_ASSERTI..

JavaScript로 interface 모사하기

소개 JavaScript에는 class만 존재하고, interface가 없습니다. 따라서, interface를 이용한 아키텍처를 불완전하게 적용할 수 밖에 없습니다. class만으로 interface와 비슷한 기능을 하도록 모사하는 방법을 제안합니다. Step 1. interface base 생성 프로젝트에서 소스 폴더 내에 interfaces 폴더를 생성하고, 그 안에 base.interface.js 파일을 만들어 다음과 같이 작성합니다. /** * 인터페이스 정의 헬퍼 함수 * * @template T * @param {T} newInterface * @returns {T} */ function defineInterface(newInterface){ const NOT_IMPLEMENTED = "thr..

쿼리 대신 TypeOrm으로 DB 통신하기 (샘플)

웹 앱에서 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..

Node.js 버전 강제하기

설정 루트 디렉토리에 .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! ..

Node.js 객체 복사 방식에 따른 수행시간 간단 비교

개요 JS에서 각 객체의 깊은 복사 방식에 따른 수행시간을 간단하게 비교한다. 원본 객체 const obj1 = { a: 1, b: "string", c: { name: "Leon", age: "29" } }; JSON 복사 function jsonCopy(obj){ return JSON.parse(JSON.stringify(obj)); } Lodash 복사 function lodashCopy(obj){ return lodash.cloneDeep(obj); } 재귀함수 복사 /** 객체 깊은 복사 */ function cloneObjectDeep(obj) { const clone = {}; if (typeof obj !== 'object') return obj; for (const key in obj) ..

C++ vs Node.js vs Go - 멀티스레드 퀵정렬 수행속도 비교

[실험환경] CPU : AMD Ryzen 7 1700 8-Core Processor Memory : 32.0 GB OS : Windows 10 Pro 데이터 개수 : 2천만개 ~ 3억 2천만개 스레드 개수 : 16개 값의 범위 : 0 ~ 1,000,000,000 [분석] 데이터 개수가 적을 때는 Node.js 가 가장 느린 성능을 보여주었으며, 데이터 개수가 증가함에 따라 Node.js가 Go를 제치고 더 빠른 성능을 보여주었다. Node.js는 멀티스레드를 사용하기 위해 worker_thread를 사용하는데, 각 스레드들이 수행할 작업이 적힌 스크립트 파일 (js)을 읽어서 수행하기 때문에 초반에 지연이 걸리게 되었다. 모든 경우에서 C++가 가장 빠른 속도를 보여주었다. 데이터 개수가 1억 6천만개 ..

컴퓨터 공학 2021.06.07

프로그래밍 언어 별 성능 측정

원본에서 더 깔끔합니다. [알고리즘] 비교 알고리즘: 피보나치 수열 반복횟수: 5회 피보나치 값: 38 [C++] (MSVC, 최적화 안함) #include #include "HourMeter.h" using namespace std; int fibonacci(const int value) { if (value == 0 || value == 1) { return 1; } return fibonacci(value - 1) + fibonacci(value - 2); }; void main() { HourMeter hm; int fibValue{ 38 }; for(int i=0;i> Java > Golang > C# >파이어폭스> Node.js > 크롬 > 엣지 > LuaJIT > Rust >>>>> Pyth..

컴퓨터 공학 2020.07.04

Node.js 14 추가 기능

옵셔널 체이닝 객체의 특정 속성의 하위 속성이 있으면 하위속성을 반환하고, 없으면 undefined을 반환하여 예외를 없앰 const obj = { name: 'alice', cat: { name: 'Dinah' }, bark(){ console.log('bark'); } }; const dogName = obj.dog?.name; console.log(dogName); //undefined obj.mark?.(); //INFO: 아무것도 하지 않음 obj?.prop //속성 obj?.[expr] //표현식 arr?.[index] //배열 인덱스 func?.(args) //함수 Nullish 병합 연산자 (??) ?? 연산자는 좌측 피연산자가 null 이거나 undefined인 경우 우측 피연산자를 반환..

타입스크립트 기반 간단한 TCP 서버/클라이언트 개발

이번에는 타입스크립트를 사용하여 간단한 TCP 서버/클라이언트를 만드는 방법에 대해 설명합니다. [TCP 서버] tcp_server라는 폴더를 생성한 후에 터미널에서 다음과 같이 입력하여 프로젝트를 초기화합니다. yarn init 그러면 다음과 같은 package.json 파일이 생성됩니다. { "name": "tcp_server", "version": "1.0.0", "main": "index.js", "license": "MIT", "private": true } 그리고 다음과 같이 입력하여 타입스크립트 환경을 구성합니다. yarn add -D typescript tsc --init 그러면 다음과 같이 tsconfig.json 파일이 생성됩니다. 아래 내용과 다르면 같게 변경해줍니다. { "compi..

반응형