본문 바로가기

기술면접 준비

Node.js가 작동하는 방식: 단일 스레드(Single Thread), 비동기(Asynchronous)

📕 오늘의 질문

Single Threaded Async가 무슨 뜻인지 아시나요?

단일 스레드에 대해서도 공부해보고, 비동기에 대해서도 공부해봤지만 'Single Threaded Async'는 본 적이 없어서 조금 당황한 질문입니다. 실제로 구글링을 하거나 유튜브 검색을 했을 때에도 이 정확한 용어는 찾지 못했기 때문에, 추측으로 단일 스레드와 비동기에 대해 설명하는 질문이라고 가정하고 개념을 정리해봤습니다. 아마 Node.js가 작동하는 방식을 설명할 수 있는 지를 보기 위한 질문인 것으로 생각됩니다 (부트캠프에서 주특기로 Node.js를 선택했기 때문에 받은 질문도 이에 특정된 질문인 것을 염두했을 때의 생각입니다).

 

자, 그러면 어서 단일 스레드와 비동기에 대해 알아보도록 하겠습니다.

 

단일 스레드(Single Thread) vs 멀티 스레드(Multi Thread)

스레드란 가장 기본적인 CPU 사용의 단위입니다. 프로세스는 스레드보다 큰 단위로, 하나의 프로세스는 여러 스레드를 포함할 수 있습니다. 스레드는 thread ID, program counter, register set, stack으로 구성되며, 같은 프로세스의 다른 스레드와 code section, data section 및 기타 운영 시스템 리소스를 공유합니다.

 

단일 스레드의 경우 하나의 태스크를 수행하며, 멀티 스레드의 경우 여러 태스크를 수행할 수 있습니다. 다음 그림에서 볼 수 있든, 단일 스레드의 경우 하나의 스레드가 한 가지 태스크를 수행합니다. 반면 멀티 스레드의 경우 여러 개의 스레드가 여러 개의 태스크를 수행합니다. 멀티 스레드에서 각 스레드는 각자의 register와 스택을 갖습니다.

출처: 유튜브 Neso Academy

 

비동기란?

동기, 비동기는 코드의 순서와 관련된 이야기입니다. 동기의 경우 함수는 다음과 같이 순서대로 작동됩니다. 1번이 실행되고 완료된 다음 2번이 실행되고, 2번이 완료되었을 때 3번이 시작되고 완료됩니다.

let a = 1
let b = 2

console.log('Sync')

console.log(a)
console.log(b)

// 콘솔 결과
Sync
1
2

 

반면, 비동기일 경우 순서는 상관 없이 지정된 실행 시점에 실행됩니다. 시작은 동기 방식과 동일하게 맨 위에서부터 시작해서 내려오다 비동기 이벤트가 걸리면, 코드가 작성된 위치와 상관 없이 걸린 비동기 이벤트를 수행하게 됩니다. 

let a = 1
let b = 2

setTimeout(function() {
    console.log('Async')
}, 100)

console.log('Sync')

console.log(a)
console.log(b)

// 콘솔 결과
Sync
1
2
Async // 비동기 함수인 setTimeout으로 인해 100 이후에 실행되어 마지막으로 콘솔에 찍히게 됨

 

단골 질문인 것에 비해 개념 자체는 그렇게 어렵지 않습니다. 하지만 Node.js 작동방식과 관련된 매우 중요한 개념이기 때문에 최대한 정확하고 깔끔하게 답할 수 있도록 연습해야겠습니다.

 

 

참고자료

Neso Academy, Introductino to Threads

코드깎는노인, 자바스크립트 - 동기(Sync)와 비동기(Async)

Web Dev Simplified, Asynchronous Vs Synchronous Programming