스트림은 자바에서도 사용되지만 이 경우에는 Web API로써 Stream 이 무엇인지에 대해서 다룬다.
stream은 기본적으로 데이터의 입출력이 원활하게 이루어질 수 있게끔 네트워크를 통해 전송된 데이터 스트림에 접근하여 데이터를 다루는 API에 해당한다.
streaming의 예시는 Youtube를 예시로 생각해볼 수 있다. Youtube로 영상을 시청할 때 인터넷이 느릴 경우 영상의 모든 시간이 로딩이 되지 않고 천천히 늘어나는 모습을 볼 수 있을 것이다. 이러한 현상이 일어나는 이유는 네트워크를 통해 받은 리소스, Raw Data를 Bit 단위로 잘게 나눠서 처리할 수 있게끔 만들어 전송하기 때문이다.
이렇듯 작은 단위로 Bit를 나눠서 데이터를 전송하는 방식의 장점은 Stream의 시작 또는 종료를 감지할 수 있다는 것과 여러 Stream을 엮어 에러를 처리하거나 필요한 부분에서 취소할 수 있다는 것입니다.
Stream의 주요한 기본 사용법은 fetch request를 통해서 정상적으로 응답된 데이터를 ReadableStream로 변환하여 관련된 API를 통해서 전송된 데이터를 다루는 방식으로 사용이 된다.
ReadableStreams
스트림에 대해서 다룰 때 데이터 소스를 어디에서 갖고 오는지가 중요하다. 지금 하려는 웹에서는 데이터를 네트워크 또는 도메인의 다른 위치에 있는 곳에서 불러오게 된다. 이 경우 소스를 갖고 오는 경우가 두 가지로 나뉘게 된다.
- Push source, 데이터 입력, 전송 소스에 접속, 접근할 때 데이터를 지속적으로 전송하며 이러한 접속 또는 접근의 시작과 일시 정지 또는 취소를 하는 것은 사용자에게 달려 있다. ex) video stream, TCP/Web sockets
- Pull source, 데이터 출력, 갖고 오기 연결된 후 데이터를 갖고 오기 위해서는 데이터를 명시적으로 요청해야 한다.
여기서 스트림내에 청크가 대기열 처럼 자기의 순서를 기다리고 있다는 것은 큐의 데이터 저장과 출력의 방식으로 스크림내에서 대기하고 있는 청크들은 자신의 차례를 기다리고 있다 자신의 차례가 될 경우 출력되는 형식으로 사용됩니다.