1. Redis 란 무엇인가?

1. Redis란 무엇인가?
- 메모리 기반의 NoSQL Key-Value 저장소
- 빠른 읽기/쓰기 속도, 다양한 자료구조 지원 (String, List, Set, Hash, Sorted Set 등)
- 일반적으로 캐시로 많이 사용되지만, **데이터 저장소(DB)**처럼 사용하는 사례도 늘어남
→ 그렇다면, “데이터를 잃지 않고” 안정적으로 저장하는 데에 Redis는 믿을만한가?
2. 가용성이란 무슨 뜻인가?

- 가용성(Availability): 서비스가 얼마나 지속적으로 동작 가능한지를 나타내는 지표(Availability = 사용 가능 시간 / 전체 시간) 그러니까, 가용성 99.9% 라고 한다면, 100분 중에 단 1분만이 문제가 발생했다는 것을 의미한다.
Redis 는 가용성을 높이기 위해 어떤 방식을 채택했을까?
- 백업 (Backup: RDB, AOF)
- 복제 (Replication)
클러스터를 사용하지 않아도, 이 두 가지로 단일 인스턴스 기반의 고가용성 구조를 구현할 수 있음
3. Redis의 백업
✅ RDB (Redis Database Backup)
- 스냅샷 기반 정기 저장으로 특정 시점의 데이터를 .rdb 파일로 저장
save 900 1 # 900초 동안 1개 이상의 변경이 있으면 저장
save 300 10
- 장점: 메모리 사용 적고 빠름
- 단점: 장애 직전에 저장되지 않은 데이터는 유실될 수 있음
✅ AOF (Append Only File)
- 모든 write 명령을 append log로 기록
appendonly yes
appendfsync everysec # 1초마다 디스크에 기록
- 장점: 장애 발생 시 복구 가능성 높음
- 단점: 디스크 사용량 증가, 복구 속도 느릴 수 있음
Redis는 기본적으로 휘발성 저장소이기 때문에 RDB, AOF를 적절히 조합해서 사용해야 데이터 보존이 가능
4. Redis 복제 (Replication)
❓ 왜 Redis 는 복제를 하려는 걸까?
- 마스터 노드 장애 시 복제본 노드로 Failover
- 트래픽 분산 (읽기 요청을 복제본으로 처리)
- 마스터에서 백업 시, 복제본에서 수행해 부하 분산
🔁 복제 메커니즘 요약
- REPLICAOF 명령으로 복제 시작
- 마스터가 RDB 생성 후 복제본으로 전송
- 복제본이 기존 데이터 삭제 후 로딩
- 실시간 커맨드는 복제 버퍼 통해 동기화
- (7.0 이후) repl-diskless-sync yes 로 RDB 전송 최적화 가능
5. 결론: 백업과 복제를 함께 사용하자
Redis를 DB처럼 사용하려면 반드시 데이터 유실에 대비한 구조가 필요하다
- 복제 구조를 통해 가용성 확보
- 백업(RDB 또는 AOF)을 통해 복제 실패나 마스터 재시작 시 데이터 유실을 방지
데이터의 안정성을 위해 복제 기능을 사용할 경우 백업 기능을 사용하는 것이 좋으며, 그렇지 않을 경우 마스터에서는 인스턴스의 자동 재시작을 활성화하지 않는 것을 권장한다. 그 이유는 만약 백업 기능을 활용하지 않고 재시작 될 때 Empty Set 이 복제본에게 동기화되어 이전의 데이터를 활용할 수 없기 때문이다.
'가치관 쌓기 > 개발 돌아보기' 카테고리의 다른 글
| 스프링에서 제공하는 XXTemplate 은 무엇일까? (RestTemplate, JdbcTemplate, TransactionTemplate, HibernateTemplate, SqlSessionTemplate...) (0) | 2024.11.08 |
|---|---|
| (수정)DB 에서 하는 동시성제어와 애플리케이션에서 하는 동시성 제어는 어떤게 다른걸까? (0) | 2024.10.08 |
| 영속성 처리하는 Method에 @transactional는 항상 붙이는게 맞을까? (1) | 2024.04.20 |
| 잘 알아보고 사용하자 Java Annotation(주석) (0) | 2024.03.10 |
| 왜 코드 리팩토링을 수행해야 될까? (5) | 2023.09.26 |
댓글