Stream   스트림

(2023-10-29)

1. 스트림(Stream) 이란?

  ※ 영어 뜻으로는, `흐르는 좁은 시냇물` 등을 의미

  ㅇ [데이터 관점]
     - 일반적으로, 데이터,패킷,비트 등의 일련의 연속성을 갖는 흐름을 의미
        . 음성,영상,텍스트 등의 작은 데이터 조각들이 하나의 줄기를 이루며,
        . 순서대로 물 흐르듯이 전송되는 데이터 열(列)

  ㅇ [프로세스 관점]
     - 원격 호스트 상호 간에 또는 동일 호스트 내에 존재하는,
     - 장치 또는 프로세스 들의 상호 간에 이루어지는 통신에서,
     - 에 의한 메세지 전달방식 등을 이용한,
     - 가상 연결 통로 또는 이를 구현한 소프트웨어 모듈


2. 동영상 재생 기술에서의 스트림 

  ※ ☞ 스트리밍 (Streaming) 참조
     - 점진적 다운로드하며 재생하는 방식


3. 암호화 방식에서의 스트림

  ※ ☞ 스트림 암호 (Stream Cipher) 참조
     - 비트/바이트/단어들을 순차적으로 암호화하는 방식


4. 다중안테나 방식에서의 스트림

  ※ ☞ 공간 스트림 (Spatial Stream) 참조   
     - 다중 안테나에 의해 공간 속을 데이터가 연속 흐르는 통로로 간주되는 라디오 링크


5. 운영체제 상의 스트림 

  ㅇ 스트림 사용 이유
     - 물리 디스크상의 파일,장치들을 통일된 방식으로 다루기 위한 가상적인 개념이 필요
        . 따라서, 스트림은 어디서 나왔는지 어디로 가는지 신경을 쓸 필요없이,
        . 자유롭게, 어떤 장치,프로세스,파일들과 연결될 수 있게 하므로써,
        . 프로그래머에게 많은 편리성 줌

  ㅇ 스트림 처리 상의 특징
     - 장치 독립적 임
        . 장치든 파일이든 프로세스이든 상관없음 (어떤 것과도 연결될 수 있음)
     - 버퍼 사용
        . 대부분, 스트림이 버퍼라는 임시 저장 공간을 갖고 있어서, 
        . 일정량을 모아두었다가, 시스템 효율을 고려하여 큰 데이터 덩어리 씩 처리하게 됨
        . 주로, CPU입출력 장치 간의 속도 차이 때문에 버퍼를 경유하게 함
     - 바이트 스트림
        . 읽고 쓸 때 바이트 단위로 이루어짐

  ㅇ 스트림 사용 例) 
     - 어떤 프로그램이, 파일,디바이스 등을 읽으려면,
        . 운영체제 커널에게, 이곳에 스트림을 연결토록, 시스템콜로써 요청하게 됨
     - 스트림 연결을 폭넓게 적용 가능
        . 즉, 장치 간 (장치파일), 네트워크 양단 간 (소켓), 프로세스 간 (파이프)에도, 
           .. 스트림 연결이 가능함


6. 프로그래밍 언어상의 스트림

  ㅇ [C 언어]
     - 유닉스 운영체제와 밀접한 관련있는, C 언어 프로그램은,
        . 입출력을 데이터 스트림으로 해석함

     - 입출력 통로
        . C 프로그램은, 프로그램 외부와 스트림 형식을 통해서 만 상호작용을 함
     - 처리 단위
        . 크게, 바이트(텍스트) 스트림 및 바이너리(이진) 스트림으로 구분 처리
     - 표준 스트림 : stdin, stdout, stderr파일기술자 참조
        . 따로, 스트림을 열 필요 없이 바로 사용 가능토록, 항상 열려있음
        . (표준 입력 스트림 : stdin, 표준 출력 스트림 : stdout, 표준 에러 스트림 : stderr)
     - 파일 스트림 
        . 파일 입출력시, 표준 스트림 처럼 자동으로 스트림이 생성되지 않고, 
           .. 반드시, 먼저 스트림을 생성시켜야 함
        . 내부적으로, 운영체제 커널에, 파일에 연결된 스트림을 만들도록, 
           .. 시스템 호출을 통해 의뢰함
        . [참고]  ☞ 파일 포인터, C 파일 처리 함수, Redirection 등 참조
        . 파일 스트림을 다룰 때 사용하는 자료 구조  :  파일 구조체 (FILE)

  ㅇ [C++ 언어]
     - 표준 입력 스트림 객체 : cin
     - 표준 출력 스트림 객체 : cout
        . 사용 例) cout.flush(); cout << "Hello World!";

데이터 단위
   1. 프레임   2. 데이터그램   3. 패킷   4. 세그먼트   5. 메세지   6. 스트림  


"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"