백엔드 개발 · 심화
Node.js에서 Stream의 backpressure 현상이 발생하는 원인과 Transform Stream에서 이를 해결하는 방법을 설명해주세요.
힌트 · 데이터 생산 속도가 소비 속도보다 빠를 때 발생하며, drain 이벤트와 highWaterMark 조절로 해결합니다.
backpressurereadablewritablepipedrain
모범답안
Node.js에서 Stream의 backpressure는 데이터 생산 속도가 소비 속도보다 빠를 때 발생합니다. 예를 들어, 읽기 가능한 스트림(Readable)에서 데이터를 빠르게 생성하지만, 쓰기 가능한 스트림(Writable)이 데이터를 처리하는 속도가 느리면 버퍼가 넘치게 되죠.
Transform Stream에서 backpressure를 해결하는 핵심은 _transform 메서드에서 push를 신중하게 사용하는 것입니다. 데이터를 변환하여 push하기 전에, 쓰기 가능한 스트림의 writableNeedDrain 속성을 확인하여 backpressure가 있는지 확인합니다. 만약 true라면, drain 이벤트를 리스닝하고 이벤트가 발생한 후에 데이터를 push하여 데이터 손실을 방지할 수 있습니다. 또한, highWaterMark 옵션을 조절하여 버퍼 크기를 관리하는 것도 중요합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Node.js 면접 질문
- Express.js에서 미들웨어 체인이 비동기 에러를 처리할 때 발생할 수 있는 문제점과 async/await 환경에서의 에러 핸들링 전략을 설명해주세요.
- Node.js 애플리케이션에서 메모리 누수가 발생하는 주요 원인들과 Heap Dump 분석을 통한 디버깅 방법을 설명해주세요.
- Node.js의 Cluster 모듈과 PM2의 차이점, 그리고 로드 밸런싱 알고리즘별 특성을 비교하여 설명해주세요.
- Express.js에서 대용량 파일 업로드 시 발생할 수 있는 성능 이슈와 Multer의 메모리/디스크 저장 전략을 설명해주세요.
- Node.js의 require() 캐싱 메커니즘과 ES6 모듈 시스템의 차이점, 그리고 순환 참조 해결 방법을 설명해주세요.