소개 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..
프롤로그 클라이언트-서버 모델에서 클라이언트는 서버에게 다양한 요청을 보냅니다. 일반적으로 서버는 클라이언트의 요청 정보를 식별하기 위해 클라이언트가 적재하는 헤더의 식별 정보를 사용합니다. 예를 들어, HTTP 통신에서 클라이언트는 헤더 ‘[x-request-id]’에 요청 고유 식별자를 적재하여 서버에 보냅니다. 일반적으로 서버는 여러 클라이언트가 보내는 동시다발적인 요청을 시간 순서에 따라 로그에 기록합니다. 이때, 서버는 각 요청에서 발생한 로그에 헤더 ‘x-request-id’를 함께 기록해두는데, 이는 나중에 특정 요청에 대한 로그 내역을 찾기 위해 요청의 고유 식별자인 ‘x-request-id’로 필터링을 걸면 해당 요청 로그만 손쉽게 열람할 수 있습니다. async_hooks가 생긴 이유 ..
개요 Hexagonal Architecture (줄여서 HA)는 Alistair Cockburn이 2005년에 제안한 구조입니다. HA는 기존의 Layered Architecture에서 더 나아가 레이어 간에 직접적인 연결을 맺는 대신, 중간에 인터페이스를 통해 상호작용을 함으로써 결합도 (coupling)를 낮추도록 설계된 아키텍처입니다. 결합도를 낮추게 되면 각 레이어를 자유롭게 교체할 수 있으며, 이를 통해 테스트를 손쉽게 수행할 수 있습니다. 또 다른 이름으로 HA는 Ports and Adapters라고도 불립니다. 아키텍처의 구조를 인터페이스인 포트와 중개 역할을 하는 어댑터를 통해 설명하고 있기 때문입니다. 작업 영역 이번 포스팅에서 소개하는 HA를 적용한 애플리케이션을 “HA 앱”이라고 하겠..
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..