이런저런 의식의 흐름

버퍼(Buffer) 검색 검색

내 머리속 어딘가 2025. 5. 11. 00:02
반응형

버퍼... BufferedReader, BufferedWriter

버퍼링.. 다 연관이 있는 말이였다는 사실.. 두둥....

여러 분야에서 사용되지만 어쨋든 버퍼는 완충의 의미를 가지고 있다.

 

 

컴퓨터 쪽에서 조금 더 날카롭게 그 의미를 찾아보면

나무위키에서는

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


이렇게 설명하고 있다.

 

 

우선 여기까지 보고 대충 생각해보면 입력 혹은 출력이 여러번 반복되어야 할 때,

여러번 반복해서 입출력을 진행하면 리소스를 많이 사용하거나 하면서 충격이 지속적으로 가해지니,

중간에 버퍼역할을 하는 변수? 리스트? 그런곳에 값을 담아서 한번에 옮겨, 충격을 완화해주는 것 같다는 느낌이 온다.

 

 

 

내용을 조금 더 확인해보자

비슷한것 같기는 한데 내 생각이랑 살짝 다른 설명이 있다

입출력장치의 속도차이로 생긴 유휴시간이 없도록 버퍼를 둔다고 되어있다.

 

솔직히 완전히 이해가 되지는 않았다.

 

 

 

 

더 찾아보자

위키백과에 컴퓨터 과학 용어로 "버퍼"를 설명하고 있는 부분이 있다.

 

 


버퍼 (컴퓨터 과학)


컴퓨팅에서 버퍼(buffer, 문화어: 완충기억기)는 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역이다. 버퍼링(buffering)이란 버퍼를 활용하는 방식 또는 버퍼를 채우는 동작을 말한다. 다른 말로 '큐(Queue)'라고도 표현한다.

버퍼는 컴퓨터 안의 프로세스 사이에서 데이터를 이동시킬 때 사용된다. 보통 데이터는 키보드와 같은 입력 장치로부터 받거나 프린터와 같은 출력 장치로 내보낼 때 버퍼 안에 저장된다. 이는 전자 통신의 버퍼와 비유할 수 있다. 버퍼는 하드웨어나 소프트웨어에 추가될 수 있지만 버퍼는 상당수가 소프트웨어에 추가된다. 버퍼는 보통 속도가 계속 바뀔 수 있으므로 데이터 수신과 처리 속도에 차이가 있다. (예: 프린터 스풀러)

버퍼는 네트워크 상에서 자료를 주고 받을 때나 스피커에 소리를 재생할 때, 또는 디스크 드라이브와 같은 하드웨어의 입출력을 결합하는 데에 자주 이용된다. 버퍼는 또한 순서대로 데이터를 출력하는 FIFO 방식에서 보통 사용된다.

[ 역사 ]
인쇄 버퍼의 초기 언급은 1952년 SEAC 컴퓨터의 화상 처리의 선구자 러셀 A. Kirsch가 고안한 Outscriber이다:[1]

자동 디지털 컴퓨터의 설계에서 가장 심각한 문제들 가운데 하나는 연산 진행의 지연을 피하기 위해 충분히 빠른 수준으로 머신 외부로 계산된 결과를 도출해내는 것이다. 범용 컴퓨터가 마주치는 문제들 중 다수가, 출력된 데이터의 양이 상대적으로 너무 커서 컴퓨터가 이러한 데이터가 기존의 인쇄기에 입력되는 시간을 기다려야 할 만큼 심각한 비효율성을 초래한다는 것이다. 이러한 어려움은 SEAC에서 자기 기록 장치를 출력 장치로 제공함으로써 해결되었다. 이 장치들은 전자 타자기가 동작할 수 있는 속도의 최대 100배까지 기계로부터 정보를 받아올 수 있다. 그러므로 출력된 데이터를 기록할 때 더 나은 효율성을 달성할 수 있다. 즉, 메인 컴퓨터에 묶여있지 않고도 자기 기록 장치에서 인쇄 장치로 나중에 표기가 가능하다.


 

 

 

