본문 바로가기

Node.js

(9)
자바스크립트의 비동기 처리에 대하여 개요 자바스크립트에서 비동기 작업 처리 방식은 크게 3가지이다. 우선 Callback이 있다. 그리고 Promise가 있고, async/await가 있다. 문득 이 자바스크립트의 비동기 처리 방식들의 성격이 다르다는 생각이 들었다. 특히 Callback과 Promise, async/await가 더욱 그렇다. 한 번 간단하게 정리해보며 생각도 정리해 보자. Callback Callback은 함수에 매개변수로 넘겨준 함수다. 자바스크립트의 일급객체, 일급함수를 설명할 때 항상 등장한다. 어떤 함수 A의 매개변수로 B함수를 전달하여 호출한 A함수 내에서 매개변수로 전달된 B함수를 실행한다. Callback함수 자체는 자바스크립트의 이벤트 등록이나 고차함수에 쓰이고 특성을 이용해 비동기 처리에도 사용한다. 비동..
ES6 환경에서 dotenv로 환경변수 설정할 때 주의점 나는 .env 파일을 생성할 때 .env.dev / .env.production .... 식으로 .env 뒤에 다른 것을 붙이는 편이다. NestJS를 주로 사용하다 보니 이런 방식을 써도 config에서 설정해주면 되니 큰 문제가 없었다. 문제는 NestJS가 아니라 일반 js를 실행할 때 발생했다. 환경변수 파일을 수정해도 수정 사항이 적용되지 않는 것이다. 환경변수를 console.log()로 찍어봐도 변경사항은 적용되지 않은 상태였고, 뭔가 잘 안될 때 전통적인 해결법인 껐다가 다시 켜기를 해봐도 소용이 없었다. import 순서가 문제일까 싶어 확인해봐도 이미 최상단에 위치했고, 공식 홈페이지에서 소개하는 대로 import 'dotenv/config' 으로만 쓰는게 문제일까 싶어 import "..
함수형 자바스크립트 - ES6와 이터러블 개요 함수형 프로그래밍에 관심이 많았을 뿐더러, 평소에도 ES6에서 추가된 여러가지 메서드를 자주 사용한다. 이제는 너무나도 당연하게 map, for of, forEach 등을 사용하는데 이론을 바탕으로 제대로 알고 쓰고 싶어서 강의를 보고있다. 그중에서도 이터러블/이터레이터에 대한 이해가 중요하다 느꼈기 때문에 간추려서 정리해 보았다. 함수형 자바스크립트 - ES6와 이터러블 ES6 자바크스립트에서는 새로 추가된 for of 문을 통해 Array, Set, Map을 순회할 수 있다. Array는 별다른 점이 없다. key로 접근(array[key])해서 내부에 있는 값을 조회 할 수 있다. 그러나 Set은 Key로 접근해도 내부에 있는 값을 조회 할 수 없고, Map도 마찬가지라 키를 통해 값에 접근할..
nvm을 이용한 node 버전 관리 NVM Node Version Manager 노드 버전 매니저. 이름과 같이 Node 버전 관리를 도와주는 툴이다. node 설치 및 업데이트 - 버전 지정 nvm install [version] node 설치 및 업데이트 - 가장 최신 버전 nvm install node node 버전 삭제 nvm uninstall [version] node 디폴트 버전 지정 nvm alias default [version] NPM npm 최신 버전 설치 및 업데이트 - 글로벌 npm install -g npm@latest Permission denied 에러가 발생할 경우 sudo 명령어를 이용해 설치한다.
NestJs configModule 적용 어플리케이션은 종종 다른 환경에서 실행된다. 일반적으로 로컬 환경은 로컬DB 인스턴스에만 유효하고, 프로덕션 환경에서는 별도의 환경을 구성한다. 환경에 따라 달라지는 환경변수를 저장하고 활용하는 방법은 보통 .env 방식을 이용한다. Node.JS에서는 process.env를 통해 .env파일에 저장된 환경변수를 활용할 수 있다. NestJS는 ConfigModule을 통해 보다 발전된 환경변수 관리를 제공한다. /*config/database.config.ts*/ export default registerAs('database', () => ({ host: process.env.DATABASE_HOST, port: process.env.DATABASE_PORT || 5432 })); registerAs..
Promise.allSettled()과 Promise.all() Promise.allSettled() Promise.allSettled()는 주어진 모든 프로미스를 이행하거나 거부한 후, 각 프로미스에 대한 결과를 나타내는 객체 배열을 반환한다. 일반적으로 서로의 성공 여부에 관련 없는 여러 비동기 작업을 수행해야 하거나, 항상 각 프로미스의 실행 결과를 알고 싶을 때 사용한다. Promise.allSettled()의 반환 값 fulfilled: 비동기 작업이 이행 되었다. value: 비동기 작업의 이행을 통해 얻은 값. rejected: 비동기 작업이 거부 되었다. reason: 비동기 작업이 거부된 이유. 빈 배열 반환: 빈 이터러블 객체를 인자로 받았을 때. Promise.all() Promise.all()는 순회 가능한 객체에 주어진 모든 프로미스가 이행한 ..
javascript에서 상수를 나타낼 때 대문자 변수명을 사용하는 이유 C언어에서 파생된 프로그래머들의 약속이고 이는 해당 값이 고정값(상수)임을 알리는 것이다. export const API_KEY = 'SOMEKEY'; 상수란 변하지 않는 값을 의미한다. 즉, 정상 실행 중에는 프로그램에서 변경할 수 없는 값이다. ES6에서 도입된 const 자바스크립트 ES6이전엔 변수할당에 var만을 이용했기 때문에 대문자 변수명을 통해 상수를 나타냈다. 하지만 ES6에서 다른 의도를 가진 변수를 생성하는 방법으로 const와 let이 도입되었다. 보통 변경하지 않는 값은 const에 할당하고 변경 할 수 있는 값을 let에 할당한다. 그런데 여기서 중요한 건 const는 값의 재할당을 막을 뿐이지 참조하는 객체 속성 변경을 막지 않는다는 점이다. const firstPerson =..
정적 팩토리 메서드 정적 팩토리 메서드(static factory method) 객체 생성 역할을 하는 클래스 메서드. 생성자를 통해 직접적으로 객체를 생성하는 것이 아니라 메서드를 통해 객체를 생성한다. 생성자를 활용하여 객체를 생성하는 것과 어떤 차이가 있는가? 1. 이름을 가질 수 있다. 객체는 생성 목적과 과정에 따라 생성자를 구별해서 사용할 필요가 있다. new 키워드를 통해 객체를 생성하는 것은 내부구조를 잘 알고 있어야 목적에 맞게 객체를 생성 할 수 있다. 하지만 정적 팩토리 메서드를 사용하면 메서드 이름에 객체의 생성 목적을 담을 수 있다. 2. 호출 할 때마다 새로운 객체를 생성할 필요가 없다. 대표적인 예로 enum과 같이 자주 사용되는 요소의 개수가 정해져있다면 해당 개수만큼 미리 생성해놓고 조회할 수..
Nest.JS @Inject()가 갑자기 에러로 체크되는 문제 Unable to resolve signature of parameter decorator when called as an expression. Argument of type 'undefined' is not assignable to parameter of type 'string | symbol'. 위와 같은 에러가 발생하는 이유는 보통 타입스크립트 버전 문제라고 한다. 특히 vscode를 이용할 경우 타입스크립트 버전이 최신으로 유지되는 경우가 있는데, 바로 이때 타입스크립트 버전 문제가 발생한다. 그래서 5.x.x에서 4.9.5로 다운그레이드 하기로 했다. https://docs.smartface.io/smartface-ide/tips-and-tricks/changing-typescript-versi..