벤권의 개발자 이야기

Node.js Streams에 대하여 3부 본문

-/node

Node.js Streams에 대하여 3부

벤권 2022. 2. 25. 22:06

이 포스팅은 2부에 이어서 작성되는 게시글이다. 스트림이 뭔지 잘 아직 모른다면 1부,2부를 먼저 보고 오는걸 매우 추천한다.

Node.js Streams에 대하여

Paused and Flowing Modes of Readable Streams

Readable streams은 우리가 스트림을 사용하는데 있어서 2가지의 주요 모드가 있다.

  1. 일시 정지 (Paused) 모드
  2. 흐름 (Flowing) 모드

두 모드는 각각 pull and push 모드라고 불리기도 합니다.

 

모든 Readable stream은 기본적으로 일시 정지 모드로 시작하지만 언제든 흐름 모드와 일시 정지모드를 필요할 때마다 오갈 수 있다. 때때로 자동으로 모드가 바뀌기도 한다.

 

readable stream이 일시 정지 모드일때, read()라는 메서드를 stream에서 read하기 위해 사용할 수 있는데 흐름 모드에서는 자동으로 데이터가 흘러가기 때문에 이를 사용하려면 우리는 데이터가 들어오는 것을 예의 주시(listen)하고 있어야합니다.

 

흐름 모드에서는 데이터가 흘러올 때 이를 소비할 consumer가 없으면 데이터는 소실됩니다.

때문에 우리가 흐름 모드로 readable stream이 동작할 때 data 이벤트 핸들러를 가지고 있어야 한다.

실제로 그냥 data 이벤트 핸들러를 추가하기만 하면 일시 정지 모드에서 흐름 모드로 바뀌고 만약 data 이벤트 핸들러를 다시 지우면 일시정지 모드로 돌아온다.

이중 일부는 이전의 오래된 노드 스트림 인터페이스와 호환되기 위해 수행된다.

 

만약 두 스트림 모드를 오가고 싶으면 resume(), pause() 메서드를 이용하면 된다.

Screenshot captured from my Pluralsight course — Advanced Node.js

pipe를 통하여 readable stream을 이용하고 있다면 이 모드들에 대해 생각할 필요 없다. 알다시피 파이프는 기본적으로 프로그래머가 해야할 일 대부분은 대신 해주기 때문인다.

 

마치며

역시 event를 통해 stream을 핸들하게 되면 고려할 사항이 많아진다. pipe를 이용하면 자동으로 흐름모드로 바뀌고 프로그래머가 생각해야할 부분이 적어진다. 하지만 개발하다보면 모든 상황을 pipe로 해결할 순 없다. 둘 다 잘 알아두자.

 

3부는 짧게 끝났지만

4부는 좀 길 것 같다. 4부에 이어서 계속

Comments