CS

[CS] 버퍼(Buffer) 란?

펭귄코기 2023. 11. 21. 11:04

1. 버퍼(Buffer) 란?

먼저 버퍼의 영어 뜻을 알아보자면

Buffer
명사 1. 완충제 2. 완충 장치
동사 1. 완화하다 2. ~를 보호하다

 

버퍼는 무엇인가를 완화하는 것이겠다 라고 예상이 간다

 

정보통신용어사전에서는 Buffer 어떻게 정의할지 보자면 아래와 같다

 

하나의 장치에서 다른 장치로 데이터를 전송할 경우에 양자간의 데이터의 전송 속도나 처리 속도의 차를
보상하여 양호하게 결합할 목적으로 사용하는 기억영역

 

즉 두 개의 장치 사이에서 데이터가 이동할 때 전송 속도와 처리 속도의 차이를

완화하는 목적으로 사용하는 기억장치 라고 볼 수 있다

 

2. 버퍼(Buffer) 동작

위에서 말했지만 버퍼는 한마디로 임시 저장 공간 이다

 

예시를 통해 더 자세히 알아보도록 하자

 

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

 

유튜브같은 동영상 스트리밍 사이트에서 동영상을 재생시켜보면

위와 같은 모습을 많이 봤을 것이다

 

스트리밍 사이트에서 실시간으로 동영상을 보다 보면

동영상이 진행되는 부분 (빨간색)

서버로 부터 동영상을 내려받은 부분 (밝은 회색)

그리고 앞으로 다운로드가 남은 부분 (연한 회색) 을 볼 수 있다

 

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

 

만약 우리가 동영상을 재생시켰을때 보는 속도와

데이터가 내려받아지는 속도가 같다면 영상이 계속 멈추게 될것이다

 

쉽게말해 3분 23초 짜리 영상을 보기 위해서는

3분 23초동안 데이터를 내려받아야한다

그러나 이는 비효율 적이기 때문에 버퍼라는 임시 저장 공간을 두고

데이터를 빠른 시간 안에 내려받아 저장을 한다

 

그러면 사용자는 버퍼에 미리 받아져있는 데이터를

받아서 보면 되는것이다

 

이를 조금 더 자세히 살펴 보기 위해

동영상 스트리밍 이 정확히 무엇인지를 알면 좋은데

 

츌처 : https://ontheway.tistory.com/52

 

동영상 스트리밍이란 서버에서 영상 파일을 여러 조각으로 쪼개 연속적으로 데이터를 보내는 것을 말한다

여기서 버퍼는 서버로부터 보내지는 영상 파일 데이터들을 순서대로 차곡차곡 쌓는 임시 저장 공간이다

즉 사용자가 영상을 클릭한 순간 서버로 부터 여러 조각으로 나뉘어진 영상 파일들이

순서대로 버퍼에 쌓이기 시작하며 쌓인 데이터 만큼 사용자는 시청을 할 수 있는것이다

그래서 사용자는 영상을 클릭함과 동시에 시청을 하고 남은 영상 파일 데이터들은 버퍼에 쌓이게 되어

끊김없이 영상을 시청할 수 있는 것이다

 

옛날에 인터넷 속도가 느리던 시절에는 동영상을 버퍼에 다운받는 속도가

동영상을 시청하는 속도를 따라가지 못해서 빨간 부분이 회색 부분을 따라잡았고

이때 동영상이 멈추는 일이 발생을 했다

이를 '버퍼링 걸린다' 라고 이야기 해 왔다

 

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

다음으로 프로그래밍에서의 버퍼는 무엇인지

입출력 할 때 어떻게 동작하는지 살펴보자

 

츌처 : https://ontheway.tistory.com/52

 

위 그림을 보며 예를 들어 보자면

사용자가 프로그램을 사용할 때 키보드로 MOVE 라는 단어를 쳤다고 생각하자

이때 버퍼가 없다면 M, O, V, E 한개씩 따로 따로 프로그램에 입력이 된다

그러면 프로그램에서 이를 처리하기 위해 4개의 작업 환경을 구축해서 처리를 해줘야한다

지금은 4개지만 만약 1만개, 10만개의 데이터가 들어온다고 가정을 한다면

속도면에서나 효율면서에 굉장히 떨어지는 결과를 보여줄 것이다

 

출처 : https://ontheway.tistory.com/52

 

하지만 다시 위의 그림처럼 버퍼를 사용하면 어떻게될까

똑같이 키보드로 MOVE 라고 쳤다고 생각 해보자

버퍼가 있는 경우에 특정 문자나 행동이 들어올때 까지

(예를들어 엔터, 스페이스, 버튼클릭 등의 이벤트)

버퍼에 사용자가 입력한 문자 M,O,V,E 가 차례대로 저장이 된다

그러다 엔터나 스페이스와 같은 버퍼의 끝을 알리는 동작이 일어나면

지금까지 버퍼에 저장해 두었던 문자를 프로그램으로 보낸다

이때 앞서 버퍼가 없을때는 4개의 작업 환경을 구축해야 했지만

지금은 1개의 작업 환경을 구축해서 한번에 처리 하기 때문에

속도면에서나 효율적인 측면에서 긍정적인 결과를 도출할 수 있다

 

3. 최종 정리

앞서 두개의 예시를 통해서 알 수 있는 버퍼의 목적은

두 장치간에 전송 속도나 처리 속도의 차이를 완화하는 것이다

첫번째 예시에서는 서버와 내 컴퓨터 사이에서 영상이 출력될 때까지의 시간을 완화 하는 것이고

두번째 예시에서는 키보드와 프로그램 사이에서 처리 속도의 차이를 완화 하는 것이다

만약 버퍼가 없다면 영상이 모두 다운받아져야만 영상을 볼 수 있고

프로그램에서는 입력이 길어질 수 록 프로그램 속도는 저하될 것 이다

 

버퍼는 임시 저장 공간이라고 했는데 이는 데이터를 저장하지 않고 휘발시킨다 를 뜻한다

즉 버퍼는 데이터들을 전달하는 바구니 같은 것이라고 생각하면 좋을것 같다