TypeScript&JavaScript/Node.js(4)
-
관찰자 패턴과 EventEmitter
관찰자 패턴은 상태 변화가 일어날 때 관찰자(또는 Listner)에게 알릴 수 있는 객체(Subject)를 정의하는 것. 전통적인 연속 전달 스타일 콜백은 일반적으로 그 결과를 하나의 Listner인 콜백에만 전파하지만 관찰자 패턴은 Subject가 실제로 여러 관찰자(Observer)들에게 알릴 수 있다는 것이 큰 차이다. 순수 자바스크립트는 동기적으로 작동하는데, 이 의미는 한 번에 하나의 프로세스만 실행시킨다는 것이다. 따라서 이벤트 루프를 활용하여 비동기적으로 작용하는 것은 정확히는 Node.js의 libuv라는 라이브러리를 통해 구현된다. 대표적인 비동기작업인 setTimeout이나 I/O 활동, HTTP 요청등이 libuv를 통해 스케쥴링되고 쓰레드 풀이나 커널에 인계한 콜백 작업을 실행하는 ..
2020.02.20 -
Reactor 패턴
운영체제에서도 나오지만, I/O 작업은 느리다. 그리고 사용자의 이벤트에 따라 발생하기 때문에 종료시점을 파악하기도 까다롭다. 전통적인 블로킹 I/O 방식은 동기적으로 동작한다. 블로킹 I/O를 사용하여 구현된 웹 서버는 동일한 스레드에서 여러 연결을 처리할 수 없게 된다. 각 소켓에서 모든 I/O 작업이 다른 연결 처리를 차단할 것이기 때문이다. 이러한 이유로 웹 서버에서 동시성을 처리하기 위한 전통적인 접근 방식은 처리해야 하는 각각의 동시 연결에 대해 새로운 스레드또는 프로세스를 시작하거나 풀에서 가져온 스레드를 재사용하는 것이다. 이렇게 하면 I/O 작업으로 스레드가 차단되어도 분리된 스레드에서 처리되므로 다른 요청의 가용성에는 영향을 미치지 않는다. 그러나 이 경우, '유휴상태'시점에서 유지되어..
2020.02.09 -
Map, Set Collection, WeakMap, WeakSet Collection
ES2015 기준 "use strict" const profiles = new Map(); profiles.set('twitter', '@adalovelace'); profiles.set('facebook', 'adalovelace'); profiles.set('googleplus', 'ada'); profiles.size; // 3 profiles.has('twitter'); // true profiles.get('twitter'); // "@adalovelace" profiles.has('youtube'); // false profiles.delete('facebook'); profiles.has('facebook'); // false profiles.get('facebook'); // undefin..
2020.02.09 -
Node.js의 철학
1. 경량 코어 : 코어는 최소로, 추가 모듈은 생태계에 2. 경량 모듈 : 작은 것이 아름답다, 각 프로그램이 각기 한 가지 역할을 잘 하도록 만든다 => 이해하기 쉽고, 사용하기 쉽다. 테스트 및 유지보수가 훨씬 간단하다. 브라우저와 완벽한 공유가 가능하다. 3. 작은 외부 인터페이스 : 모듈의 정의는 경량화를 목적으로, 가장 일반적인 패턴은 함수나 생성자와 같이 하나의 핵심 기능을 표현하는 동시에, 더 많은 고급 기능이나 보조 기능은 노출된 함수나 생성자의 속성이 되도록 하는 것. 이렇게 모듈의 크기와 범위가 작고 최소한의 기능을 노출하는 특성을 달성하려고 하면 API의 유용성 역시 향상된다. 보다 명확해지고 잘못된 사용에 덜 노출되는 결과를 얻을 수 있다.
2020.02.09