패스잇
백엔드 개발 · 심화

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 면접 질문

← Node.js 면접 질문 전체 보기