IT/CS 공부

[CS] Redis가 싱글 스레드로 동작하는 이유

박소민 2025. 5. 20. 09:23
스레드란?
컴퓨터는 동시에 여러 작업을 처리할 수 있는데,
이 때, 이 작업의 단위가 프로세스이고, 그 안에서 더 잘게 나눈 단위가 스레드

 

멀티 스레드의 장단점
  • 멀티스레드의 장점
장점 설명
동시 작업 가능 (병렬성) 여러 작업을 동시에 처리할 수 있어 전체 처리 속도가 빨라지고 CPU 자원을 효율적으로 사용할 수 있다.
응답 속도 향상 하나의 작업이 블로킹 상태여도 다른 작업은 계속 진행할 수 있어 프로그램의 반응성이 높아진다.
리소스 절약 새로운 프로세스를 생성하는 것보다 스레드를 생성하는 것이 자원 소모가 적고,
메모리를 공유하기 때문에 효율적이다.
UI와 백그라운드 작업 분리 사용자 인터페이스와 데이터 처리, 네트워크 작업 등을 분리해 안정적인 사용자 경험을 제공할 수 있다.
  • 멀티스레드의 단점
단점 설명
동기화 필요 여러 스레드가 동시에 동일한 자원에 접근하면 충돌이 발생할 수 있으므로, 락(lock) 같은 동기화 기법이 필요하다.
성능 저하 가능성 스레드 간 전환(컨텍스트 스위칭)이나 락으로 인한 대기 시간 등으로 오히려 성능이 저하될 수 있다.
디버깅 어려움 버그가 간헐적으로 발생하거나 재현이 어려워서 원인을 파악하고 수정하기가 어렵다.
스레드 관리의 복잡성 스레드 수가 많아지면 관리가 어려워지고 데드락, 자원 고갈 등의 문제가 발생할 수 있다.

 

 

Redis가 싱글 스레드로 동작하는 이유
  • 안전하게 하기 위해 (데이터 충돌 방지)
여러 사용자가 동시에 하나의 데이터를 수정하면 충돌이 발생할 수 있음
Redis는 "한 번에 한 명만" 작업하도록 설계해 데이터 일관성을 유지합니다.
  • 복잡하지 않게 하려고
멀티스레드는 동시 접근을 막기 위한 락(lock) 등 복잡한 제어 구조가 필요
Redis는 이러한 복잡성을 제거하고 단순하고 안정적인 구조를 선택했습니다.
  • 성능이 충분히 빠르기 때문에
Redis는 모든 데이터를 메모리(RAM)에 저장
디스크보다 훨씬 빠른 메모리 덕분에, 하나의 스레드만 사용해도 매우 빠르게 동작합니다.
또한, 멀티스레드에서 발생하는 컨텍스트 스위칭 비용도 줄일 수 있습니다.

 


Redis 6.0 이후의 변화
Redis 6.0부터는 네트워크 I/O 처리만 멀티스레드로 개선

즉, 클라이언트 요청을 받고 응답하는 과정만 병렬로 처리하며, 실제 명령 실행은 여전히 하나의 스레드가 담당
→ 원자성(Atomic)과 데이터 일관성은 그대로 유지

 

출처: 매일메일

1. Clients (클라이언트)
Redis를 사용하는 프로그램 ex) 웹서버, API 서버, 모바일 앱 등
여기서 Redis에 데이터 요청을 보냄

2. I/O Multiplex Connections (I/O 다중 연결)
여러 클라이언트로부터 오는 요청을 동시에 받고 정리하는 부분
한 리셉션 직원이 고객들 요청을 차례차례 접수하는 느낌

3. Event Loop (이벤트 루프)
클라이언트 요청을 하나씩 꺼내서 어떤 처리를 해야 할지 판단
이 부분이 Redis의 싱글 스레드가 일하는 핵심 영역

4. Task Queue (작업 큐)
해야 할 작업이 임시로 저장되는 대기열입니다.
ex) "key1 저장", "key2 조회" 같은 요청들이 들어온다

5. Event Dispatcher (이벤트 분배기)
어떤 요청을 어떤 처리기로 보낼지 결정

6. Event Processors (이벤트 처리기)
실제로 데이터를 읽거나 쓰는 명령이 실행되는 부분
여기서 Redis 명령어가 실행되고, 이 역시 싱글 스레드로 동작

 

'IT > CS 공부' 카테고리의 다른 글

[CS] 방어적 복사(Defensive Copy)  (2) 2025.05.22
[CS] Call By Value와 Call By Reference  (0) 2025.05.22
[CS] CAP 정리  (0) 2025.05.15
[CS] 시스템 간 비동기 연동 방식 정리  (0) 2025.05.14
[CS] 캐시 스템피드 현상  (0) 2025.05.13