Momory DB와 Storage DB란?

Memory DB는 데이터를 디스크가 아닌 메모리(RAM)에 저장하여 빠른 데이터 접근과 처리 속도를 제공하는 데이터베이스 시스템입니다. 디스크 기반의 데이터베이스와 비교하여 훨씬 빠른 성능을 제공할 수 있으며, 주로 고성능이 요구되는 애플리케이션에서 사용됩니다.

  • ex) Redis, Memcached, Apache Ignite…

디스크 기반의 DB는 데이터를 주로 HDD(하드 디스크 드라이브), SSD(솔리드 스테이트 드라이브)와 같은 비휘발성 저장 장치에 저장하고 관리하는 데이터베이스 시스템입니다. 이런한 데이터 베이스는 데이터를 영구적으로 보존할 수 있습니다.

  • ex) RDBMS(MySQL, PostgreSQL, Oracle DB…), NoSQL DB(MongoDB, Cassandra…)

CPU와 Memory, Storage의 관계

CPU는 RAM에 있는 데이터를 처리하며, 필요 시 Storage에서 데이터를 RAM으로 불러와 사용합니다. 데이터가 처리된 후 결과를 다시 Storage에 저장할 수도 있습니다.
이 과정에서 CPU ↔ RAM과 CPU ↔ Storage 사이에서 데이터 이동이 발생합니다.


const memoryValue = 'Don'; // 일시적인 값을 RAM에 저장합니다.

const userInput = 'User data';
// 예를 들어, 이 데이터를 DB에 저장합니다.
saveToDatabase(userInput);

위 선언된 memoryValue는 Momory에 저장되지만, saveToDatabase(userInput) 메서드를 통해 userInput은 Storage DB에 저장됩니다.

  1. CPU와 메모리 간의 데이터 흐름: CPU는 RAM에 있는 데이터를 처리하며, 필요 시 Storage에서 데이터를 RAM으로 불러와 사용합니다. 데이터가 처리된 후 결과를 다시 Storage에 저장할 수도 있습니다.
  2. Memory (RAM) 역할: RAM은 프로그램이 실행되는 동안 필요한 데이터와 명령어를 일시적으로 저장합니다. RAM에 저장된 데이터는 프로그램이 종료되거나 전원이 꺼지면 사라집니다.
  3. Storage (DB)의 역할: Storage는 영구적인 데이터 저장을 위해 사용됩니다. 예를 들어, 데이터베이스(DB)는 사용자 정보, 로그, 설정 파일 등을 보관합니다. 저장된 데이터는 전원이 꺼져도 사라지지 않으며, 필요 시 프로그램에서 이를 읽어와 사용할 수 있습니다.

Momory DB와 Storage DB의 차이

Momory DB Storage DB
저장 위치 데이터가 주로 메모리(RAM)에 저장됩니다. 데이터가 디스크에 저장됩니다.
성능 메모리에서 직접 데이터를 처리하기 때문에 성능이 매우 빠릅니다. 특히, 읽기/쓰기 작업이 빈번하게 발생하는 애플리케이션에서 유리합니다. Disk I/O를 통해 데이터를 처리하기 때문에 상대적으로 속도가 느릴 수 있습니다. 그러나 디스크는 대량의 데이터를 영구적으로 저장하는 데 적합합니다.
데이터 지속성 일반적으로 RAM에 저장되기 때문에 전원이 꺼지거나 시스템이 재부팅되면 데이터가 사라질 수 있습니다. 일부 In-memory DB는 지속성을 제공하기 위해 데이터를 주기적으로 디스크에 백업하는 기능을 제공합니다. 기본적으로 디스크에 데이터를 저장하므로 데이터 지속성이 보장됩니다. 데이터가 안전하게 보존되며, 전원이 꺼지거나 시스템이 재부팅되어도 데이터가 유지됩니다
용도 실시간 분석, 캐싱, 임시 데이터 저장, 빠른 응답이 필요한 애플리케이션에서 주로 사용됩니다. 예를 들어, Redis, Memcached 등이 대표적인 In-memory DB입니다. 데이터의 무결성과 지속성이 중요한 경우, 그리고 복잡한 쿼리나 트랜잭션을 처리해야 하는 애플리케이션에 적합합니다. 예를 들어, MySQL, PostgreSQL, Oracle 등이 대표적인 RDBMS입니다
확장성 데이터가 메모리에 저장되기 때문에 메모리 용량에 따라 확장이 제한될 수 있습니다. 대규모 데이터를 처리하기 위해서는 클러스터링이나 샤딩을 고려해야 합니다. 반적으로 디스크 기반이므로 대량의 데이터를 처리하는 데 적합하며, 수평적 확장을 위해 다양한 기법들이 존재합니다.

