버퍼

Buffer

1 철도

충격 흡수 장치. 보통 '쇼크 업저버(Shock Absorber = 쇼바)'나 '댐퍼(Damper)'라고 부른다.

2 화학

pH를 일정하게 유지해주는 특수한 시약. 보통 '완충용액'이라고 부른다.
예를 들어 아세트산과 아세트산나트륨을 1몰:1몰의 비율로 혼합하면 소량의 산(H+)이나 알칼리(OH-)를 첨가해도 용액의 pH는 거의 변하지 않는다.

3 컴퓨터

3.1 정의

한 곳에서 다른 곳으로 데이터를 이동할 때 임시적으로 그 데이터를 저장하기 위해 사용되는 물리적인 메모리 저장소의 영역.

3.2 설명

두 개 이상의 소프트웨어 또는 하드웨어의 입출력을 결합하는데 이용된다. 예를 들어서 A, B라는 별개의 소프트웨어 또는 하드웨어가 있고, 이 때 A에서는 작업의 결과물로서 어떤 데이터를 내놓으며 B에서는 어떤 데이터를 입력받아서 작업을 한다고 가정해보자. 여기서 데이터를 내놓는다는 것은 특정 메모리 영역에 데이터를 기록한다는 것을 의미하며, 데이터를 입력 받는다는 것은 특정 메모리 영역의 데이터를 읽는다는 것을 의미한다. 이러한 상황에서 A의 결과물로 나온 데이터를 B에 입력하고자 하는 것이 목적일 경우, A의 출력 데이터를 특정 메모리 영역 'α'에 저장하고 B에서 특정 메모리 영역 'α'의 데이터를 읽게 하는 일련의 과정을 거쳐서 목적을 달성 하게 된다. 이 때 여기서 특정 메모리 영역 'α'가 버퍼에 해당하게 된다.

캐시 메모리, 스풀 또는 스트리밍 등과 그 의미를 혼동하는 경우가 종종 있다.
버퍼와 캐시는 동작과 사용에서 차이가 존재한다. 버퍼는 궁극적으로 이동하고자 하는 데이터를 모두 담게 되지만, 캐시는 설계에 따라서 데이터를 전부 담을 수도 있고 일부를 담을 수도 있으며 아예 담지 않을 수도 있다. 버퍼를 이용하는 경우에는, 원래 데이터가 들어있는 장소의 데이터를 버퍼로 이동한 후 버퍼를 이용하므로 명시적으로 버퍼를 이용하는 구조이다. 하지만 캐시를 사용하는 경우에는, 원래 데이터가 들어있는 장소를 이용할 때 실제로는 캐시가 그 장소 대신 이용되는 구조이다. 그리고 그 캐시가 원래 데이터가 있던 장소를 이용하게 할 것인지 캐시에 있는 공간을 이용하게 할 것인지를 결정하게 된다. 버퍼를 이용하는 경우에는 버퍼에 들어오지 않은 데이터는 즉시 이용할 수 없는 반면에, 캐시를 이용하는 경우에는 원래 데이터의 모든 부분을 캐시를 통해서 즉시 이용할 수 있다.
스풀 또는 온라인 비디오 스트리밍은 버퍼를 이용해서 구현된다. 즉, 버퍼를 이용하는 방식 중에 하나이다. 따라서 비동기적 작업을 하거나 받은 데이터만을 이용해서 작업할 수 있다는 특성 등은 버퍼를 특정 방식으로 응용함으로서 발생한 특성인 것일 뿐, 버퍼 자체의 특성은 아니다.

3.3 예시

버퍼가 쓰이는 대표적인 예는 스풀링, 하드 디스크 버퍼, I/O 버퍼등이 있다. 이 중 대표적인 I/O 버퍼인 키보드/모니터 버퍼를 예로 들어보자. 운영체제는 키보드에서 데이터가 들어올 때마다 그 데이터를 버퍼에 저장해놓는다. 키보드로 들어온 데이터를 어떤 프로세스가 사용하기를 기다리지 않고, 버퍼에 넣어둔 후 다른 일을 한다는 것이다. 그리고 프로세스는 운영체제가 마련한 버퍼의 데이터를 읽고 처리함으로써 키보드로 입력된 데이터를 이용 할 수 있다. 여기서 운영체제가 프로세스를 기다리지 않는다는 효과는 스풀링과 유사한 방식으로 버퍼를 이용했기 때문에 발생한 것이다.
아마 이 글을 보는 사람도, 키보드를 입력해도 화면에 반응이 없다가 갑자기 순식간에 반응하는 현상을 한 번 쯤을 보았을 것이다. 프로세스가 버퍼를 읽고 처리하는 일을 어떤 이유로 잠시 수행하지 못하다가 나중에 한꺼번에 처리해서 그런 것이다.

요즘 사용하는 모니터에는 버퍼가 있다. 모니터의 버퍼는 그래픽 카드가 처리한 프레임 데이터를 저장 한 후, 순차적으로 프레임 단위의 데이터를 화면에 출력한다. 버퍼를 사용하지 않고 데이터가 들어오는 즉시 화면에 출력하려면, CRT모니터처럼 주사방식과 비슷하게 출력을 해야 할 것이다.

쉽게 예를 들면, 버퍼는 우체통이라고 볼 수도 있다. 버퍼가 데이터를 한곳에서 다른 곳으로 이동하는 과정에서 임시로 저장하는 장소이듯, 우체통은 편지가 우체국으로 이동하는 과정에서 임시로 보관하는 곳이다. 어떤 우체부가 어떤 방식으로 우체통에서 편지를 꺼내갈지 우리는 신경 쓸 필요가 없으며 우체부도 마찬가지로 누가 어떤 방식으로 우체통에 편지를 넣었는지 신경 쓸 필요가 없다. 우리는 편지를 보내기 위해서 우체통에 넣기만 하면 된다. 그리고 우체부는 우체통에서 편지를 수거해서 우체국으로 가져가기만 하면 된다. 우체통은 보낼 편지가 들어가 있을 곳이라는 약속이 정해져 있기 때문이다.
마찬가지로 버퍼도 그 버퍼가 어떤 데이터를 담고 있을지 정해져 있다면, 한쪽에서는 버퍼에 데이터를 넣고 다른 한쪽에서는 버퍼의 데이터를 이용하기만 하면 된다. 그 버퍼에 데이터를 누가 어떻게 넣는지 누가 어떻게 사용하는지는 신경 쓰지 않아도 된다.
우체통이 꽉 차면 답이 없다. (버퍼 오버플로우/언더플로우 문제)

4 기타

손톱을 가는 고운 을 버퍼라 하기도 한다. 손톱을 다듬는 도구에는 손톱을 갈아내는 거칠거칠한 줄과 손톱을 매끄럽게 하고 광을 내는 도구가 있는데, 전자를 파일이라 하고 후자를 버퍼라 한다. 주로 버퍼는 1단계부터 4~5단계까지 네 가지 단계가 한 세트로 되어 있어 숫자가 올라갈수록 고와진다. 1단계는 거의 파일과 비슷하게 손톱을 갈아내는 용도로 매우 거칠거칠하며, 4단계나 5단계로 가면 가죽이나 종이와 같은 재질로 되어 있어 문질러 광을 내는 데 사용한다. 특히 클래식 기타 주자들이 손톱을 다듬을 때 애용한다. 간혹 프라모델 유저들이 게이트 자국을 다듬거나 표면을 정형할 때 사용하기도 한다.