음... 우선 버퍼는 메모리 영역이다. 그리고 버퍼는 "큐(Queue)"를 뜻하는 말이였다.

그리고 버퍼링은 버퍼를 채우는 동작, 버퍼를 활용하는 방식을 말한다고 하는데 우리가 흔히 말하는 "버퍼링 걸렸다" 에서 버퍼링은 버퍼를 채우는 과정을 말하는 것 같다. 버퍼를 채우는 동안 동작이 이루어지지 않아서 멈춰있는 상태를 표현하는 것이라고 보는 것이 가장 자연스러운 해석이니 말이다.

 

 

 

 

 

이제 어느정도 이해 되었는데 마지막으로 이번에는 ChatGPT에게 질문하며 빠르게 궁금증을 해결해보겠다.

 

 

 

 

나의 말:

버퍼 방식이 프로그래밍에서 왜 효율적인지 궁금해

 

ChatGPT의 말:

버퍼(Buffer) 방식이 프로그래밍에서 효율적인 이유는 다음과 같은 입출력 성능 최적화자원 관리 때문입니다:


✅ 1. 입출력(I/O) 성능 향상

  • 디스크나 네트워크 I/O는 느림 → 직접 데이터를 한 글자씩 읽거나 쓰면 병목 발생
  • 버퍼는 일정량의 데이터를 한 번에 읽고 한 번에 출력함으로써 I/O 횟수를 줄임
    → ➤ I/O 호출 수 감소 → 속도 향상

예시:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

위 코드는 사용자 입력을 문자 하나하나 읽는 것이 아니라, 내부 버퍼에 일정량을 먼저 읽어두고 처리함


✅ 2. 자원(CPU, I/O 장치) 효율적 사용

  • 자주 I/O 호출을 하면 CPU가 반복 작업에 시간 낭비
  • 버퍼는 데이터를 모아두었다가 한 번에 처리하므로 CPU 사용률을 낮추고 효율화 가능

✅ 3. 네트워크 지연 최소화

  • 네트워크 프로그램에서는 버퍼링 없이 매번 전송하면 오버헤드 큼
  • 버퍼를 사용하면 데이터 묶음 단위로 전송 가능 → 전송 횟수 감소 + 안정성 증가

✅ 4. 프로그래머의 제어권 향상

  • flush(), close() 등을 통해 버퍼의 시점 제어 가능
  • 필요한 시점에만 실제 출력되므로 성능 튜닝 여지가 커짐

🔁 비유로 이해하면:

우체국에서 편지를 하나씩 바로 보내는 대신, 한 박스에 여러 개를 담아 한꺼번에 택배로 보내는 방식
→ 비용, 시간, 수고 모두 절감

 

 

 

이것저것 말이 많았지만 표시한 부분이 메인인 것 같다.

자주 I/O 호출을 하면 CPU가 반복작업에 시간을 낭비한다는 것이다.

 

그치그치 그래서 모아서 한번에 처리하니까 더 효율적이라는 말이다.

그렇다면 이는 입출력이 많을수록 크게 체감될 것 같다.

 

대량의 데이터를 입출력 하는 경우에는 Buffer를 이용하는 것을 고려해보면 좋겠다.

 

 

 


참고 자료:

https://namu.wiki/w/%EB%B2%84%ED%8D%BC

 

버퍼

충격 흡수 장치 보통 '쇼크 업소버(shock absorber = 쇼바)'나 '댐퍼(damper)'라고 부른다.

namu.wiki

https://blog.naver.com/kongpang2/222406225633

 

[외국계에서 살아남기] Buffer 뜻? (버퍼링, 버프 받다)

업무를 하다보면 버퍼 (buffer) 라는 말을 자주 사용하게 됨 이렇게 Financial 적인 내용으로 buffer가 쓰...

blog.naver.com

https://ko.wikipedia.org/wiki/%EB%B2%84%ED%8D%BC_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)

 

버퍼 (컴퓨터 과학) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 컴퓨팅에서 버퍼(buffer, 문화어: 완충기억기)는 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역이다. 버퍼

ko.wikipedia.org

 

반응형