[개발 일기] 2025.01.03 - Redis의 만료기한

2025. 1. 3. 23:39·개발 일기

개요

 

OKKY에서 Access 토큰과 Refresh 토큰에 관한 이야기를 나누는 것을 봤다.

 

 

그리고 자연스럽게 Redis와 만료기한과 관련된 내용도 나왔는데, 이때 갑자기 떠오른 기억이, 이전까지 Refresh 토큰이나 임시 예약과 같은 기능을 사용할 때 Redis의 만료기한도 함께 사용했었던 기억이었다.

(임시 예약에 Redis의 만료기한을 사용한 이유는 최종 결제가 성공적으로 이루어지지 않는 경우 해당 예약은 취소해야 하기 때문!)

 

 

그때 당시엔, ‘알아서 데이터도 삭제해 주네? 이거 편하네~’라고 생각하고 대수롭지 않게 넘겼는데, 이게 무슨 원리 때문인지, 단순한 인메모리 DB의 특징인 건지 궁금해서 일기를 쓴다.

 

 

 

인메모리 DB

 

인메모리 DB란 명칭 그대로, 메모리에 직접 데이터를 저장하고 읽는 데이터베이스를 의미한다. 그렇기 때문에 일반 DB(디스크에 데이터를 저장하는 DB)보다 더 빠르게 데이터를 저장 및 조회할 수 있다.

 

 

인메모리 DB가 데이터를 더 빠르게 저장하고 조회할 수 있는 이유는 아래의 컴퓨터 메모리 계층 구조를 보면 된다.

 

 

보다시피 메인 메모리 계층이 CPU와 더 인접하기 때문에 낮은 지연시간으로 작업을 수행할 수 있다.

 

 

또한 CPU가 연산작업을 처리하기 위해 사용하는 데이터는 모두 메모리에 존재한다. 만약 메모리에 해당 데이터들이 없는 경우, 일반 DB는 디스크에서 데이터를 메모리에 적재한 뒤, CPU가 그 데이터를 토대로 연산작업을 수행하는 것이다.

 

 

만약 인메모리 DB처럼 메모리에 데이터를 직접 저장한다면 위의 과정이 생략되는 것이다.

 

 

이게 기본적인 인메모리 DB의 원리이다.

 

 

그럼 이제 내가 궁금했던 인메모리 DB와 만료기한의 관계에 대해 알아보자.

 

 

 

인메모리 DB와 만료기한

 

일단 내가 사용한 Redis은 TTL(Time To Live)을 지원한다.

 

 

내가 저장한 데이터마다 TTL을 지정할 수도 있고, 지정하지 않을 수도 있다. 만약 지정하지 않는다면 이 데이터는 내가 Redis 서버를 종료할 때 까지 삭제되지 않는다.

 

 

결론을 말하자면 Redis가 데이터를 삭제하는 방법은 주기적인 모니터링 때문이다.

 

 

Redis가 저장된 데이터를 주기적으로 모니터링 한 후, TTL이 지난 데이터는 삭제하는 것이다.

 

 

key - value 라는 데이터 쌍을 저장하고, TTL은 30초로 설정했다.

 

 

위의 로그를 보다시피 TTL이 1초가 지날 때 마다 1씩 감소하는 것을 볼 수 있다.

 

 

 

느낀점

 

왜 TTL 기능을 Redis에 넣어놨을까라고 생각해 보니까, 인메모리 DB은 메모리 계층 구조를 보다시피 디스크에 비해 많은 양의 데이터를

저장할 수 없기 때문인 것 같다. (참고로 많은 인메모리 DB에서 TTL 기능을 지원함)

 

 

그만큼 저장할 수 있는 용량이 적으니까 계속해서 관리하는 것!

 

 

원리는 JVM의 GC와 거의 동일한 느낌이다. 어쨌든 둘 다 메모리 공간 확보를 위해 사용하는 기술이니까..!

 

'개발 일기' 카테고리의 다른 글

[개발 일기] 2025.01.06 - OSI 7계층 (물리 계층)  (0) 2025.01.06
[개발 일기] 2025.01.05 - 자바 객체 락 (synchronized)  (0) 2025.01.05
[개발 일기] 2025.01.04 - Event, Publisher, Listener  (0) 2025.01.04
[개발 일기] 2025.01.02 - @Transactional (readOnly = true)  (0) 2025.01.02
[개발 일기] 2025.01.01 - 도커 컨테이너 네트워크 (Feat : ports)  (0) 2025.01.01
'개발 일기' 카테고리의 다른 글
  • [개발 일기] 2025.01.05 - 자바 객체 락 (synchronized)
  • [개발 일기] 2025.01.04 - Event, Publisher, Listener
  • [개발 일기] 2025.01.02 - @Transactional (readOnly = true)
  • [개발 일기] 2025.01.01 - 도커 컨테이너 네트워크 (Feat : ports)
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[개발 일기] 2025.01.03 - Redis의 만료기한
상단으로

티스토리툴바