Infra 전반/실전압축지식

[실.압.지]Cache란 무엇인가?(Cache서버란)

faru 2024. 9. 25. 14:07

[1.짧게 말해서]

학창시절 컴퓨터구조론이나 시스템 프로그래밍 등을 배웠으면 많이 들어봤을 용어이다. 아래와 같은 사진도 자주 보았을 것이다. 흔히 메모리 계층구조라고 불린다. 캐시는 이 중 메모리 최상단 티어에 위치한 메모리다.

우리가 보통 DRAM이라고 부르는 메인메모리 보다 훨씬 작고, 가격이 비싸며, 장비가 동작할때만 메모리가 존재하는 휘발성 메모리이다. 당연히, 그만큼 빠르다. CPU에서 접근하는데 10 Clock Cycle 미만의 시간이 걸리고, 또 뭐 물리적으로 가깝고, 데이터 지역성이 존재하고 뭐 여튼 그러하다.

 

하지만 보통 우리가 업무에서 사용하는 Cache 또는 Cache서버라고 부르는 것은 개념은 비슷하나 성격이 다르다. 중요한 건 데이터 지역성, 즉 Caching이라고 불리우는 행위에 있다. 

Caching은 자주 쓰는 데이터를 더 빠른 속도로 사용가능하도록 연산자와 최대한 가까운 임시 저장소에 저장하고 사용하는 것을 의미한다. 자주 사용되는 데이터를 저렴하고 저장용량이 크지만 느린 메인 저장장치에서 비싸고 빠르지만 저장용량이 작은 저장장치에 옮겨놓는 행위 등이 바로 그 예시이다.

우리가 실제 업무에서 주로 사용하는 Caching은 보통 SSD, HDD(Disk)를 사용하는 전통적인 DB에서 훨씬 속도가 빠르고 비싼 메모리(Memory)위에 존재하는 Cache 서버로 자주 쓰는 데이터를 옮겨놓고 사용하는 것이다. 보통 웹 애플리케이션에서 세션유지를 위해 사용되며 이때 사용하는 개념이 Cache 서버이다. Cache server로써 많이 사용되는 것들이 바로 Redis나 Couchbase등의 DBMS이다. 

 

[2. 조금 더 자세하게]

물론, 캐시라는 것이 위에서 언급한 Redis만 있는 것은 아니다. 캐시라는 개념은 정말 IT 분야 여기저기서 광범위하게 사용된다. 간단한 예시만 들어봐도 다음과 같이 많다.

 

1. 웹브라우저 캐시

웹 브라우저는 자주 방문하는 웹 페이지의 이미지, CSS 파일, JavaScript 파일 등을 로컬 디스크에 저장하여, 다음에 동일한 페이지를 방문할 때 빠르게 로드할 수 있도록 한다.

 

2. 데이터베이스 캐시

데이터베이스 시스템은 자주 조회되는 데이터를 메모리에 저장하여, 디스크 I/O를 최소화하고 쿼리 성능을 향상시킨다. Redis와 같은 인메모리 데이터베이스를 많이 사용한다. 이 예시가 위에서 언급한 사례이다.

 

3. CPU 캐시

CPU는 연산 속도를 높이기 위해 L1, L2, L3 캐시를 사용한다. 이 캐시는 주 메모리보다 훨씬 빠른 속도로 데이터를 읽고 쓸 수 있어, CPU의 성능을 극대화한다. 물론, 본인이 하드웨어나 임베디드 쪽이 아니라면 자주 사용하는 개념은 아닐 것이다.

 

4. CDN(Content Delivery Network) 캐시

CDN은 전 세계에 분산된 서버 네트워크를 통해 웹 콘텐츠를 캐싱하고, 사용자에게 가장 가까운 서버에서 콘텐츠를 제공하여 로딩 시간을 단축시킨다. 대표적인 서비스로 AWS의 Cloudfront가 있다.

 

5. DNS 캐시

DNS 서버와 클라이언트는 도메인 이름과 IP 주소의 매핑 정보를 캐싱하여, 도메인 이름 해석 시간을 단축시킨다. DNS는 애초에 원리 자체가 캐싱을 사용하지 않으면 이루어지지 않는다. 질의 자체가 계층적으로 이루어지기 때문이다. 참고로 Tomcat에서는 자체적인 DNS Cache 시스템을 가지고 있다. 특정 URL에 API 요청 시 별도 DNS를 거치지 않고 내부 Cache서버를 이용하여 IP를 특정한다.
(참고: 

2024.08.22 - [Infra 전반/실전압축지식] - [실.압.지]도메인(domain)이란 무엇인가?

https://itformeeting.tistory.com/5)

 

6. 브라우저 쿠키와 세션 캐시: 웹 애플리케이션은 사용자 인증 정보나 세션 데이터를 캐싱하여, 매번 서버와 통신하지 않고도 빠르게 사용자 상태를 확인할 수 있게 한다.

 

이와 같이 캐시는 다양한 시스템과 애플리케이션에서 성능을 최적화하고 사용자 경험을 향상시키기 위해 널리 사용된다.

 

보통 업무 미팅에서 Cache서버 관련 이야기가 나오면 거의 80-90퍼센트 확률로 DB Cache를 말하는 경우가 많다. 그리고 이 때 가장 많이, 압도적으로 사용되는 것이 Redis이고 AWS 환경에서는 Redis를 AWS환경에서 Managed로 제공하는 Elastic Cache이다.

 

Redis는 In-memory DB이며 key-value 기반으로 데이터가 저장된다. 위에서 언급했듯이, 전통적인 DB와 같이 Disk에 데이터를 쓰는것이 아닌 Memory(Ram)에 데이터를 쓰고 읽어오므로 속도가 훨씬 빠르다. 

메모리는 휘발성인데도 불구하고 영속적인 특성을 가졌으며(RDB, AOF 이용) 이를 이용하여 캐시서버지만 전통적인 DB처럼 사용가능하기도 하다.

 

그래서 뭐 어떻게 사용하는건데? 하는 질문은 다음 포스트에 작성하겠다.