
1. 서론서비스에서 자주 조회되는 인기글 API의 응답 속도를 개선하고자, Spring Boot에서 제공하는 @Cacheable 어노테이션을 활용해 캐시를 빠르게 붙였습니다. 간단하게 붙이고 성능도 챙기자는 의도였고, 처음에는 실제로 응답 속도도 빨라지고, 서버 부담도 줄어드는 듯 보였습니다. 하지만 운영을 지속하면서 이상한 지점을 발견했습니다. JVM Heap 사용량이 점점 누적되는데도, Full GC 이후에도 메모리 사용량이 줄지 않는 현상이 반복되었고, 같은 시점에 TPS가 급격히 하락하고 응답 지연이 늘어나는 문제도 함께 나타났습니다. 처음에는 일시적인 부하인가 싶었지만, Scouter로 수치를 확인하고 나니 이건 단순한 GC 문제만은 아니구나를 생각했습니다. 관련해서 어떤 점 때문에 메모리..

1. 서론인기글 API의 성능 문제를 해결하기 위해, 먼저 쿼리 구조를 개선하고 적절한 인덱스를 적용하여 DB 부하를 줄이고 응답 속도를 개선했습니다. 하지만, 사용자 접근 빈도가 높은 인기글 페이지의 특성상, 여전히 반복적인 조회에 의한 DB 접근 비용이 부담으로 남아있었습니다.이번 글에서는 이를 해결하기 위해 적용한 캐싱 전략에 대해 다뤄보겠습니다. 캐싱이란 무엇인지, 왜 Redis를 선택했는지, 그리고 실제 적용 방식을 함께 살펴보겠습니다. 2. 데이터베이스는 왜 느릴까 우선 데이터 베이스의 종류를 간단히 살펴보면, [RDB 특정] - 안정성HDD 혹은 SSD같은 보조기억 장치에 데이터를 저장행과 열 구조의 정형 데이터 저장(엑셀처럼 생각하면 쉬움)SQL 언어로 데이터 조회 및 관리테이블 간 관계를..
- 연관관계
- 비동기
- 메일
- 엔티티 매니저
- onetoone
- N + 1
- 인메모리 db
- 스키마 자동 생성
- 조인 전략
- JPA
- 준영속
- @OneToMany
- @Table
- 변경감지
- @TransactionalEventListener
- 즉시 로딩
- @Id
- 단일 테이블 전략
- mappedBy
- @joincolumn
- 비영속
- @GeneratedValue
- @Entity
- @ManyToOne
- @Cacheable
- 최적화
- @MappedSuperclass
- 1차 캐시
- Redis
- 영속성 컨텍스트