TIL
TIL#47(버퍼와 스트림)
HeY_tistory
2024. 6. 25. 20:58
오늘 한일
- 버퍼(Buffer)
버퍼는 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역이다. 버퍼링(buffering)이란 버퍼를 활용하는 방식 또는 버퍼를 채우는 동작을 말한다.
특징
- 임시 저장 : 버퍼는 데이터를 일시적으로 저장하여 데이터의 흐름을 조절한다.
- 크기 고정 : 버퍼는 일반적으로 고정된 크기를 가지며, 데이터가 버퍼에 쌓이면 일괄 처리된다.
- 속도 차이 완화 : 버퍼는 생산자와 소비자 간의 속도 차이를 완화한다. 예를 들어, 데이터 생성 속도와 처리 속도가 다를 때, 버퍼는 데이터를 임시로 저장하여 처리 속도를 맞춘다.
예시
- 파일 읽기/쓰기 : 파일 입출력 시, 버퍼를 사용하여 데이터를 일괄적으로 읽거나 쓴다. 이는 디스크 I/O 성능을 향상시킨다.
- 네트워크 통신 : 네트워크 데이터 전송 시, 버퍼를 사용하여 패킷을 일시적으로 저장하고 전송 효율을 높인다.
- 스트림(Stream)
스트림이란 실제의 입력이나 출력이 표현된 데이터의 이상화된 흐름을 의미한다. 즉, 스트림은 운영체제에 의해 생성되는 가상의 연결 고리를 의미하며, 중간 매개자 역할을 한다.
특징
- 연속성 : 스트림은 데이터를 연속적으로 처리한다. 데이터는 한 번에 하나씩 순차적으로 읽거나 쓰인다.
- 방향성 : 스트림은 일반적으로 한 방향으로 데이터가 흐른다. 입력 스트림(Input Stream)은 데이터를 읽고, 출력 스트림(Output Stream)은 데이터를 쓴다.
- 실시간 처리 : 스트림은 데이터를 실시간으로 처리할 수 있어, 즉시 데이터 처리가 필요한 경우에 유용하다.
예시
- 파일 스트림 : 파일에서 데이터를 읽거나 파일에 데이터를 쓰기 위해 파일 스트림을 사용한다.
- 네트워크 스트림 : 네트워크 소켓을 통해 데이터를 주고받기 위해 네트워크 스트림을 사용한다.
- 입출력 스트림 : 표준 입력(stdin), 표준 출력(stdout)을 통해 데이터를 처리하기 위해 입출력 스트림을 사용한다.
- 버퍼와 스트림의 차이점
- 데이터 처리 방식 : 버퍼는 데이터를 일시적으로 저장하여 일괄 처리하는 반면, 스트림은 데이터를 순차적으로 처리한다.
- 사용 시점 : 버퍼는 주로 속도 차이를 완화하거나 대량의 데이터를 일괄 처리할 때 사용되고 스트림은 데이터를 실시간으로 순차적으로 처리할 때 사용된다.
- 메모리 사용 : 버퍼는 고정된 크기의 메모리를 사용하여 데이터를 저장하고 처리하고 스트림은 데이터가 발생하는 대로 즉시 처리하므로 메모리 사용이 더 적을 수 있다.
어려웠던 점
- 버퍼와 스트림의 개념에 대해 배웠지만 실전에서 어떻게 활용해야 하는지 감이 잡히지 않는다. (실제로 버퍼와 스트림을 사용해 서버를 구현해보면 좋을 것 같다.)
오늘의 TIP
- Node.js에서 Buffer클래스는 TCP 스트림, 파일 시스템 작업 및 기타 컨텍스트에서 옥텟 스트림과 상호 작용할 수 있도록 Node.js API의 일부로 도입되었다.