Redis는 데이터를 디스크에 영구 저장하는 방법으로 AOF (Append-Only File) 방식을 제공합니다. 하지만 시간이 지남에 따라 AOF 파일 크기가 커지면 성능 저하와 디스크 공간 문제를 초래할 수 있습니다. 이를 해결하기 위해 Redis는 AOF Rewrite (재작성, 압축) 기능을 제공합니다. 이번 글에서는 AOF Rewrite가 무엇인지, 어떻게 동작하는지, 그리고 설정 방법에 대해 자세히 알아보겠습니다.
1. AOF(Append-Only File)란? 왜 Rewrite가 필요한가?
Redis는 데이터를 영구적으로 저장하기 위해 AOF 파일을 사용하여 모든 쓰기 연산을 순차적으로 기록합니다. 예를 들어, SET key value
와 같은 명령이 실행될 때마다 AOF 파일에 기록됩니다. 이를 통해 Redis 서버가 재시작되더라도 데이터를 복원할 수 있습니다.
하지만 시간이 지나면서 같은 키에 대한 중복된 명령어가 AOF 파일에 계속 추가되면서 크기가 커지고, 복구 시간이 길어지는 문제가 발생합니다.
이를 해결하기 위해 AOF Rewrite (압축, 정리) 기능이 제공됩니다.
2. AOF Rewrite란?
AOF Rewrite는 기존의 appendonly.aof
파일을 최적화된 새로운 파일로 교체하는 과정입니다. 기존 AOF 파일을 그대로 유지하면서 새로운 파일을 생성하고, 불필요한 명령을 제거하여 크기를 줄입니다. 이 설명에서 중요한 부분은 최적화 한 뒤 기존파일을 교체라는 표현입니다. 이 표현이 rewrite의 작동방식을 요약하는 핵심입니다.
📌 AOF Rewrite 동작 방식
- Redis는 기존 AOF 파일을 직접 수정하지 않고, 새로운 AOF 파일을 생성합니다.
- 새로운 파일에는 최신 상태만을 반영하는 최소한의 명령어가 포함됩니다.
- 예를 들어, 기존 AOF 파일이 다음과 같다면:
SET key1 "hello"
SET key1 "world"
SET key1 "final"
AOF Rewrite 후에는 다음과 같이 최적화됩니다:
SET key1 "final"
즉, 새로운 appendonly.aof.tmp
파일이 완성되면 기존 파일을 삭제하고 새 파일로 교체합니다.(tmp파일이 aof 파일을 대체하게 됩니다.)
3. AOF Rewrite 설정 방법
✅ 자동 AOF Rewrite 설정
Redis는 AOF Rewrite를 자동으로 실행하도록 설정할 수 있습니다. redis.conf
에서 다음과 같이 설정합니다:
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
auto-aof-rewrite-percentage 100
: 마지막 AOF Rewrite 이후 파일 크기가 100% (2배) 이상 증가하면 Rewrite 수행auto-aof-rewrite-min-size 64mb
: AOF 파일이 최소 64MB 이상일 때만 Rewrite 수행
즉, 기존 AOF 파일 크기가 50MB였고, 이후 100MB가 되면 Rewrite가 자동 실행됩니다.
이 두 옵션은 항상 함께 설정하는 것이 좋습니다. auto-aof-rewrite-min-size
값을 지정하지 않으면, 이전 AOF 파일 크기가 20MB일 때 파일이 40MB로 증가하는 순간 불필요한 rewrite가 발생할 수 있습니다. 따라서 auto-aof-rewrite-min-size
를 설정하면 일정 크기 이상이 되었을 때만 rewrite가 실행되도록 보장할 수 있습니다.
즉, 기존 AOF 파일 크기가 50MB였고, 이후 100MB가 되면 Rewrite가 자동 실행됩니다.
✅ 수동으로 AOF Rewrite 실행
아래 명령을 실행하면 Redis가 즉시 AOF Rewrite를 수행합니다.
redis-cli BGREWRITEAOF
이 명령을 실행하면 Redis는 백그라운드에서 새로운 AOF 파일을 생성하며, 기존 파일과 교체하는 과정이 자동으로 이루어집니다.
4. AOF Rewrite의 결과물
AOF Rewrite가 실행되면 Redis의 데이터 디렉토리(/var/lib/redis
등)에서 다음과 같은 파일이 생성됩니다.
ls /var/lib/redis
출력 예시:
appendonly.aof
appendonly.aof.tmp # rewrite 중 생성된 임시 파일
appendonly.aof.tmp
: AOF Rewrite 중 생성된 새로운 최적화된 AOF 파일.appendonly.aof
: Rewrite 완료 후 기존 파일을 삭제하고 새로운 파일로 교체됨.
🚨 AOF Rewrite는 기존 AOF 파일을 압축하는 것이 아니라, 새로운 AOF 파일을 생성하여 기존 파일을 교체하는 방식입니다.
5. AOF Rewrite를 언제 활용해야 할까?
✅ AOF 파일 크기가 너무 커져 디스크 공간을 많이 차지할 때 - Redis는 지속적으로 데이터를 기록하므로, 시간이 지날수록 파일 크기가 증가합니다. - 불필요한 명령을 정리하여 디스크 사용량을 줄일 수 있습니다.
✅ Redis 재시작 시 복구 속도를 빠르게 하고 싶을 때 - AOF 파일 크기가 크면, Redis가 재시작될 때 모든 명령을 실행하면서 데이터를 복구해야 하므로 시간이 오래 걸립니다. - AOF Rewrite를 수행하면 파일 크기가 줄어들고, 복구 속도가 빨라집니다.
✅ Redis 성능을 최적화하고 싶을 때 - AOF 파일이 너무 커지면 Redis의 성능이 저하될 수 있습니다. - 주기적으로 AOF Rewrite를 실행하면 Redis가 보다 안정적으로 운영될 수 있습니다.
6. RDB 스냅샷과 AOF Rewrite 차이점
비교 항목 | AOF (Append-Only File) | RDB (Redis Database) |
---|---|---|
저장 방식 | 모든 쓰기 연산을 기록 | 일정 간격마다 전체 데이터를 덤프 |
복구 속도 | 느림 (모든 명령 실행 필요) | 빠름 (바이너리 덤프 복구) |
데이터 손실 가능성 | 적음 (fsync 설정에 따라 다름) | 있음 (스냅샷 주기에 따라 다름) |
파일 크기 | 큼 (모든 연산이 기록됨) | 작음 (최신 상태만 저장) |
성능 영향 | 높음 (모든 연산이 로그로 기록됨) | 낮음 (주기적인 덤프 수행) |
적합한 용도 | 높은 내구성이 필요한 경우 | 빠른 복구가 필요한 경우 |
👉 Redis 운영 환경에서는 AOF + RDB를 함께 설정하여 최적의 성능과 안정성을 확보하는 것이 일반적입니다.
7. 결론 및 요약
- Redis의 AOF Rewrite는 AOF 파일 크기를 줄이고, 복구 속도를 개선하기 위해 수행됩니다.
- 기존 AOF 파일을 직접 수정하는 것이 아니라, 새로운 최적화된 AOF 파일을 생성하여 기존 파일을 교체하는 방식으로 동작합니다.
auto-aof-rewrite-percentage
와auto-aof-rewrite-min-size
를 적절히 설정하면 자동으로 AOF Rewrite가 수행되어 성능과 저장 공간을 효율적으로 관리할 수 있습니다.- RDB 스냅샷과 함께 사용하면 Redis의 내구성과 성능을 동시에 최적화할 수 있습니다.
📌 Redis를 운영할 때 AOF Rewrite를 적절히 활용하여 성능을 최적화하세요! 🚀
우측의 검색창에서 redis를 검색하시면 redis설정에 대해서 더욱 많은 글을 확인하실 수 있습니다.
RDB
와 AOF
의 개념 정리가 필요하시면, 다음의 글도 보시길 추천합니다.
Add a New Comment