나만의 개발 로그 | 고민 로그
Redis를 활용한 Cache 기능으로 조회 성능 개선 본문
1. 서론
만약 사용자 수가 증가한다면 가장 먼저 느껴지는 건 DB 부하이다.
특히 자주 호출되는 "전체 유저 조회" API의 경우, 매번 DB에서 데이터를 읽어오게 되면 불필요한 쿼리 호출로 인해 성능 저하로 이어질 수 있다. 이를 해결하기 위해, Redis 캐시(Cache) 기능을 도입하여 성능을 개선했다.
2. 왜 캐시가 필요한가?
기존에는 전체 유저 조회 요청이 들어올 때마다 RDB에서 직접 데이터를 가져왔다. 따라서 만약 사용자 수가 늘어난다면 아래와 같은 문제가 발생할 것이라 생각했다.
- 전체 조회 쿼리가 자주 호출되어 DB에 부담이 큼
- 동일한 결과를 반복적으로 가져오면서 중복 비용이 발생
- 응답 속도도 상대적으로 느려짐
3. 캐시 도입 전략
- Redis를 캐시 저장소로 사용
- Redis는 인메모리 기반 NoSQL이라서 조회 속도가 매우 빠름
- 자주 변경되지 않는 전체 유저 목록을 Redis에 캐싱하여 성능을 높임
- 최초 요청 시에는 DB에서 데이터를 조회하여 Redis에 저장
- 이후 동일 요청이 오면 Redis에서 바로 응답

4. 데이터 변경 시 캐시 무효화
- 유저 정보가 추가, 수정, 삭제될 경우에는 Redis에 저장된 캐시도 함께 갱신해줘야 한다. 이를 위해 변경이 이루어지는 부분은 @CacheEvict 애노테이션을 사용했다.
5. 성능 개선 효과
- 개선 전: 32ms
- 개선 후: 16ms
쿼리가 직접 날아가지 않기 때문에, 약 2배 이상의 성능 개선이 체감됐다. 특히 대량의 유저 데이터가 쌓이거나, 요청 수가 급증하는 상황에서는 훨씬 큰 차이를 만들어낼 것이라 생각된다.
'웹 개발' 카테고리의 다른 글
| Web Crawling 및 OpenSearch 사용기 (0) | 2023.07.02 |
|---|---|
| 체크 예외, 언체크 예외 (0) | 2023.05.27 |
| AOP 활용하여 컨트롤러 메소드 실행시간 측정 (1) | 2023.04.14 |
| Redis를 활용한 AccessToken BlackList 저장(로그아웃 기능) (1) | 2023.04.13 |
| JPA 기본 (0) | 2023.04.06 |
Comments