2025/11 6

작성자 검색 인덱스 사용 불가 문제 해결

게시판의 제목, 제목+내용 검색에는 FULLTEXT 인덱스를 적용했지만, 작성자 검색에는 적용하지 않았습니다. FULLTEXT에는 불용어 개념이 있습니다. 한마디로 텍스트를 언어의 개념으로 간주하여 의미가 있는 제목, 내용에는 적합하나 주로 의미 없는 문자열로 구성된 작성자 검색에는 부적합하다 생각했습니다. 문제 진단 및 원인 분석따라서 유니크 인덱스를 이용하여 작성자 검색을 하게 되는데 %LIKE% 검색 시 유니크 인덱스를 사용할 수 없다는 문제가 있었습니다. 이로 인해 인덱스를 포기하고 %LIKE%로 정확성을 확보할 것인지, 혹은 인덱스를 활용하여 속도를 확보할 것인지 고민했습니다.다음과 같은 분석을 통해 해결책을 모색했습니다.짧은 검색어일수록 중간 단어 검색(%LIKE%)을 선호하는 경향이 있습니다..

데이터 분할로 친구 관계의 연쇄 작용 제어: 실시간 친구 추천 시스템 구축기

1. 기존 방식 및 문제점1-1. 기존 친구 추천 시스템 개요기존의 친구 추천시스템은 조회용 추천친구 테이블을 별개로 두고 1시간 마다 배치로 친구 테이블에서 추천친구를 계산하여 추천친구 테이블에 저장하였습니다. 아래 표를 기준으로 회원마다 점수를 측정하여 상위 10명을 추천 했습니다. 2촌3촌글 추천댓글 추천댓글 작성공통 2촌 추가 점수 공통 3촌 추가 점수 점수50점20점0.5점0.5점0.5점2점0.5점 점수 제한최대 50점최대 20점최대 10점최대 20점 최대 5점1-2. 기존 방식의 문제점문제점1. 실시간성 불가.2. 추천 친구 테이블을 1시간마다 제거하는 비용.3. 배치를 최적화 시키기 위한 복잡한 조건.4. 만든사람도 알아보기 힘든 스파게티 코드.1. 실시간의 부재가장 심각한건 실시간의 부재입..

Redis를 활용한 게시판 캐싱 전략

커뮤니티 게시판의 인기글 목록 조회 시 다음과 같은 비효율적인 부분이 있었습니다. 1. 반복적인 DB 조회 부담 : 자주 조회되는 실시간/주간/레전드 인기글 목록을 DB에서 조회하여 응답 시간이 증가했습니다. 2. 실시간 인기도 반영의 어려움: RDB만으로 글의 인기도를 실시간으로 반영하려면 요청마다 복잡한 인기글 재선정 로직이 필요했습니다. 따라서 자주 조회되는 요청은 캐싱을 하여 DB의 부담을 낮추고자 했습니다. 캐싱 요구 사항 1. TTL이 만료되어도 집계 쿼리가 재실행되면 안됩니다. 2. 실시간 인기글은 사용자 활동(조회, 댓글, 추천)에 따라 동적으로 변화합니다. 3. 글이 삭제되거나 수정되었을 때 사용자는 이전 버전의 글을 보면 안됩니다. 4. 자주 조회되고 변하지 않는 인기 게시글 목록은 통..

개발 2025.11.19

Redis 캐시 스탬피드 방어: 분산락의 성능 하락 원인 식별과 REP 전략 도입

글 수정 예정이 글의 원인과 결과 및 분석은 잘못되었습니다 조만간 수정할 예정입니다.서론https://jaeiktech.tistory.com/79 의 3번 분산락 부분에서 나타난 성능저하를 분석하는 글 입니다. 캐시 스탬피드를 발견하고 많은 스레드가 DB를 동시 접근 하는 것을 방지하기 위해 다양한 방식의 해결법을 적용하던 과정에서 분산락을 적용했을 때 심각한 성능저하가 나타나는 것을 발견했습니다. 락 대기와 동시성으로 인한 어느정도의 TPS와 Lantency의 하락은 예상했으나 너무 큰 폭으로 감소하였습니다.요약캐시최대 TPS평균 TPS평균 Latancy레디스 메모리커넥션 획득 시간비고캐시 적용59438468ms4.2MB최대 125ms스탬피드 발생분산락 적용345273322ms2.5MB최대 2.5ms응..

Redis TTL 만료 시점 병목 해소: Cache Stampede 방어 전략 측정 및 분석

스탬피드 현상의 측정과 방어 이전에 캐시 다이어그램을 보여드리겠습니다.아래 사진은 제 기존 캐시 설계입니다. 빠른 복구를 위해 Tier2로 설계했습니다.아래 사진은 캐시 전략입니다.아래 사진은 전체 캐시 흐름도 입니다. 캐시 스탬피드의 방법들에 대해 측정했습니다.10분간 부하테스트를 실시했습니다.글 상세 조회 30%주간 인기글 상세 조회 14%레전드 인기글 상세 조회 10%실시간 인기글 목록 조회 20%주간 인기글 목록 조회 14%레전드 인기글 목록 조회 12%로 구성했습니다.테스트 시작후 8분까지 선형적으로 램프업 해나가며 마지막 2분은 최대 부하를 유지했습니다.최대 부하는 사용자 300명이 0.4초에 한 번씩 요청을 보냅니다.커넥션 풀은 30으로 고정하였습니다.캐시최대 TPS평균 TPS평균 Lata..

Redis를 활용한 게시판 캐싱

커뮤니티 게시판의 인기글 목록 조회 시 다음과 같은 비효율적인 부분이 있었습니다.1. 반복적인 DB 조회 부담 : 자주 조회되는 실시간/주간/레전드 인기글 목록을 DB에서 조회하여 응답 시간이 증가했습니다.2. 실시간 인기도 반영의 어려움: RDB만으로 글의 인기도를 실시간으로 반영하려면 요청마다 복잡한 인기글 재선정 로직이 필요했습니다.따라서 자주 조회되는 요청은 캐싱을 하여 DB의 부담을 낮추고자 했습니다. 캐싱 요구 사항TTL이 만료되어도 집계 쿼리가 재실행되면 안됩니다.실시간 인기글은 사용자 활동(조회, 댓글, 추천)에 따라 동적으로 변화합니다.글이 삭제되거나 수정되었을 때 사용자는 이전 버전의 글을 보면 안됩니다.자주 조회되고 변하지 않는 인기 게시글 목록은 통째로 캐싱하여 반환해야 합니다.캐시..

개발 2025.11.02