2024-03-26,   조평연

본 포스팅은 Buffer를 알아보는 내용입니다.

1. 버퍼 (Buffer) 란?

  • 먼저 버퍼의 영어 뜻을 알아보자면 아래와 같습니다.
    • 명사 1.완충제 2.완충 장치
    • 동사 1.완화하다 2.~를 보호하다
  • 버퍼는 무엇인가를 완화하는 것이구나를 알 수 있습니다.
  • 정보통신용어사전에는 아래와 같이 정의합니다.
    • 하나의 장치에서 다른 장치로 데이터를 전송할 경우에 양자간의 데이터의 전송 속도나 처리 속도의 차를 보상하여 양호하게 결합할 목적으로 사용하는 기억영역
  • 즉 두 개의 장치 사이에서 데이터가 이동할 때 전송 속도와 처리 속도의 차이를 완화하는 목적으로 사용하는 기억장치 라고 볼 수 있습니다.

2. 버퍼 동작

  • 위에서 말했듯이 버퍼는 한마디로 임시 저장 공간입니다.

2-1) 동영상 스트리밍 서비스에서의 버퍼


  • 유튜브 같은 동영상 스트리밍 사이트에서 동영상을 재생시켜보면 위와 같은 모습을 많이 봤을 겁니다.

  • 스트리밍 사이트에서 실시간으로 동영상을 보다 보면 동영상이 진행되는 부분 (빨간색)과 서버로 부터 동영상을 내려받은 부분 (밝은 회색) 그리고 앞으로 다운로드가 남은 부분 (연한 회색) 을 볼 수 있습니다.

  • 여기서 밝은 회색 부분을 버퍼라고 볼 수 있습니다.

  • 만약 우리가 동영상을 재생시켰을때 보는 속도와 데이터가 내려받아지는 속도가 같다면 영상이 계속 멈추게 될 것 입니다.

  • 쉽게 말해 3분 23초 짜리 영상을 보기 위해서는 3분 23초 동안 데이터를 내려받아야 하는데 이는 비효율적이라 버퍼라는 임시 저장 공간을 두고 데이터를 빠른 시간 안에 내려 받아 저장을 하는것 입니다.

  • 그러면 사용자는 버퍼에 미리 받아져있는 데이터를 받아서 보게 되는겁니다.

2-2) 동영상 스트리밍 이란?

  • 이를 조금 더 자세히 보기위해 동영상 스트리밍이 무엇인지 알아보겠습니다.


  • 동영상 스트리밍이란 서버에서 영상 파일을 여러 조각으로 쪼개 연속적으로 데이터를 보내느것을 말합니다.
  • 여기서 버퍼는 서버로 부터 보내지는 영상 파일 데이터들을 순서대로 차곡차곡 쌓는 임시 저장 공간입니다.
  • 사용자가 영상을 클릭하는 순간 서버로 부터 여러 조각으로 나뉘어진 영상 파일들이 순서대로 버퍼에 쌓이기 시작하며 쌓인 데이터 만큼 사용자는 시청할 수 있는것 입니다.
  • 그래서 사용자는 영상을 클릭함과 동시에 시청을 하고 남은 영상 파일 데이터들은 버퍼에 쌓이게 되어 끊김없이 영상을 시청할 수 있는것 입니다.
  • 옛날에 인터넷 속도가 느리던 시절에는 동영상을 버퍼에 다운받는 속도가 동영상을 시청하는 속도를 따라가지 못해서 빨간 부분이 회색 부분을 따라 잡았고 이때 동영상이 멈추는 일이 발생 했습니다.
  • 이를 ‘버퍼링 걸린다’ 라고 이야기해 왔습니다.

2-3) 입출력에서 사용되는 버퍼

  • 프로그램에서 버퍼는 무엇인지 입출력 할 때 어떻게 동작하는지 살펴보겠습니다.


  • 위 그림을 보며 예를 들어보자면 사용자가 프로그램을 사용할 때 키보드로 MOVE 라는 단어를 쳤다고 가정하겠습니다.
  • 이때 버퍼가 없다면 M, O, V, E 한개씩 따로 따로 프로그램에 입력이 됩니다.
  • 그러면 프로그램에서 이를 처리하기 위해 4개의 작업 환경을 구축해서 처리를 해줘야하는데 지금은 4개지만 만약 1만개, 10만개의 데이터가 들어온다고 가정을 한다면 속도면에서나 효율면에서 굉장히 떨어지는 결과를 보여줍니다.


  • 하지만 다시 위의 그림처럼 버퍼를 사용하면 똑같이 MOVE라고 쳤지만 버퍼가 있어 특정 문자나 행동이 들어올때 까지 (예를들어 엔터, 스페이스, 버튼클릭 등의 이벤트) 버퍼에 사용자가 입력한 문자 M, O, V, E 가 차례대로 저장이 됩니다.
  • 버퍼의 끝을 알리는 이벤트가 발생하면 지금까지 버퍼에 저장해 두었던 문자를 프로그램으로 보내는데 이때 기존에 4개의 작업 환경을 구축한것과 다르게 1개의 작업 환경을 구축해서 한번에 처리할 수 있기 때문에 속도면에서나 효율적인 측면에서 긍정적인 결과를 도출할 수 있습니다.

3. 최종 정리

  • 앞서 두개의 예시를 통해서 알 수 있는 버퍼의 목적은 두 장치간에 전송 속도나 처리 속도의 차이를 완화하는것 입니다.
  • 첫번째 예시에서는 서버와 내 컴퓨터 사이에서 영상이 출력될때 까지의 시간을 완화하는 것이고
  • 두번째 예시에서는 키보드와 프로그램 사이에서 처리 속도의 차이를 완화하는 것입니다.
  • 만약 버퍼가 없다면 영상이 모두 다운받아져야만 영상을 볼 수 있고 프로그램에서는 입력이 길어질 수 록 프로그램 속도는 저하될 것 입니다.
  • 버퍼는 임시 저장 공간이라고 했는데 이는 데이터를 영구 저장하지 않고 휘발시킨다를 뜻합니다.
  • 버퍼는 데이터들을 전달하는 바구니 같은 것이라고 생각하면 좋을것 같습니다.

4. 참고문헌

  • https://dololak.tistory.com/84 (버퍼 개념정리)

업데이트: