강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

김영빈님의 프로필 이미지
김영빈

작성한 질문수

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

인기글 Consumer 구현 - 컨트롤러&컨슈머 작성

인기글 설계에 대하여 질문드립니다.

해결된 질문

작성

·

58

·

수정됨

0

안녕하세요? 강의 정말로 잘듣고 있습니다. 인프런에서 여러 강의를 수강했지만, 정말 질 좋은 강의라고 생각합니다 ㅎㅎ..

인기글 설계에 대해 궁금한 부분이 있습니다.

 

1)저는 레디스의 sorted_set을 사용한다고 하셨을 때, 처음 떠올린 구조는 모든 게시글에 대한 점수를 기록하면서 자연스럽게 sorted_set에 의해 정렬되는 형태를 생각했었습니다.

예를 들어 20250713에 게시글이 십만개가 생성되었다고 하면, 20250713 sorted_set에 십만개의 게시글에 대한 점수가 들어있고, 필요할 떄 상위 10개의 데이터를 추출하여 인기글로 선정하는 형태입니다.

이렇게 하면 게시글과 연관된 데이터의 개수를 적재할 필요도 없다고 생각했고, sorted_set을 자연스럽게 활용하는 형태라고 생각했습니다.

 

이벤트를 수신하고나면, 적절하게 점수만 올려주면 된다고 생각하구요. 이렇게 하면 게시글과 관련된 데이터를 적재할 필요도 없을 것 같아서 나쁘지 않은 방법 같은데, 이 방법에 대해서 어떻게 생각하시는지 궁금합니다

 

2) 비슷한 맥락으로, 강의에서 보여주신 방향을 선택하신 이유도 좀 궁금합니다. 1)에서 제가 말씀드린 방안보다 선생님이 강의에서 말씀해주신 방향이 어떤 장점이 있는걸까요?

 

3) 마지막으로.. 강의가 너무 좋아서 다음강의가 기대가 되는데요, 혹시 비슷한 사이즈에 비슷한 볼륨일까요?

또 이미 강의를 제작중이실 것 같은데, 캐싱과 관련된 부분이라고는 알고 있지만 조금 더 상세한 커리큘럼이나 개강일자가 궁금합니다 ㅎㅎ

좋은 강의 감사합니다

답변 2

1

김영빈님의 프로필 이미지
김영빈
질문자

답변 감사합니다~! 캐시강의 진짜 기대중입니다 ㅎㅎ

0

쿠케님의 프로필 이미지
쿠케
지식공유자

영빈님, 안녕하세요!

강의 잘 수강해주셔서 감사합니다!

 

질문 주신 내용에 대해서는 레디스의 특성을 먼저 이해할 필요가 있을 것 같습니다.

레디스는 메모리 기반이기 때문에 디스크에 비해 상대적으로 비싸고 그 크기도 제한됩니다.

또, 레디스에 대한 샤딩 환경을 구축한다고 하더라도, 단일 키에 대해서는 단일 샤드에만 접근하게 됩니다.

 

즉, 모든 게시글을 단일 Sorted Set에 저장할 수가 없습니다.

Sorted Set은 무한히 커질 수 없기 때문입니다. 단일 Sorted Set에는 약 43억개까지 저장 가능하다고 하네요.

CRD 연산의 시간복잡도도 O(nlogn)인데, n이 커질수록 병목 또한 커질수가 있습니다.

또, 게시글을 단일 Sorted Set에 저장하면, 단일 샤드에만 부하가 증가하는 핫키 문제도 발생할 수 있습니다.

상위 N건 외에는 사용되지도 않는 가비지 데이터일 수도 있는데, 아무래도 단지 정렬 때문에 비싼 저장소를 사용할 이유가 없기도 하고요.

모든 데이터를 쌓아서 편하게 관리하고 싶다면, 마음 편하게 디스크 기반의 데이터베이스를 활용할 수도 있습니다.

하지만 디스크는 메모리보다 읽기/쓰기 작업에 더 높은 비용을 요구하게 됩니다.

읽기 작업은 캐시로 해결할 수 있다고 하더라도,

score가 자주 변할 수 있다면 이러한 쓰기 비용(예를 들어, score 정렬을 위한 인덱스가 있다면, 인덱스에 대한 쓰기 비용도 꾸준함)은 아주 큰 비용이 됩니다.

메인 데이터베이스의 리소스는 가장 소중하기 때문에 다른 곳으로 부하를 분산하는 게 좋은 전략이 될 수 있는 것이고요!

 

마지막으로.. 강의가 너무 좋아서 다음강의가 기대가 되는데요, 혹시 비슷한 사이즈에 비슷한 볼륨일까요?

또 이미 강의를 제작중이실 것 같은데, 캐싱과 관련된 부분이라고는 알고 있지만 조금 더 상세한 커리큘럼이나 개강일자가 궁금합니다 ㅎㅎ

다읨 강의에 대해서는 원래는 올해 3분기가 목표였으나, 아무래도 본업 때문에 점점 늦어지게 되네요.

그래서 올해 안에는 오픈하는 것이 목표입니다!

말씀하신대로 캐시 전략에 관한 강의가 맞습니다.

이 또한 대규모 시스템을 가정하고 있고요, 내용은 비슷하거나 더욱 어려울 것 같습니다.

Cache Penetration, Cache Stampede 현상을 살펴보고, 이러한 전략을 해결하게 되는데요.

Bloom Filter, Null Object Pattern, Request Collapsing(본 강의에도 있지만, 유사한 개념으로 또 다른 전략도 소개), Write-through, Application-Level Sharding, Jitter, Probabilistic Early Recomputation

단순히 이론과 기초적인 수준의 구현 뿐만 아니라, 대규모 시스템과 실무에서 발생할 수 있는 모든 상황들을 고려하여 더욱 복잡한 전략과 함께 실제 적용 가능한 수준까지 코드를 작성해 봅니다.

이 때문에 구현에 관한 부분이 꽤나 어렵게 다가올 수 있을 것 같네요. 저한테도 쉬운 내용은 아니다보니 코드 작성하는 시간이 계속 길어지는 상황입니다..

(사실 취준생 분들 또는 웬만큼 대규모 트래픽까지 경험할 일이 없는 이상, 꼭 필요한 내용은 아니라고 생각되기도 합니다...)

개강 일자에 대해서는 조금 더 구체화되면 새소식으로 전달드릴 수 있도록 하겠습니다!

 

감사합니다.

김영빈님의 프로필 이미지
김영빈

작성한 질문수

질문하기