Page 19 -
P. 19
> node nextTick.js
D:\microservice\nextTick.js:7
a.a = 0; // 예외 발생
^
ReferenceError: a is not defined
at func (D:\microservice\nextTick.js:7:9)
at _combinedTickCallback (internal/process/next_tick.js:71:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
at Module.runMain (module.js:606:11)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)
at bootstrap_node.js:509:3
의도적으로 콜백 이후에 예외가 발생하도록 선언되지 않은 변수에 접근하게 했습니다( 3 ). func
함수에서는 process.nextTick 함수를 이용해 비동기로 동작하도록 코드를 수정했습니다( 1 ).
try~catch 문을 적용했으니 “exception!!”이라는 문자를 화면에 표시해야 합니다( 2 , 4 ). 하지
만 try~catch 문이 실행되지 않고 프로세스 실행 에러가 발생합니다. process.nextTick 함수는
비동기 처리를 위해 Node.js 내부의 스레드 풀로 다른 스레드 위에서 콜백 함수를 동작합니다.
try~catch 문은 같은 스레드 위에서만 동작하기 때문에 서로 다른 스레드 간의 예외 처리가 불가
능합니다. 이처럼 process.nextTick 함수를 이용하면 Node.js가 CPU를 효율적으로 사용하는
대신 try~catch 문만으로는 예외 처리가 불가능합니다. 다음 절에서는 Node.js의 싱글 스레드 프
로그래밍 개념과 예외 처리 방법을 알아보겠습니다.
3.2 싱글 스레드 프로그래밍 No DE .js Mi C ros E rvi CE s
CPU는 한 번에 하나의 명령만 수행할 수 있습니다. 그래서 CPU의 클록 수에 따라 처리 속도가
결정됩니다. 이러한 한계를 극복하려고 스레드 개념을 도입했습니다. CPU는 한 번에 하나의 명
령만 수행할 수 있지만, 운영체제의 스케줄러가 매우 짧은 주기로 각기 다른 명령을 우선순위에
따라 실행시키면 동시에 여러 로직도 수행할 수 있습니다. 이를 멀티스레드 프로그래밍이라고 합
니다.
030
Microservices_07.indd 30 2018-02-09 오전 11:50:19