저고데

[개발 지식] 버퍼와 캐시의 차이 본문

개발 지식

[개발 지식] 버퍼와 캐시의 차이

진철 2024. 12. 16. 23:40
728x90
반응형
들어가며

최근 Redis에 대해서 공부하면서 캐시의 효율성에 대해서 한 번 더 돌아볼 수 있었다. (추후에 Redis에 관해서 업로드 예정)

하지만, 문득 궁금증이 생겼다.

캐시는 속도를 위해서 임의의 공간에 데이터를 저장하는 것인데, 버퍼와 다른 점은 무엇일까?

버퍼도 캐시와 마찬가지로 다른 공간에 저장하여 사용하는 것인데 둘을 구분하는 이유는 무엇일까?

이번 시간에는 버퍼와 캐시의 차이점에 대해서 알아보자

 

목적과 사용 방식

두 개념 모두 데이터를 메모리에 저장하는 역할을 한다.

하지만, 메모리에 저장하는 이유와 처리 방식이 다르다는 차이점이 있다.

 

버퍼(Buffer)

버퍼는 데이터를 임시로 저장하는 공간이다.

주로 I/O 작업에서 발생하는 속도 차이를 완화하기 위해 사용한다.

하드웨어에서 CPU > RAM > DISK 순으로 속도가 빠른데, 이 과정에서 이동하는 속도 차이를 줄이기 위한 것이다.

CPU와 DISK에서 데이터를 전송한다고 하면, 둘의 속도 차이는 매우 심할 것이다.

이 때, 속도 차이를 줄이기 위해서 버퍼를 사용한다.

버퍼는 일반적으로 순차적으로 데이터를 읽고 쓰는 데 사용되며, 자료구조 큐(queue)와 비슷하게 FIFO 원칙을 따른다.

 

캐시(Cache)

캐시는 자주 사용되는 데이터를 빠르게 접근할 수 있는 공간(보편적으로 RAM)에 저장하여 성능을 항샹시키기 위한 목적으로 사용된다.

캐시는 CPU와 RAM 사이의 공간, 웹 브라우저, DB 등에서 활용되며, 저장된 데이터에 따라서 캐치 교체 알고리즘(OS의 context switch와 유사)이 사용된다.

 

버퍼는 속도 차이를 줄이는 목적으로 데이터를 임시 저장하고 순차적으로 처리하고,캐시는 성능 향상을 위해서 자주 사용되는 데이터를 빠르게 접근할 수 있는 공간에 저장하는 것이 목적이다.

 

버퍼의 사용 예제

버퍼링이라고 들어본 적이 있는가?

동영상이나 음악 같이 미디어 컨텐츠를 재생할 때 데이터를 가져오지 못해서 일시적으로 멈추는 현상이다.

일반적으로 미디어 컨텐츠가 사용자에게 보여지는 과정은 다음과 같다. (동영상의 경우)

사용자가 영상을 서버에 요청하면, 서버가 사용자에게로 동영상 파일을 전송한다.

이 때, 전체 데이터가 전송이 되는게 아니라, 성능을 위해서 일부분의 데이터만 전송된다.

전송받은 일부분의 데이터를 버퍼를 통해서 읽고, 버퍼에 저장한다.

그리고 프로그램이 요청하는 속도에 따라서 버퍼에서 데이터를 제공하여, 사용자는 비로소 영상을 시청할 수가 있다.

다음 영상 재생을 위해서 서버에서 조금조금씩 데이터를 전송하는데, 네트워크 지연이나 서버의 문제로 인해서 다음 장면에 대한 데이터가 전송되지 않으면 버퍼에 데이터가 존재하지 않기 때문에 동영상이 일시적으로 멈추게 된다.

이 때, 실제 재생을 재개하기 위해서 버퍼에 데이터를 다운받고 있기 때문에 이를 '버퍼링'이라고 한다.

 

마치며

오늘은 이렇게 캐시와 버퍼의 차이점에 대해서 알아보았다.

두 기술 모두, 성능과 효율을 위해서 탄생한 것은 다름이 없다.

간단하게 정리하자면, 아래와 같이 말할 수 있겠다.

버퍼: 데이터의 입출력 처리를 위한 임시 저장소. 연속적인 데이터를 다룸. Kafka(토픽의 정보를 짧은 기간 동안 유지하고 안정적으로 소비하는 방식)

캐시: 데이터의 접근 속도를 높이기 위한 임시 저장소. 데이터의 빈도를 다룸. Redis(사용 빈도를 다루며, 해쉬 기반의 빠른 접근을 허용하고 접근성이 낮은 데이터를 만료 처리)

728x90
반응형