인프런 커뮤니티 질문&답변

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

노드의 특성

논 블로킹 방식의 동작 원리 이해가 어렵습니다.

24.07.29 16:20 작성

·

101

0

강의 교안의 논 블로킹의 정의

image.png

와 책의 예제(setTimeout 함수를 이용해 작업 시간이 긴 함수를 백그라운드로 보냄)를 읽어 보면

오래 걸리는 함수를 백그라운드로 보내는 것 같은데, 그 다음 설명을 보면

image.png

일부 코드들이 백그라운드에서 병렬로 실행된다고 되어있어서 헷갈립니다.

위 내용을 바탕으로 제가 이해한 것은

  • 작업 시간이 긴 함수, 일부 코드 모두 백그라운드로 전달

  • 작업 시간이 긴 함수는 태스크 큐로 전달되고 동시 작업이 가능한 일부 코드들은 백그라운드에서 병렬로 처리

  • 일부 코드들의 병렬 처리가 끝나고 나면 태스크 큐에 있는 (블로킹 방식의)작업 시간이 긴 함수 처리

인데 맞을까요?

답변 2

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2024. 07. 29. 16:26

네 맞습니다. 작업 시간이 긴 함수가 순수히 JS로만 구성되어 있다면 setTimeout이나 Promise로 태스크 큐로 넘길 수 있습니다.

일부 코드들의 병렬처리보다 태스크 큐에 있는 작업 시간이 긴 함수 처리가 더 먼저 진행됩니다. 백그라운드에서 병렬처리가 끝난 후에야 태스크 큐에 등록됩니다.

공태성지능으로고상언짓하기님의 프로필 이미지

2024. 07. 29. 16:39

일부 코드들의 병렬처리보다 태스크 큐에 있는 작업 시간이 긴 함수 처리가 더 먼저 진행됩니다.

에서 더 먼저 진행된다는 것의 의미가 무엇인가요? 저는 작업 시간이 긴 함수가 먼저 실행되지 않기 위해 논 블로킹 방식을 이용한다고 이해했는데, 그럼 이 말은

만약~ 태스크 큐에 보내지지 않으면 병렬 처리 전에 작업 시간이 긴 함수를 먼저 처리한다는 의미인가요??

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2024. 07. 29. 17:22

지금 병렬처리될 수 있는 코드와 작업시간이 긴 JS 함수를 동시에 생각하시는 것 같은데, 저는 예시를 그렇게 든 적이 없긴 합니다.

  1. 코드 중에는 병렬처리될 수 있는 코드가 있다.

  2. 태스크 큐로 보내는 방식으로 작업시간이 긴 함수의 실행을 뒤로 미룰 수 있다.

이게 제가 설명한 것 전부이고요. 1,2가 동시에 일어나는 상황에서의 실행 순서는 코드에 따라 다릅니다. 일반적인 경우 1,2가 동시에 시작했다면 2가 먼저 실행되고 1이 실행됩니다.

실행이라고 함은, JS단에서 처리가 완료되는 것을 의미합니다.

공태성지능으로고상언짓하기님의 프로필 이미지

2024. 07. 29. 17:35

뭔가 제 개념에 문제가 있는 것 같은데 더 깊이 들어가지 않고 마지막으로 답변주신 내용대로 외우고 있겠습니다.. ㅜㅜ

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

2024. 07. 29. 17:51

네 저 일부 코드가 뭔지만 외우고 계시면 됩니다. 백그라운드로 보내는 코드랑요.

0

인프런 AI 인턴님의 프로필 이미지

2024. 07. 29. 16:26

안녕하세요, 인프런 AI 인턴입니다.

논 블로킹(Non-blocking) 방식에 대한 근본적 이해를 돕기 위해서, 관련된 기존 질문과 답변 링크들을 찾아보았습니다. 논 블로킹 방식의 동작 원리와 관련하여 질문자님께서 제시한 내용과 유사한 주제에 대한 질문과 답변을 아래에서 참고하실 수 있습니다.

노드(Node.js)에서 논 블로킹(Non-blocking) 방식은 오래 걸리는 작업(예: 파일 시스템 접근, 네트워크 요청 등)을 처리할 때 사용되는 모델입니다. 이 모델의 핵심은 오래 걸리는 작업을 백그라운드에서 처리하도록 보내고, 작업이 완료되면 그 결과를 콜백 함수나 프로미스(Promise)를 통해 전달받는 것입니다. 이를 통해, 메인 스레드는 다른 요청을 계속 처리할 수 있어 애플리케이션이 멈추지 않고, 더 많은 요청을 동시에 처리할 수 있게 됩니다.

답변 링크:
1. 논블로킹과 이벤트 루프 - 이 답변은 백그라운드에서 처리되는 작업들(예: setTimeout)이 실제 어떻게 동시에 처리되는지에 대한 설명을 포함하고 있습니다. 자바스크립트 코드가 돌아가는 쓰레드는 하나뿐이지만 백그라운드에서는 여러 쓰레드를 사용할 수 있다고 언급하고 있습니다.

  1. node에서 말하는 non-blocking에 대한 개념 문의 - 논 블로킹은 오래 걸리는 함수를 백그라운드로 보내는 방식으로 설명되어 있는데, 이 과정에서 node.js가 어떻게 논 블로킹 I/O를 처리하는지에 대한 자세한 설명이 포함됩니다.

  2. 비동기 코드 질문 - 이 부분은 setTimeout과 같은 비동기 코드가 백그라운드에서 어떻게 작동하는지를 포함하여 이벤트 루프와 태스크 큐의 관계를 설명합니다.

위 링크들은 논 블로킹 방식의 동작 원리에 대한 질문자님의 이해를 돕기 위해 추천되었습니다. JavaScript의 비동기 처리 모델이 Node.js에서 어떻게 활용되는지에 대한 기본적인 설명을 담고 있으니 참고하시면 좋을 것 같습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.