window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster가 이미 존재합니다') } else { w.LeadBooster = { q: [], on: 함수 (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 함수 (n) { this.q.push({ t: 't', n: n }) }, } } })() 엄마! 그가 또 실을 막았어요! - The Codest
The Codest
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 산업 분야
    • 핀테크 및 뱅킹
    • E-commerce
    • 애드테크
    • 헬스 테크
    • 제조
    • 물류
    • 자동차
    • IOT
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
뒤로 화살표 뒤로 가기
2021-07-20
소프트웨어 개발

엄마! 그가 또 스레드를 막았어요!

The Codest

파웰 리브친스키

Software Engineer

"이벤트 루프를 차단하지 마세요..." - 아마 이 문장을 여러 번 들어보셨을 겁니다... 노드로 작업할 때 가장 중요한 가정 중 하나이기 때문에 놀랍지 않습니다. 그러나 차단하지 말아야 할 두 번째 '것'이 있는데, 바로 워커 풀입니다. 이를 무시하면 애플리케이션 성능과 보안에 심각한 영향을 미칠 수 있습니다.

스레드

기억해야 할 주요 사항: 다음 두 가지 유형의 스레드가 있습니다. Node.js: 메인 스레드 - 다음에서 처리합니다. 이벤트 루프및 작업자 풀 (스레드 풀) - 스레드 풀입니다.
리부브 덕분에. 각각 다른 작업을 수행합니다. 첫 번째는 비차단 I/O 작업을 처리하는 것이고, 두 번째는 CPU 집약적인 작업과 차단 I/O를 담당합니다.

리부브 다이어그램

그렇다면 스레드란 무엇이며 프로세스와는 어떻게 다를까요? 몇 가지 차이점이 있지만 가장 중요한 차이점은 메모리가 할당되는 방식입니다. 프로세스는 애플리케이션과 비슷하다고 생각하면 됩니다. 각 프로세스 안에는 이 프로세스만을 위한 메모리 덩어리가 있습니다. 따라서 한 프로세스는 다른 프로세스의 메모리에 액세스할 수 없으며, 이 속성은 높은 보안을 보장합니다. 이들 간의 통신을 설정하려면 몇 가지 작업을 수행해야 합니다. 스레드는 다릅니다. 스레드는 프로세스 내부에서 실행되고 동일한 메모리를 공유하므로 스레드가 데이터를 공유하는 데 전혀 문제가 없습니다.

하지만 한 가지 문제가 발생합니다. 바로 경쟁 조건입니다. 스레드가 동시에 실행될 수 있는데 어느 것이 먼저 끝나는지 어떻게 알 수 있을까요? 처음 실행할 때는 첫 번째 작업이 먼저 끝나고 다음에는 그 반대로 두 번째 작업이 첫 번째 작업보다 먼저 끝나는 경우가 발생할 수 있습니다. 이러한 조건에서 쓰기/읽기 작업을 한다고 상상해 보세요! 악몽이 따로 없죠! 때로는 올바르게 쓰는 것이 매우 어렵습니다. 코드 를 멀티 스레드 환경에서 사용할 수 있습니다.

또한 멀티 스레드 언어는 각 요청마다 별도의 스레드를 생성하기 때문에 메모리 오버헤드가 크므로 1000개의 요청을 호출하려는 경우 1000개의 스레드를 생성합니다.

이러한 문제를 어떻게 처리할 수 있을까요? 대신 단일 스레드를 사용하세요! 이것이 바로 노드 를 제공합니다.

단일 스레드 이벤트 루프

로서 JavaScript 개발자 다음 동영상을 시청해 보시기 바랍니다. 영화
에서 바트 벨더가 이벤트 루프의 개념을 명확하게 설명합니다. 위의 다이어그램은 그의 프레젠테이션에서 가져온 것입니다. 이 용어를 전혀 모르신다면 두 가지 모두 노드 와 Libuv는 훌륭한 문서를 보유하고 있습니다 🙂

차단 정보

In JavaScript 개발 업계에서는 다음과 같은 이유로 노드 는 단일 스레드 및 논-블록킹이므로 멀티 스레드 솔루션보다 동일한 리소스로 더 높은 동시성을 달성할 수 있습니다. 사실이지만 보기만큼 아름답고 쉽지는 않습니다.

이후 Node.js 가 단일 스레드(JS 부분)인 경우, CPU 집약적인 작업은 특정 작업이 완료될 때까지 진행 중인 모든 요청을 차단합니다. 따라서 Node.js 요청 중 하나에 차단 명령어가 포함되어 있다는 이유만으로 모든 요청을 차단할 수 있습니다. 차단 코드는 완료하는 데 몇 밀리초가 더 걸린다는 것을 의미합니다. 하지만 긴 응답 시간을 차단과 혼동하지 마세요. 데이터베이스의 응답은 매우 오랜 시간이 걸릴 수 있지만 프로세스(애플리케이션)를 차단하지는 않습니다.

차단 메서드는 동기적으로 실행되고 비차단 메서드는 비동기적으로 실행됩니다.