Momory DB와 Storage DB 속도가 얼마나 차이가 나길래?

In-Momory DB는 디스크에 접근할 필요가 없기 때문에 데이터 접근 속도가 매우 빠릅니다. 이를 쉽게 이해하기 위해 비교해보자면, CPU는 메모리(RAM)와 직접 연결되어 있어 메모리에 저장된 데이터에 신속하게 접근할 수 있습니다. 반면에 디스크는 별도의 하드웨어 장치로, 물리적 I/O(Disk I/O) 제약이 발생합니다. 이로 인해 대용량 쿼리에서는 CPU 부하가 증가하고, 다중 쿼리 처리 시 병목 현상이 나타날 수 있습니다. 디스크 기반 스토리지는 물리적 데이터 접근 시간이 필요하므로, RAM에 비해 속도가 느릴 수밖에 없습니다.

Example

나(CPU)는 가방(메모리)과 냉장고(디스크)에 각각 사과(데이터)를 보관해 두었습니다.
그럼 이 사과를 지금 당장 먹기 위해 접근성 이 더 좋은 곳은 가방과 냉장고 중 어디일까요? 물론 가방에 있는 사과를 먹는 게 좋겠습니다.
하지만 가방은 신선도가 보장되지 않습니다. 장기간 보관이 어렵지요. 그리고 많은 양의 사과를 보관하지 못합니다.
냉장고는 접근성이 가방보다는 떨어지지만 오랜 기간 신선하게 보관이 가능하고 많은 양을 보관할 수 있습니다.

💡 Disk I/O(Disk Input/Output)

컴퓨터에서 디스크 장치(예: HDD, SSD)와 데이터를 읽고 쓰는 작업을 의미.


RAM, SSD, HDD 각각 비슷한 가격으로 성능을 비교해보자!

RAM 대역폭(MB/s) 계산: 대역폭 (MB/s)= 동작 클럭(대역폭) × 버스 폭(Byte) × RAM 수

위 각각 1개 상품을 기준으로 비슷한 가격(HDD는 아무거나 가져왔습니다 ㅎㅎ..)으로 책정된 상품들을 비교해 봤습니다.

  • RAM: 44800Mb/s
  • SSD: 3,500MB/s
  • HDD: 190MB/s

다음과 같이 큰 성능 차이가 발생하는 이유는 무엇일까요? In-memory DB와 Disk DB 간의 성능 차이를 단순히 “CPU와의 물리적 거리”나 “Disk I/O의 속도 차이”로만 설명하기에는 부족합니다. 이러한 큰 폭의 차이를 보다 깊이 있게 이해하기 위해서는 다음과 같은 요소들을 고려할 필요가 있습니다.

