[철학] NodeJS 쓰레드가 하나인 이유 - 공유지의 비극

2025. 11. 29. 13:31·프로그래밍
반응형

많은 사람들이 "NodeJS는 싱글 쓰레드다." 라고 말합니다.

하지만 대부분은 "왜" 싱글 쓰레드로 만들어졌는지 알지 못합니다.

 

이번 글에서는 노드를 만든 Ryan Dahl이 왜 싱글 쓰레드로 설계했는지,

노드에 담긴 철학이 무엇인지 설명드리겠습니다.

 

블로그에 개발관련 글을 작성중이니 많은 관심 부탁드립니다.

1. 병렬 처리

대부분의 시스템은 쓰레드를 이용해 병렬 연산을 수행합니다.

쓰레드는 자원을 공유하고 동시 접근 가능한 특징이 있습니다.

 

바로 이 지점에서 문제가 발생하는데요.

데드락, 동시 수정, 동시 접근 등등 수많은 오류가 나타납니다.

쓰레드는 공유지의 비극이 일어난다

 

이 오류를 해결하기 위해 쓰레드가 자원에 락을 걸고 사용후에는 해제하고,

다른 쓰레드는 손가락만 빨며 기다리고... 수많은 오류가 나타납니다.

 

순차적 처리와 달리 병렬 처리는 결과도 비결정론적이라 디버깅도 상당히 어렵죠.

이러한 피로감으로 인해 병렬처리를 꺼리는 개발자도 많이 있습니다.

 

그렇다면, NodeJS는 무엇이 다를까요?

이제부터 노드에 담긴 철학과 그걸 풀어낸 이야기를 알려드리겠습니다.

반응형

2. NodeJS는 프로세스로 병렬처리한다.

NodeJS는 프로세스 단위로 병렬을 처리합니다.

새로운 병렬처리가 들어오면 프로세스를 생성해서 처리하죠.

 

그리고 NodeJS는 프로세스를 생성할 때 자원을 공유하지 않습니다.

때문에 프로세스를 실행할 값들을 가져가서 처리하는 방식으로밖에 동작하지 않습니다.

 

Ryan Dahl은 이런 쓰레드간의 공유 자원으로 인한 비극을 없애기 위한 구조를 만들었습니다.

병렬 처리를 프로세스 단위로 나누고, 자연스럽게 자원을 공유하지 않는 형태로 구현되었습니다.

 

덕분에 async, await은 다른 언어의 비동기 처리들과 비교해 훨씬 우아한 방식으로 동작합니다.

NodeJS는 다른 언어들에 비해 기술적 난이도가 훨씬 낮으면서도 우아한 코드를 작성할 수 있게 되었죠.

 

난이도가 낮다는 것은 같은 시간동안 더 많은 업무를 처리할 수 있다는 말이기도 하므로,

어떻게 보면 NodeJS에 담긴 철학이 우리의 업무 환경 자체를 바꿔놓았다고도 평가할 수 있죠.

마치며...

공유 자원에 대한 고찰과 철학은 저에게 매우 큰 영감을 주었습니다.

이러한 영감은 제가 파이썬, C, 자바 등등 다른 언어를 사용할 때에도 큰 영향을 주었습니다.

 

쓰레드를 사용하면서 공유 자원을 만들지 않게 코드를 짜게 되겠죠.

그렇다면 이건 노드닉한 파이썬, 노드닉한 자바라고 부를수 있겠네요.

추천 포스트

 

[프로그래밍] 나만의 클린코드

클린 코드란 무엇일까요?코드에 정답은 없습니다.이 글에서는 제가 생각하는 클린 코드의 정의를 전달하고자 합니다. 먼저 구글에 클린코드의 정의를 검색하면 다음과 같습니다.클린 코드(Clean

aierse.tistory.com

 

[React] Three Dots 로딩 라이브러리 소개

See the Pen Untitled by Aierse (@Aierse) on CodePen.">See the Pen Untitled by Aierse (@Aierse) on CodePen. 매번 로딩바를 구현할 필요없이 로딩 애니메이션을 제공하는 리액트 라이브러리를 소개합니다.react-spinner는 로

aierse.tistory.com

 

반응형

'프로그래밍' 카테고리의 다른 글

[프로그래밍] 깃허브 위키를 아시나요??  (0) 2024.04.15
[Typescript vs Javascript] 타입스크립트의 종말  (2) 2024.04.11
[프로그래밍] 2024년에 새롭게 추가되는 자바스크립트 신규 기능  (0) 2024.04.11
[프로그래밍] 나만의 클린코드  (0) 2024.03.15
'프로그래밍' 카테고리의 다른 글
  • [프로그래밍] 깃허브 위키를 아시나요??
  • [Typescript vs Javascript] 타입스크립트의 종말
  • [프로그래밍] 2024년에 새롭게 추가되는 자바스크립트 신규 기능
  • [프로그래밍] 나만의 클린코드
Aierse
Aierse
리액트, 뷰 등 웹 개발의 모든 것
    반응형
  • Aierse
    <Aierse />
    Aierse
  • 전체
    오늘
    어제
    • 분류 전체보기
      • CS
      • 프로그래밍
        • Editer
      • Javascript
      • 웹
        • React
        • VueJS
        • NestJS
      • NodeJS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    TypeScript
    프로그래밍
    CI/CD
    Between
    전체선택
    Workspace
    react
    가독성
    serverless
    actions
    클린 코드
    lambda
    nodejs
    async
    자바스크립트
    nestjs
    array every
    NoSQL
    enum
    vue3
    JSDOC
    .vscode
    리액트
    클린코드
    AWS
    vscode
    폴더 관리
    체크박스
    dynamodb
    JavaScript
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Aierse
[철학] NodeJS 쓰레드가 하나인 이유 - 공유지의 비극
상단으로

티스토리툴바