이벤트 루프 속도를 늦추거나 차단하려면 어떻게 해야 하나요?

  • 취약한 정규식 - 취약한 정규식은 정규식 엔진에 기하급수적인 시간이 걸릴 수 있는 정규식입니다. 여기,
  • 대형 오브젝트에 대한 JSON 작업,
  • 의 동기식 API를 사용하여 노드 Node.js 표준 라이브러리의 모든 I/O 메서드는 비동기 버전 대신 코어 모듈을 지원하며, 비동기 버전도 제공합니다,
  • 동기식 무한 루프와 같은 기타 프로그래밍 오류.

이 경우 워커 풀은 스레드 풀을 사용하기 때문에 차단도 가능한가요? 불행히도, 네 🙁 노드 는 다음과 같은 철학을 기반으로 합니다. 하나의 스레드로 여러 클라이언트를 지원합니다. 특정 워커가 수행하는 특정 작업이 매우 복잡하고 완료하는 데 더 많은 시간이 필요하다고 가정해 봅시다. 결과적으로 해당 워커는 차단되고 해당 명령이 실행될 때까지 다른 보류 중인 작업을 실행하는 데 사용할 수 없게 됩니다. 이제 짐작하셨겠지만 성능에 영향을 미칠 수 있습니다. 작업 파티셔닝을 사용하여 작업 시간의 변화를 최소화하면 이러한 문제를 방지할 수 있습니다.

결론

차단은 절대 피하세요. 가능하다면 항상 표준 라이브러리 API의 비동기 버전을 선택하세요. 그렇지 않으면 앱을 실행한 후 클라이언트는 처리량 저하부터 시작하여 완전한 탈퇴까지 여러 가지 문제를 경험할 수 있으며, 이는 사용자 입장에서 치명적입니다.

자세히 읽어보세요:

타입스크립트를 사용해야 하는 (아마도) 이유

잘못된 코딩 관행으로 프로젝트를 죽이지 않는 방법은 무엇인가요?

NextJS의 데이터 가져오기 전략

관련 문서

소프트웨어 개발

미래 지향적인 웹 앱 구축: The Codest의 전문가 팀이 제공하는 인사이트

The Codest가 최첨단 기술로 확장 가능한 대화형 웹 애플리케이션을 제작하고 모든 플랫폼에서 원활한 사용자 경험을 제공하는 데 탁월한 성능을 발휘하는 방법을 알아보세요. Adobe의 전문성이 어떻게 디지털 혁신과 비즈니스를 촉진하는지 알아보세요...

최신
소프트웨어 개발

라트비아에 본사를 둔 10대 소프트웨어 개발 기업

최신 기사에서 라트비아 최고의 소프트웨어 개발 기업과 그들의 혁신적인 솔루션에 대해 알아보세요. 이러한 기술 리더들이 어떻게 귀사의 비즈니스를 향상시키는 데 도움을 줄 수 있는지 알아보세요.

thecodest
엔터프라이즈 및 스케일업 솔루션

Java 소프트웨어 개발 필수 사항: 성공적인 아웃소싱을 위한 가이드

The Codest로 효율성을 높이고 전문 지식을 활용하며 프로젝트 성공을 이끌 수 있는 성공적인 outsourcing Java 소프트웨어 개발에 대한 이 필수 가이드를 살펴보세요.

thecodest
소프트웨어 개발

폴란드 아웃소싱을 위한 최고의 가이드

폴란드에서 outsourcing가 급증한 것은 경제, 교육, 기술 발전으로 인한 IT 성장과 비즈니스 친화적인 환경이 조성된 덕분입니다.

더코데스트
엔터프라이즈 및 스케일업 솔루션

IT 감사 도구 및 기술에 대한 완벽한 가이드

IT 감사는 안전하고 효율적이며 규정을 준수하는 시스템을 보장합니다. 전체 기사를 읽고 그 중요성에 대해 자세히 알아보세요.

The Codest
야쿱 야쿠보비치 CTO & 공동 설립자

지식창고를 구독하고 IT 분야의 전문 지식을 최신 상태로 유지하세요.

    회사 소개

    The Codest - 폴란드에 기술 허브를 둔 국제 소프트웨어 개발 회사입니다.

    영국 - 본사

    • 사무실 303B, 182-184 하이 스트리트 노스 E6 2JA
      영국 런던

    폴란드 - 현지 기술 허브

    • 파브리츠나 오피스 파크, 알레야
      포코주 18, 31-564 크라쿠프
    • 뇌 대사관, 콘스트럭터스카
      11, 02-673 바르샤바, 폴란드

      The Codest

    • 홈
    • 회사 소개
    • 서비스
    • Case Studies
    • 방법 알아보기
    • 채용 정보
    • 사전

      서비스

    • IT 자문
    • 소프트웨어 개발
    • 백엔드 개발
    • 프론트엔드 개발
    • Staff Augmentation
    • 백엔드 개발자
    • 클라우드 엔지니어
    • 데이터 엔지니어
    • 기타
    • QA 엔지니어

      리소스

    • 외부 소프트웨어 개발 파트너와의 협력에 대한 사실과 오해
    • 미국에서 유럽으로: 미국 스타트업이 유럽으로 이전을 결정하는 이유
    • 테크 오프쇼어 개발 허브 비교: 테크 오프쇼어 유럽(폴란드), 아세안(필리핀), 유라시아(터키)
    • CTO와 CIO의 주요 과제는 무엇인가요?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • 웹사이트 이용 약관

    저작권 © 2025 by The Codest. 모든 권리 보유.

    ko_KRKorean
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek ko_KRKorean