버퍼(Buffer)란
버퍼란 임시 저장 공간을 의미 합니다. 임시 저장 공간이라고 해서 쌩뚱맞게 보일 수 있지만 정확히 말하면 A와 B가 서로 입출력을 수행하는데에 있어서 속도차이를 극복하기 위해 사용하는 임시 저장 공간을 의미 합니다.
동영상 스트리밍 서비스에서의 버퍼
이 버퍼라는 개념은 굉장히 다양하게 사용되는데 가장 쉽게 접할 수 있는 곳은 유튜브같은 동영상 스트리밍 사이트입니다.
스트리밍 사이트에서 실시간으로 동영상을 보게 되면 보통 동영상이 진행되는 부분(빨간색)과 서버로부터 동영상을 내려받은 부분(밝은 회색) 그리고 앞으로 다운로드가 남은 부분을 본 적이 있을 것 입니다.
여기서 저 밝은 회색부분이 버퍼라고 볼 수 있습니다.
동영상 데이터가 내려 받아지는 속도에 비해 우리가 동영상을 1초씩 진행되며 보는 속도에는 차이가 있습니다.
만약 우리가 동영상을 보는 속도와 데이터를 내려받는 속도가 같다면 동영상 재생시간이 50분짜리 동영상이라면 50분동안 데이터를 내려받아야 합니다.
그러나 이는 비효율적이므로 버퍼라는 임시 저장공간을 두고 동영상 데이터를 버퍼에 최대한 빠른 시간 안에 내려받아 저장해 둡니다.
동영상 시청자는 동영상을 느긋하게 즐기면 어느덧 동영상이 버퍼에 모두 다운로드 되어 있을 것입니다.
인터넷이 많이 느리던 시절에는 동영상을 버퍼에 다운로드 하는 속도가 동영상을 시청하는 속도를 따라가지 못해 빨간 부분이 회색 부분을 따라잡게 됐고 동영상이 멈추는 일이 빈번했습니다. "그리고 이를 버퍼링 걸린다" 라고들 이야기 했습니다.
입출력에서 사용되는 버퍼
프로그래밍에서의 버퍼란 어떤것일까요?
프로그래밍이나 운영체제에서 사용하는 버퍼는 거의 대부분 CPU와 보조기억장치 사이에서 사용되는 임시 저장 공간을 의미합니다.
CPU는 기술이 발전함에 따라 1초에 수십억 bit 그 이상의 데이터를 처리할 수 있습니다.
(수학에 약해 정확한 계산은 하지 않지만 CPU가 크게 나누었을 때 컴퓨터에서 속도가 가장 빠른 장치입니다.)
그러나 보조기억 장치의 경우 데이터를 주고 받는데에 많은 시간이 필요합니다.
물리적인 HDD(하드디스크)의 경우 데이터를 전송할 수 있는 속도는 빨라도 초당 100mb ~ 300mb 입니다.
간단하게 얘기 하자면 CPU는 1초에 100개의 데이터를 처리할 수 있지만 정작 처리할 데이터를 가지고 있는 보조 기억 장치는 데이터를 1초에 세 개밖에 보내주지 않는 것입니다. CPU입장에서는 아무리 일을 열심히 하고 싶어도 데이터를 보내주지 않기 때문에 능력에 비해 97 개 만큼 효율성을 잃게 됩니다.
이 때 버퍼를 사용하게 됩니다. 버퍼는 CPU 내부에 있는 캐시메모리 보다는 느리지만 보조 기억 장치보다 훨씬 빠른 주기억 장치(RAM)를 이용합니다. 보조기억장치는 주기억장치의 버퍼로 마련해둔 공간에 데이터를 열심히 보내 쌓아 둡니다. CPU는 처리가 빠르므로 밀려있는 다른일을 처리한 후 시간이 남을때 가끔 버퍼를 확인하여 데이터가 모두 쌓였는지 확인하고 모두 쌓였다면 가져다 한꺼번에 처리합니다.
그 덕분에 CPU는 100퍼센트의 효율로 연산을 할 수 있습니다.
이렇게 버퍼라는 것은 속도차가 큰 두 대상이 입출력을 수행할 때 효율성을 위해 사용하는 임시 저장공간이라고 할 수 있겠습니다.
출처: https://dololak.tistory.com/84 [코끼리를 냉장고에 넣는 방법]
'Back-end > JAVA & Spring' 카테고리의 다른 글
암호화(AES, RSA, SHA) 관련 이야기 (0) | 2021.05.20 |
---|---|
AES와 SHA 차이 (0) | 2021.05.20 |
[Java] BufferedReader의 EOF 처리 & 여러 줄 입력 처리 - .readLine() (0) | 2021.05.17 |
[Java] 클래스 ProcessBuilder (0) | 2021.05.17 |
[Java] 메소드의 개념 (0) | 2021.05.17 |
댓글