개발자의 기록장 블로그

만나서 반가워 !
이거 좋아해?

비동기 흐름 제어 by Callback
·
Backend/Node.js
Callback을 이용한 비동기 제어간단한 구성에도 Callback hell에 빠진다.가독성이 떨어진다변수 이름의 중복클로저가 성능 및 메모리 공간에 영향을 미친다. ( 활성 클로저의 context가 가비지 수집시에 유지됨을 기억해보자. )code 규칙을 중요시 해야 한다.Callback Rule1. 가능한 빨리 종료하라// Anti-Patternif (err) { cb(err);} else { ---}// Quick Retrun Patternif (err) { return cb(err);}콜백이 호출된 후 함수 종료를 잊지 말아야 한다.또한 함수가 반환하는 결과는 중요하지 않다. 실제 결과는 비동기적으로 생성돼 콜백에 전달된다.2. 콜백을 위해 명명된 함수를 생성해 클로저 바깥에 배치 후 중간 결과를 ..
Observer 패턴
·
Backend/Node.js
상태 변화가 일어날 때 관찰자(listeners)들에게 통지할 수 있는 객체 정의를 통해 패턴을 구성함EventEmitter ClassEventEmitter 생성 및 사용import { EventEmitter } from 'events'import { readFile } from 'fs'function findRegex (files, regex) { const emitter = new EventEmitter() for (const file of files) { readFile(file, 'utf8', (err, content) => { if (err) { return emitter.emit('error', err) } emitter.emit('fileread', fil..
Callback 패턴
·
Backend/Node.js
비동기 작업이 끝날 때 메인 실행 흐름이 이를 통지 받는 가장 기본적인 매커니즘CallBack : 비동기 작업의 결과를 가지고 런타임에 의해 호출되는 함수CPS ( Continuous-Passing Style )비동기에만 관련된 개념은 아니며, 결과를 다른 함수로 전달하는 스타일을 의미한다DS ( Direct Style )function add(a, b) { return a + b}CPS Code ( 비동기 X )function addCps (a, b, callback) { callback(a + b)}console.log('before')addCps(1, 2, result => console.log(`Result: ${result}`))console.log('after')CPS Code ( 비동기..
Module System ( ESM )
·
Backend/Node.js
Node 에서 모듈 시스템은 CommonJS(CJS) & ECMAScript modules(ECM) 두가지가 있다.Good Module System파일의 분할: 구조적으로 코드를 구성하고 관리코드의 재 사용성: 중복성 제거은닉(캡슐)화: Public API 제공으로 접근성 제한종속성 관리: 모듈들의 복잡한 종속성은 NPM으로 관리CJS : Node.js의 FS에 직접 접근하는 특성을 이용 오직 Local JS File에 의존ECM : Browser와 Server의 차이를 연결하기 위한 노력으로 탄생 Module PatternRevealing Module Pattern (RMP)/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "private" }] ..
Module System ( CJS )
·
Backend/Node.js
Module CacheNode 에서 모듈 시스템은 CommonJS(CJS) & ECMAScript modules(ECM) 두가지가 있다. Good Module System파일의 분할: 구조적으로 코드를 구성하고 관리코드의 재 사용성: 중복성 제거은닉(캡슐)화: Public API 제공으로 접근성 제한종속성 관리: 모듈들의 복잡한 종속성은 NPM으로 관리CJS: Node.js의 File System에 직접 접근하는 특성을 이용. 오직 Local JS File에 의존ECM: Browser와 Server의 차이를 연결하기 위한 노력으로 탄생 Module PatternRevealing Module Pattern (RMP)/* eslint no-unused-vars: ["error", { "varsIgnorePa..
Node.js Interview
·
Backend/Node.js
Node Waybe Smaller and be Simplelightweight CoreNode Core의 기능을 최소화하고, 방대한 사용자 전용 모듈 생태계 ( User Land ) 를 구축했다.사용자 관점에서 폭 넓은 해결책을 실험해 볼 수 있게 됐다. ( 모듈 생태계가 매우 크게 형성돼있다. )lightweight ModuleNode Code 구성의 기본단위는 Module이다.최대한 Minimal 하고, 하나의 단일 기능만 가지도록 디자인하는 패턴이 있으며 모듈들이 상호의존하며 생태계를 구성하고 있기 때문에 NPM을 이용해 해결한다.합리적이며, 테스트와 리팩토링이 용이하다.Small Interface명백한 단일 진입점을 위한 단 하나의 함수/클래스를 노출시킨다.이때 Class는 내부 메소드에 따라 단..