목록2025/07/13 (4)
che01 님의 블로그
문제 상황실시간 검색어 수집 시스템을 구현하면서 다음과 같은 비동기 처리 플로우가 필요했다:Redis ZSet에서 검색어 점수 증가 (zincrby)전체 검색어 랭킹 조회 (zrevrangeWithScores)결과를 Map 형태로 변환DB에 저장 및 캐시 초기화Spring의 RedisTemplate은 동기 API만 제공하여 비동기/논블로킹 처리가 불가능했다.해결책: Lettuce RedisAsyncCommandsRedisTemplate vs RedisAsyncCommands 비교특징 RedisTemplate RedisAsyncCommands처리 방식동기 (Blocking)비동기 (Non-blocking)반환 타입직접 결과CompletableFuture성능스레드 블로킹높은 처리량콜백 체이닝불가능thenAp..

개요Spring Boot 애플리케이션에서 Redis Sorted Set을 활용하여 실시간 검색어 수집 및 인기 검색어 관리 시스템을 구현했다. 학습을 위해 AOP로 구현했지만 보통 검색어 수집은 이런 방식으로 구현하지 않는다 횡단 관심사가 일단 아니기 때문이고 요청을 가로체는 부분은 비동기 처리가 안돼기 때문에 검색 성능에 영향을 준다.시스템 아키텍처핵심 구성 요소AOP 기반 검색어 수집: @CollectSearchKeyword 어노테이션으로 자동 수집Redis Sorted Set: 실시간 검색어 카운팅 및 랭킹 관리비동기 처리: 사용자 응답 시간에 영향 없는 백그라운드 처리배치 동기화: 주기적으로 Redis 데이터를 DB에 영속화프로세스 상세 흐름기술적 특징Redis Sorted Set 활용ZINCRB..
개요Redis Java 클라이언트 라이브러리인 Lettuce와 Jedis의 주요 차이점과 특징을 비교 분석기본 특징Lettuce비동기, 논블로킹 I/O 기반Netty 프레임워크 사용Spring Boot 2.0부터 기본 Redis 클라이언트로 채택반응형 프로그래밍 지원 (Reactive Streams)Jedis동기, 블로킹 I/O 기반직접적인 소켓 연결 사용오랜 기간 사용되어온 안정적인 라이브러리단순하고 직관적인 API성능 비교연결 관리Lettuce: 단일 연결을 여러 스레드가 공유 가능. 연결 풀링이 선택사항 Jedis: 스레드 안전하지 않아 연결 풀링 필수. 각 스레드마다 별도 연결 필요처리량Lettuce: 높은 동시성 처리 가능. 단일 연결로도 높은 성능 Jedis: 연결 풀 크기에 따라 성능 결정...
@EnableScheduling 애너테이션의 역할@EnableScheduling을 설정 클래스에 추가하면 Spring은 내부적으로 스케줄링 관련 인프라를 자동으로 구성한다.@SpringBootApplication@EnableSchedulingpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}내부 동작 메커니즘1. ScheduledExecutorService 등록Spring은 @EnableScheduling이 활성화되면 ScheduledExecutorService를 빈으로 등록한다. 기본적으로 단일 스레드 풀을 사용하는 Th..