Redis는 왜 싱글 스레드로 동작할까?

박재성·2025년 5월 13일
0

면접 대비 지식

목록 보기
6/11

Redis는 빠른 인메모리 데이터 저장소로 유명하다. 그런데 놀랍게도 Redis는 기본적으로 싱글 스레드(single-threaded) 구조로 동작한다. 멀티스레드가 대세인 환경에서, 왜 Redis는 싱글 스레드를 고수하는 걸까?


🔹 기본 전제: 빠른 속도 = 단순한 구조

Redis의 핵심 목표는 고속 성능이다. 이를 달성하기 위해 Redis는 다음과 같은 선택을 했다:

  • 모든 작업을 하나의 스레드로 처리
  • I/O 멀티플렉싱 기반 이벤트 루프 사용 (epoll, kqueue 등)
  • 락(Lock)이나 컨텍스트 스위칭 최소화

이러한 구조는 병목 없이 요청을 빠르게 처리할 수 있다는 장점을 가진다.


🔹 싱글 스레드의 이점

1. 🔒 락 경합(Lock contention) 제거

멀티스레드 환경에서는 공유 데이터에 접근할 때 동기화(락)가 필요하다. 하지만 락은 다음과 같은 비용을 유발한다:

  • 쓰레드 간 컨텍스트 스위칭
  • 락 획득/해제 오버헤드
  • 데드락 발생 위험

Redis는 이러한 복잡함을 피하고자 싱글 스레드로 순차 처리를 선택했다. 이로 인해 모든 명령이 순서대로, 빠르게, 안전하게 실행된다.


2. ⚙️ CPU 캐시 효율성

싱글 스레드는 하나의 CPU 코어에만 의존하기 때문에, 캐시 지역성(locality)이 높아진다.
이는 메모리 접근 성능을 높이는 데 유리하다.


3. 🧠 구현이 단순해짐

복잡한 스레드 동기화 코드를 제거함으로써 Redis는 코드 구조가 간결해졌고,
성능 튜닝 및 유지보수가 쉬워졌다.


🔹 싱글 스레드지만 느리지 않다?

Redis가 싱글 스레드라고 해서 느린 건 아니다. 그 이유는 다음과 같다:

  • 모든 데이터는 메모리에 존재 → 접근 속도가 매우 빠름
  • I/O 처리를 비동기 이벤트 루프로 처리 → 수천 개의 요청을 빠르게 처리 가능
  • 명령어 실행이 매우 짧고 단순 → 수십만 QPS 처리 가능

🔹 멀티코어 활용은 안 될까?

Redis는 주요 로직은 싱글 스레드로 처리하지만, 일부 작업은 멀티 스레드로 보완하고 있다:

  • RDB/AOF 저장 및 로딩
  • Redis 6 이후에는 I/O 멀티스레딩 기능도 선택적으로 지원 (읽기/쓰기 분산 처리)

즉, 핵심 처리 흐름은 싱글 스레드, 부가 작업은 멀티 스레드 구조로 확장 중이다.


✅ 정리

  • Redis는 단순함과 성능을 위해 싱글 스레드 구조를 채택했다.
  • 락 경합, 컨텍스트 스위칭 등의 복잡한 문제를 회피할 수 있다.
  • 메모리 기반 동작과 비동기 이벤트 루프 덕분에 여전히 매우 빠른 처리 속도를 자랑한다.
  • 최신 Redis는 필요한 경우 멀티스레드 기능도 병행하여 성능을 보완하고 있다.

0개의 댓글