inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

redis 종료시 캐싱 처리

해결된 질문

65

jhkim593

작성한 질문수 7

0

안녕하세요!

article-read service에서 ArticleIdListRepository는 createdEvent를 받았을 때만 추가되는데

만약 redis가 종료돼 데이터가 유실된다면 createdEvent로만 추가되기 때문에 당장 캐시 db로서 역할을 못 할 것 같습니다

이 부분은 redis에 데이터가 유실되지 않는다고 가정하신 뒤 코드를 작성한 것이 맞을까요??

java mysql spring-boot kafka redis

답변 2

1

쿠케

진현님, 안녕하세요!

 

말씀하신대로 레디스에 데이터가 없으면, 레디스에서 데이터를 못 가져오는게 맞습니다.

하지만 레디스도 가용성을 뒷받침하도록 운영할 수 있고(센티널 또는 클러스터), RDB, AOF 등의 백업 전략도 가지고 있습니다.

또, 강의에서는 레디스에 데이터가 없더라도, 원본 데이터 서버에서 fetch 해온 뒤 다시 레디스에 갱신하는 전략을 취하고 있습니다.

목록 데이터는 원본 데이터 서버에서 그대로 조회해오고 있지만, 신규 데이터가 생성되면서 점진적으로 레디스에 데이터가 다시 채워지게 됩니다. (이것도 필요하다면, 조회 후 갱신하는 전략 또는 미리 캐시에 데이터를 채워두는 전략을 취할 수 있습니다.)

 

이 부분은 redis에 데이터가 유실되지 않는다고 가정하신 뒤 코드를 작성한 것이 맞을까요??

위와 같은 이유로, 레디스에 데이터가 유실되더라도 가용성을 유지할 수 있는 전략으로 코드가 작성된 것입니다.

레디스 클러스터나 백업 전략은 이론만 설명하고 넘어간 부분이지만 가용성이 보장된 운영 방식을 가정한 것이고(인프라 구성에 대한 가정은 강의 소개에서 언급됨),

레디스가 죽거나 데이터 유실되더라도 원본 데이터 서버에서 데이터를 조회 및 재갱신을 할 수 있기 때문입니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 김진현님.

질문 주신 Redis 캐싱 처리 및 데이터 유실에 대한 우려에 대해 설명드리겠습니다. Redis는 메모리 기반의 데이터 저장소로서 빠른 속도를 제공하지만, 서버가 종료되거나 문제가 발생하면 데이터 유실의 가능성이 있습니다. 이러한 특성 때문에, Redis의 데이터 영속성(Persistence)을 어떻게 설정하는지가 중요합니다.

Redis 데이터 영속성 설정

  1. RDB 스냅샷: Redis는 메모리 데이터를 주기적으로 디스크에 덤프하여 저장하는 방법을 지원합니다. Redis 서버 설정을 통해 특정 시간이 경과하거나 특정 조건이 충족될 때 스냅샷을 작성하도록 설정할 수 있습니다.

  2. AOF(Append-Only File) 옵션: 이 옵션은 모든 쓰기 작업을 파일에 연속적으로 기록하여 데이터를 영속화하는 방법입니다. Redis 서버가 재시작될 때, 이 파일을 읽어와 데이터 복구에 사용됩니다.

  3. 유실에 대비한 데이터 복구 전략: Redis 종료 또는 장애가 발생했을 때 데이터 유실을 완화하기 위해 백엔드 데이터베이스(RDBMS)와의 동기화 및 재생성 전략이 필요합니다. Redis가 재시작된 후, RDBMS에서 데이터를 다시 캐시에 적재하는 방식으로 설계할 수 있습니다.

결론

  • Redis 데이터가 유실된 상황을 가정하지 않고 코드가 작성되었더라도, 실 운영 환경에서는 이러한 리스크를 대비한 데이터 영속성 설정 및 복구 전략을 마련하는 것이 중요합니다.

  • Course에서 설명된 내용이 이러한 세부 사항을 다루지 않았을 수 있지만, 안정적인 서비스 운영을 위해서는 Redis의 데이터 영속성과 유연한 복구 시스템을 고려해야 합니다.

유사한 상황에 관련된 Redis 캐싱 데이터 유실 복구 전략 등 기존의 질문 및 답변을 참고하시면 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

@Version 어노테이션이 붙은 필드는 낙관적 락이든 비관적 락이든 업데이트가 됩니다.

0

31

1

consumer에서 에러가 발생할 경우 데이터 유실 문의

0

47

2

게시글 테스트 데이터 삽입

0

50

2

정렬, 필터, 검색 등의 조건이 붙을 경우 최적화할 수 있는 방법이 무엇이 있을까요?

0

103

2

좋아요 기능 정합성 보장 방법

0

96

2

좋아요 동시성처리 최적의 선택?

1

135

2

프론트엔드 msa 환경 api 주소 통합? 과 서버끼리 통신 방식에대해

0

91

2

안녕하세요 무한스크롤 강의듣다가 질문이 있습니다.

0

59

1

조회수 조회 로직 질문

1

67

2

비로그인 유저도 어뷰징 방지 정책

1

72

2

CommentServiceTest의 테스트 로직 질문

0

54

2

무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점 의문

1

74

2

path 쿼리 관련 질문드립니다!

0

59

2

antigravity 에디터를 쓰신다면 종료해주세요

1

123

0

프로젝트 구조

0

88

2

article_like_count api test

0

77

2

이벤트 페이로드 객체의 생성 방식이 팩토리 메서드 패턴이 아닌 빌더 패턴인 이유가 궁금합니다!.

0

104

2

[33. 좋아요 수 구현] 에서 테스트 하는 화면 동시성 문제

0

90

2

findByPath에서 articleId로도 검색을 해야 할 것 같아요.

0

91

3

jpa ddl-auto none을 하는 이유와 join 방법

0

97

2

팩터리 메소드와 response 객체 사용 이유가 궁금합니다!

0

90

2

커서 기반 페이지네이션 과 무한 스크롤링

0

109

2

게시글 생성 로직에서 오류 발생시 redis 게시글 수 되돌리기

0

97

2

멀티 모듈이 아닌 MSA 환경에서 common

0

156

2