Momory DB Storage DB
액세스 시간 차이 메모리는 휘발성 저장 장치로, CPU가 직접 접근할 수 있는 고속의 저장 장치입니다. 메모리의 액세스 시간은 나노초(ns) 단위로 측정되며, 보통 몇 십 나노초 내외입니다. 이는 CPU와 메모리 사이에 거의 지연 시간이 없는 것을 의미합니다. 디스크는 비휘발성 저장 장치로, 데이터를 영구적으로 저장하는 데 사용됩니다. 디스크의 액세스 시간은 밀리초(ms) 단위로 측정됩니다. 특히, HDD의 경우 디스크가 물리적으로 회전하고 읽기/쓰기 헤드가 해당 위치로 이동하는 데 시간이 걸리며, SSD도 플래시 메모리 칩에 데이터를 기록하는 과정에서 메모리보다 훨씬 더 느립니다.
I/O 병목 현상 메모리는 CPU와 직접 연결되어 있으므로 데이터 전송 시 병목 현상이 거의 발생하지 않습니다. 또한 메모리는 여러 병렬 작업을 더 쉽게 처리할 수 있습니다. 디스크는 보통 I/O 채널을 통해 CPU와 연결되며, I/O 작업에는 병목 현상이 발생할 수 있습니다. 특히 많은 데이터가 디스크에 쓰여지거나 읽혀질 때, 디스크의 속도 제한으로 인해 성능 저하가 발생할 수 있습니다.
랜덤 액세스 vs 순차 액세스 메모리는 랜덤 액세스가 가능하여, 임의의 메모리 위치에 빠르게 접근할 수 있습니다. 이는 데이터가 물리적으로 어떤 위치에 저장되어 있는지에 관계없이 일정한 시간 내에 데이터를 가져올 수 있음을 의미합니다. 디스크는 순차 액세스가 더 빠르지만, 랜덤 액세스 성능이 상대적으로 떨어집니다. 특히, HDD의 경우 물리적 이동이 필요하기 때문에 랜덤 액세스 성능이 매우 낮습니다.
버스 속도 메모리는 CPU와 같은 메모리 버스를 통해 고속으로 연결됩니다. 현대의 DDR4, DDR5 메모리 등의 속도는 수십 기가바이트/초(GB/s)에 달합니다. 디스크는 보통 SATA, NVMe 등의 인터페이스를 통해 연결되며, 이 인터페이스의 최대 속도는 메모리보다 느립니다. 예를 들어, 최신 NVMe SSD도 3~7 GB/s 정도의 속도를 갖습니다.

💡 랜덤 액세스순차 액세스

저장장치의 읽기/쓰기 속도는 순차(Sequential)와 랜덤(Random) 읽기/쓰기 속도로 구분됩니다.

저장장치 내 데이터를 읽는것을 책에 비유한다면 순차읽기는 책을 펼치고, 문장을 읽어가는것과 같습니다. 반면 랜덤 읽기는 책 전체에서 특정 단어만 찾아 읽는것과 같습니다. 이러한 원리로 인해 랜덤읽기는 순차읽기보다 그 속도가 느립니다.

💡 버스 속도:

컴퓨터 시스템의 내부에서 데이터가 이동하는 속도를 나타내는 중요한 개념입니다. 여기서 “버스”는 CPU, 메모리, 저장 장치, 그리고 기타 주변 장치 간의 데이터 전송 경로를 의미합니다.

  • 데이터 전송 속도: 버스 속도는 데이터를 한 부분에서 다른 부분으로 전송하는 속도를 나타냅니다. 이는 보통 초당 메가헤르츠(MHz) 또는 기가헤르츠(GHz)로 측정됩니다.
  • 대역폭(Bandwidth): 버스 속도와 함께 중요한 개념으로, 버스의 대역폭은 한 번에 전송할 수 있는 데이터의 양을 의미합니다. 대역폭은 일반적으로 초당 비트(bps)로 측정되며, 버스 속도가 높을수록 더 많은 데이터를 더 빠르게 전송할 수 있습니다
  • 시스템 성능에 미치는 영향: 버스 속도가 빠를수록 시스템의 전반적인 성능이 향상됩니다. 이는 특히 데이터베이스(DB) 시스템에서 중요한데, 데이터베이스가 저장된 디스크에서 데이터를 가져와 처리한 후 결과를 다시 저장하는 과정에서 버스 속도가 빠르면 처리 시간이 줄어들기 때문입니다.

HDD와 SSD 차이

  • HDD는 데이터가 플래터 라는 원판에 기록됩니다. 때문에 거리가 멀리 떨어진 데이터를 읽을 때는 책 페이지를 넘길때와 같이 물리적인 동작(회전)으로 인해 회전지연시간이 소요됩니다. 때문에 순차 읽기에 비해 랜덤 읽기의 속도가 크게 떨어집니다.
  • SSD는 처음부터 데이터가 각 셀의 수명에 따라 분산되어 저장되며, 읽을때도 물리적인 거리와 상관없이 병렬처리가 가능하기 때문에 순차 읽기와 랜덤 읽기 성능 차이가 적습니다. 이는 하드 디스크보다 랜덤 속도에 훨씬 뛰어남을 의미합니다.

