노드 학습 7일차
스레드풀과 커스텀 이벤트
스레드풀
기본 설정 기준 스레드풀에서 스레드는 4개씩 동작합니다. 가지고 있는 컴퓨터의 코어가 6개, 8개라 하여도 4개씩 수행됩니다.
보다 효율적으로 사용하기 위해서는 다음의 명령어로 수정할 수 있습니다.
UNIX 운영 체제 기준
UV_THREADPOOL_SIZE = {SIZE}
윈도우 운영 체제 기준
SET UV_THREADPOOL_SIZE = {SIZE}
커스텀 이벤트
events 모듈을 사용하여 커스텀 이벤트를 만들 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
const EventEmitter = require('events');
const myEvent = new EventEmitter();
myEvent.addListener('event1',()=>{
console.log('이벤트1')
})
myEvent.on('event2',()=>{
console.log('이벤트 2');
})
myEvent.on('event2',()=>{
console.log('이벤트2 추가');
})
myEvent.addListener('event1',()=>{
console.log('addEventListener 에도 동일하게 콜백이 추가 되는지 확인하기 위한 이벤트 추가');
})
myEvent.once('event3',()=>{ // 한번만 실행되는 이벤트 트리거
console.log('이벤트 3. 한번만 실행됨');
})
myEvent.emit('event1');
myEvent.emit('event2');
myEvent.emit('event3'); // 최초 1회 실행
myEvent.emit('event3'); // 실행 되지 않음
myEvent.on('event4',()=>{
console.log('이벤트 4');
})
myEvent.on('event4',()=>{
console.log('removeAllListeners와 removeListener 를 비교하기 위해 이벤트 리스너 2개 등록');
})
myEvent.removeAllListeners('event4'); // event4 이벤트 전체 삭제
myEvent.emit('event4');
const callback1 = (stream) =>{
console.log('이벤트5');
}
const callback2 = (stream) =>{
console.log('removeListener 테스트용');
}
myEvent.on('event5',callback1)
myEvent.on('event5',callback2)
myEvent.removeListener('event5',callback1); // callback1 은 삭제되고 callback2 만 남음
myEvent.emit('event5');
console.log(myEvent.listenerCount('event2'));
에러 핸들링
에러 발생 시 노드의 스레드를 중지 시키기 때문에 반드시 해야합니다.
그렇기 때문에 에러를 발생시킬 수 있는 곳에서는 try-catch를 통한 에러 핸들링을 해야합니다.
단 콜백 기반에서 전달해주는 에러와 프로미스의 catch는 서버를 중단시키지 않는 에러이기 때문에 적절한 핸들링 작업은 필요하지만 무분별하게 try-catch를 사용할 필요는 없습니다.
마지막 수단으로 process 객체 자체에서 에러를 핸들링하는 방법도 있습니다.
1
2
3
4
5
6
7
8
9
10
11
process.on('uncaughtException',(err)=>{
console.error('예상치 못한 에러',err);
})
setInterval(() => {
throw new Error('서버 대폭팔!');
}, 1000);
setTimeout(() => {
console.log('실행이 됩니다');
}, 2000);
하지만 이 방법은 문제를 해결할 수 있는 수단이 되지 않기 때문에 에러를 기록하는 용도로 사용하는 것이 좋습니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.