✅ String 자료 구조의 SETNX # key, value 구조로 데이터 저장하기 $ SET hobby soccer # key로 value 조회하기 $ GET hobby # 기존에 hobby라는 key가 존재하더라도, 해당 key에 value를
Spring Boot에는 spring-session-data-redis라는 라이브러리가 있어서 Redis로 세션 스토리지를 쉽게 구축할 수 있다. 이 라이브러리를 활용해서 세션 스토리지를 구축해보자. ✅ 실습 의존성 추가하기 application.ym
✅ 문제 상황 서비스를 운영하다보면 하루 동안 서비스에 방문한 사용자 수(DAU, Daily Active Users)를 파악해야 할 때가 많다. 그런데 하루 방문자 수를 카운팅하고 조회할 때마다 RDB(ex. MySQL)로 처리하면 트래픽이 많아질수록
✅ 인기 검색어 기능 구현 실제 서비스를 구현하다보면 특정 기준으로 순위별 데이터를 보여줘야 하는 경우가 많다. 예를 들어, 인기 게시글이라던지, 인기 검색어라던지, 인기순으로 영화 데이터를 보여줘야 된다던지, 상품을 판매순으로 보여줘야 되는 것들이
✅ 문제 원인 누군가 좋아요를 한 번 누를 때마다 DB에 계속해서 요청을 보낸다. 만약 1000명의 사용자가 글을 보고 좋아요를 누르면 1000번의 DB 쓰기 작업을 해야 한다. DB 부하의 원인은 크게 2가지이다. 한 번의 요청이 일어날 때마다 매번
✅ Sorted Set (ZSet) Redis에서 Sorted Set(ZSet)은 score(점수)를 기준으로 자동 정렬되는 중복 없는 자료구조이다. 이런 특성 때문에 실제 서비스에서 랭킹 시스템, 실시간 인기 데이터 관리처럼 순서와 가중치가 중요한
✅ 문제 상황 클론 받은 프로젝트의 API에는 요청 횟수에 대한 제한(Rate Limit)이 전혀 걸려있지 않다. 이 상태에서는 특정 사용자가 악의적으로 아주 짧은 시간 안에 수십, 수백 번의 요청을 보내면 서버 부하가 급격히 증가할 수 있다. 따라서
이번 강의에서는 Redis로 Lock을 구현해 동시성 이슈를 해결해보자. ✅ 문제 해결 코드 작성하기 서버 실행시키기 테스트를 위해 DB에 데이터 넣어주기 부하 테스트 스크립트 살펴보기 부하테스트 진행하기
이번에는 검색 API와 인기 검색어 조회 API를 Redis를 활용해 구현해보자. ✅ 구현 방법 인기 검색어 조회 API에서는 인기순으로 검색어를 정렬해야 하기 때문에, 자동 정렬을 해주는 자료구조인 Sorted Set을 활용한다. 검색을 할 때마다
✅ 세션(Session) 서비스에서 로그인 기능을 구현할 때 크게 2가지 방식으로 구현한다. JWT 방식과 세션(Session) 방식이 있다. 그 중에서 세션 방식은 다음과 같은 흐름으로 동작한다. 사용자가 ID / 비밀번호로 로그인 요청 서버는 인증