현재 기술 발전에도 불구하고, 모든 데이터를 SSD에 저장하는 것은 비용 측면에서 여전히 어려움이 있습니다. 이러한 한계를 극복하기 위해, HDD는 특정한 용도로 효과적으로 활용되고 있습니다.

빅테크 기업들은 방대한 데이터를 보관하기 위해 데이터 센터를 운영하고 있으며, 이 데이터 센터에서는 주로 스토리지 장비나 스토리지 어레이 시스템을 사용합니다. 이 시스템에서 SSD는 빠르고 빈번한 접근이 필요한 데이터를 저장하는 데 사용되며, 반면에 HDD는 대규모의 데이터 중 자주 접근되지 않는 데이터를 저장하는 데 활용됩니다. 이러한 방식으로 기업들은 비용 효율성을 극대화하면서도 데이터 접근 속도를 최적화할 수 있습니다.

In-memory DB는 빨라서 무조건 좋을까?

위 글은 Memory DB와 Storage DB의 영역과 역할을 무시한 채 단순히 성능을 비교하려는 순수한 호기심에서 비롯된 것입니다. 그러나 결론부터 말씀드리자면, 두 가지를 직접적으로 비교하는 것은 적절하지 않습니다. 실제로 Memory DB와 Storage DB는 각각 명확하게 구분된 활용 영역을 가지고 있습니다.

비록 두 DB 모두 데이터를 저장한다는 목적을 가지고 있지만, In-memory DB는 주로 경량의 잦은 조회가 필요한 휘발성 데이터를 보관하는 데 사용되며, Disk DB는 대규모의 데이터를 장기간 보관하는 데 적합합니다. 이들이 서로 대체될 수 없는 가장 큰 이유는 비용과 저장 용량의 차이입니다.

물론 Memory DB(예: Redis)도 데이터의 영속성을 위한 다양한 가이드를 제공하지만, Memory DB의 특성상 대량의 쿼리 요청 시 CPU 부하가 발생할 수 있습니다. 특히, Memory DB는 싱글 스레드 방식으로 작동하는 경우가 많아 이 문제가 더욱 두드러집니다.

결국, 이 모든 것을 고려했을 때 가장 큰 이슈는 비용이라고 할 수 있습니다.

각각 1TB으로 비교를 한다면?(위 상품으로 비교하였습니다.)

다음 표는 RAM, SSD, HDD의 가격과 용량을 비교한 것입니다:

  RAM SSD HDD
비용 4,063,000원 138,000원 70,000원
용량 1TB 1TB 1TB

일반적으로 사용되는 하드웨어를 기준으로 볼 때, 1TB 용량의 HDD는 약 7~8만 원, SSD는 약 12만 원 정도에 구입할 수 있습니다. 하지만 같은 용량의 RAM을 확보하려면 약 4천만 원이라는 엄청난 비용이 듭니다.

물론, 이러한 가격 비교는 순수하게 PC용 하드웨어를 기준으로 한 것이며, 대규모 기업 환경에서의 비용 구조와는 차이가 있을 수 있습니다. 그러나 일반 소비자의 시각, 특히 백엔드 개발자의 관점에서 볼 때, RAM의 비용은 SSD나 HDD와는 비교할 수 없을 정도로 높습니다. 게다가 기업에서 다루는 데이터 용량은 1TB를 훨씬 초과하기 때문에, 이러한 비용은 더욱 천문학적일 것입니다.

따라서 우리는 In-Memory DB와 Disk DB의 특성과 비용을 고려하여, 적절한 용도로 각각을 사용해야 합니다.

Reference

  • https://hanawithdata.tistory.com/entry/메모리-계층-구조와-In-Memory-DB-Redis-특징
  • https://me2.do/5iT9WbHn
  • https://f-lab.kr/insight/understanding-data-storage