안녕하세요 글루미입니다.
오늘은 포스팅할 내용이 조금 많은데요, 다음 학습 포인트들에 대해서 정리해보려고 합니다!
- 병렬처리와 스레드
- 스레드 풀
- 이벤트 큐
- 이벤트 핸들러
- `Event Emitter`
병렬처리와 스레드
`Node.js`는 기본적으로 단일 스레드로 작동하지만, `비동기 I/O`와 이벤트 기반 아키텍처 덕분에 많은 요청을 동시에 처리할 수 있습니다. 그러나 CPU 집약적인 작업은 단일 스레드에서 실행될 경우 성능 저하를 일으킬 수 있습니다. 이를 해결하기 위해 `Node.js`는 여러 스레드를 활용할 수 있는 방법을 제공합니다.
- 스레드: `Node.js`의 기본 스레드는 이벤트 루프를 관리하고 비동기 작업을 처리합니다. 하지만 CPU 집약적인 작업은 `Node.js`의 `worker_threads` 모듈을 사용하여 별도의 스레드에서 실행할 수 있습니다.
- 병렬 처리: 여러 스레드를 활용하여 동시에 작업을 수행하는 방식입니다. `worker_threads` 모듈을 통해 스레드를 생성하고, 이를 통해 CPU 성능을 극대화할 수 있습니다.
스레드 풀
`Node.js`는 스레드 풀을 통해 `비동기 I/O` 작업을 관리합니다. `Libuv`라는 라이브러리를 사용하여 스레드 풀을 생성하고, 이를 통해 파일 시스템 접근, DNS 요청 등과 같은 블로킹 작업을 처리합니다. 기본적으로 `Node.js`는 4개의 스레드를 가진 스레드 풀을 사용하며, 설정을 변경하여 스레드 수를 조정할 수 있습니다.
스레드 풀을 활용하면 `비동기 I/O` 작업이 완료될 때까지 기다리지 않고, 이벤트 루프가 다른 작업을 수행할 수 있게 되어 전체적인 성능이 향상됩니다.
이벤트 큐
이벤트 큐는 `Node.js`의 이벤트 기반 아키텍처의 핵심입니다. 비동기 작업이 완료되면 해당 작업의 콜백 함수가 이벤트 큐에 추가됩니다. 이벤트 루프는 큐에서 대기 중인 이벤트를 확인하고, 실행할 준비가 된 이벤트를 처리합니다. 이 과정에서 비동기 작업과 동기 작업이 적절히 조화를 이루며, `Node.js`의 효율적인 비동기 처리를 가능하게 합니다.
이벤트 핸들러
이벤트 핸들러는 특정 이벤트가 발생했을 때 실행되는 함수입니다. `Node.js`에서는 `EventEmitter` 클래스를 사용하여 이벤트와 핸들러를 정의할 수 있습니다. 이를 통해 다양한 이벤트에 대한 반응을 정의하고, 복잡한 애플리케이션의 동작을 효과적으로 관리할 수 있습니다.
Event Emitter
`EventEmitter`는 `Node.js`에서 이벤트 기반 프로그래밍을 구현하는 데 사용되는 클래스입니다. 이 클래스는 이벤트를 발행하고 구독하는 기능을 제공합니다. 사용자는 특정 이벤트에 대한 핸들러를 등록하고, 이벤트가 발생할 때 해당 핸들러가 호출되도록 설정할 수 있습니다. 이를 통해 비동기 작업 간의 통신을 효율적으로 관리할 수 있습니다.
const EventEmitter = require('events');
// EventEmitter 클래스를 상속받는 MyEmitter 클래스 정의
class MyEmitter extends EventEmitter {}
// MyEmitter 인스턴스 생성
const myEmitter = new MyEmitter();
// 이벤트 핸들러 등록
myEmitter.on('event', () => {
console.log('이벤트가 발생했습니다!');
});
// 이벤트 발생
myEmitter.emit('event');
'Naver boostcamp' 카테고리의 다른 글
[회고] 네이버 부스트캠프 9기 챌린지 3주차 위클리 회고 (0) | 2024.08.04 |
---|---|
[학습 정리] 네이버 부스트캠프 챌린지 Day12 학습 정리 (0) | 2024.07.31 |
[회고] 네이버 부스트캠프 9기 챌린지 2주차 위클리 회고 (0) | 2024.07.28 |
[학습 정리] 네이버 부스트캠프 챌린지 Day09 학습 정리 (0) | 2024.07.25 |
[학습 정리] 네이버 부스트캠프 챌린지 Day08 학습 정리 (0) | 2024.07.24 |