✅ 캐시(Cache)란?
원본 저장소보다 빠르게 가져올 수 있는 임시 데이터 저장소를 의미한다.

✅ 캐싱(Caching)이란?
캐시(Cache, 임시 데이터 저장소)에 접근해서 데이터를 빠르게 가져오는 방식을 의미한다.
데이터를 캐싱할 때 사용하는 전략
✅ Cache Aside (= Look Aside, Lazy Loading) 전략
처음 게시판 서비스를 배포했다고 가정하자.
- 처음 게시판 서비스를 배포했기 때문에 데이터베이스와 레디스에는 아무런 데이터도 저장이 되어있지 않다.
- 일부 사용자가 들어와 게시글 작성을 함으로써 데이터를 저장한다. 이 데이터는 데이터베이스에 저장된다. (레디스에 저장되지 않는다.)
- 사용자가 데이터를 조회하려고 요청한다. 이 때, 데이터베이스로부터 바로 데이터를 조회하기 전에 레디스에 있는 지 먼저 확인한다.
- 레디스에 데이터가 없는 걸 확인한 뒤에 데이터베이스로부터 데이터를 조회해서 응답한다.
- 데이터베이스로부터 조회한 데이터를 응답한 뒤에 레디스에도 데이터를 저장해둔다.
- 다시한 번 사용자가 데이터를 조회하려고 요청한다.
- 레디스에 조회하고자 하는 데이터가 있는지 확인했더니, 데이터가 존재해서 레디스로부터 바로 데이터를 가져온다.
1. 캐시에 데이터가 있을 경우 (= Cache Hit)

2. 캐시에 데이터가 없을 경우 (= Cache Miss)

Cache Aside 전략은 캐시(Cache)에서 데이터를 확인하고, 없다면 DB를 통해 조회해오는 방식이다.
✅ Write Around 전략

데이터를 저장할 때는 레디스에 저장하지 않고 데이터베이스에만 저장하는 방식이다.
Write Around 전략은 쓰기 작업(저장, 수정, 삭제)을 캐시에는 반영하지 않고, DB에만 반영하는 방식을 뜻한다.
✅ Cache Aside, Write Around 전략의 한계점
1. 캐시된 데이터와 DB 데이터가 일치하지 않을 수 있다.
Cache Aside와 Write Around 전략을 같이 썼을 때의 한계점 중 하나는 캐시된 데이터와 DB 데이터가 일치하지 않을 수 있다는 점이다. 즉, 데이터의 일관성을 보장할 수 없다는 뜻이다.
Write Around 전략에 따르면 데이터를 수정할 때 DB만 업데이트를 시키기 때문에 기존에 저장된 레디스의 데이터 값과 DB의 데이터 값은 다를 수 밖에 없다.
2. 캐시에 저장할 수 있는 공간이 비교적 작다.
DB는 디스크(Disk)에 저장해서 많은 양을 저장하기 용이하지만, 캐시는 메모리(RAM)에 저장하기 때문에 DB에 비해 많은 양의 데이터를 저장할 수가 없다.
✅ 이 한계를 어떻게 극복할까?
1. 캐시된 데이터와 DB 데이터가 일치하지 않을 수 있다.
캐시와 DB의 데이터를 일치시키기 위해, 데이터를 수정할 때마다 동시에 업데이트 시키는 것은 성능적으로 효율이 떨어진다. 그렇다고 성능 향상을 위해 DB의 데이터만 업데이트 시키면 캐시와 DB의 데이터가 일치하지 않게 된다.
-> 데이터 조회 성능 개선 목적으로 레디스를 쓰는 경우에는 데이터의 일관성을 포기하고 성능 향상을 택한 것이다.
이러한 이유로 인해 캐시를 적용시키기에 적절한 데이터는 다음과 같다.
- 자주 조회되는 데이터
- 잘 변하지 않는 데이터
- 실시간으로 정확하게 일치하지 않아도 되는 데이터
하지만 장기간 데이터가 일치하지 않는 건 문제가 될 수 있다. 따라서 적절한 주기로 데이터를 동기화시켜주어야 한다. 이 때 활용하는 기능이 레디스의 TTL 기능(만료 시간 설정 기능)이다.
일정 시간이 지나면 데이터가 캐시에서 삭제된다. 그럼 특정 사용자가 조회를 하는 순간 Cache Miss가 발생한다. DB의 데이터를 새로 조회해와서 캐시에 데이터를 넣게 된다. 즉, 데이터가 새롭게 갱신되는 효과가 있는 것이다.
2. 캐시에 저장할 수 있는 공간이 비교적 작다.
위에서 활용했던 TTL 기능(만료 시간 설정 기능)을 활용하면 캐시의 공간을 효율적으로 쓸 수 있다.
왜냐면 자주 조회하지 않는 데이터는 만료 시간에 의해 데이터가 삭제되기 때문이다.
✅ 데이터 조회 성능을 개선하는 방법
- SQL 튜닝
- 캐싱 서버 활용 (Redis 등)
- 레플리케이션 (Master/Slave 구조)
- 샤딩
- DB 스케일업 (CPU, Memory, SSD 등 하드웨어 업그레이드)
✅ 많은 성능 개선 방법 중 ‘SQL 튜닝’을 왜 먼저 고려해야 할까?
- SQL 튜닝을 제외한 나머지 방법은 추가적인 시스템을 구축해야 한다. 따라서 금전적, 시간적 비용이 추가적으로 발생한다. 조금 더 복잡해진 시스템 구조로 인해 관리 비용이 늘어난다. 그에 비해 SQL 튜닝은 기존의 시스템 변경 없이 성능을 개선할 수 있다.
- 근본적인 문제를 해결하는 방법이 SQL 튜닝일 가능성이 높다. SQL 자체가 비효율적으로 작성됐다면 아무리 시스템적으로 성능을 개선한다고 하더라도 한계가 있다. 하지만 SQL 튜닝을 통해 기본적으로 성능을 향상시킨다면, 시스템적인 성능 개선이 필요없거나 훨씬 간단한 개선으로 큰 성능 개선 효과를 얻을 수 있다.
'🏛️Infra > Redis' 카테고리의 다른 글
부하 테스트를 통해 Redis 적용 전후 성능 비교 (0) | 2025.03.16 |
---|---|
AWS EC2에서 Redis 활용 (0) | 2025.03.15 |
스프링부트 프로젝트에 적용해보기 (0) | 2025.03.15 |
Redis (0) | 2025.03.12 |
✅ 캐시(Cache)란?
원본 저장소보다 빠르게 가져올 수 있는 임시 데이터 저장소를 의미한다.

✅ 캐싱(Caching)이란?
캐시(Cache, 임시 데이터 저장소)에 접근해서 데이터를 빠르게 가져오는 방식을 의미한다.
데이터를 캐싱할 때 사용하는 전략
✅ Cache Aside (= Look Aside, Lazy Loading) 전략
처음 게시판 서비스를 배포했다고 가정하자.
- 처음 게시판 서비스를 배포했기 때문에 데이터베이스와 레디스에는 아무런 데이터도 저장이 되어있지 않다.
- 일부 사용자가 들어와 게시글 작성을 함으로써 데이터를 저장한다. 이 데이터는 데이터베이스에 저장된다. (레디스에 저장되지 않는다.)
- 사용자가 데이터를 조회하려고 요청한다. 이 때, 데이터베이스로부터 바로 데이터를 조회하기 전에 레디스에 있는 지 먼저 확인한다.
- 레디스에 데이터가 없는 걸 확인한 뒤에 데이터베이스로부터 데이터를 조회해서 응답한다.
- 데이터베이스로부터 조회한 데이터를 응답한 뒤에 레디스에도 데이터를 저장해둔다.
- 다시한 번 사용자가 데이터를 조회하려고 요청한다.
- 레디스에 조회하고자 하는 데이터가 있는지 확인했더니, 데이터가 존재해서 레디스로부터 바로 데이터를 가져온다.
1. 캐시에 데이터가 있을 경우 (= Cache Hit)

2. 캐시에 데이터가 없을 경우 (= Cache Miss)

Cache Aside 전략은 캐시(Cache)에서 데이터를 확인하고, 없다면 DB를 통해 조회해오는 방식이다.
✅ Write Around 전략

데이터를 저장할 때는 레디스에 저장하지 않고 데이터베이스에만 저장하는 방식이다.
Write Around 전략은 쓰기 작업(저장, 수정, 삭제)을 캐시에는 반영하지 않고, DB에만 반영하는 방식을 뜻한다.
✅ Cache Aside, Write Around 전략의 한계점
1. 캐시된 데이터와 DB 데이터가 일치하지 않을 수 있다.
Cache Aside와 Write Around 전략을 같이 썼을 때의 한계점 중 하나는 캐시된 데이터와 DB 데이터가 일치하지 않을 수 있다는 점이다. 즉, 데이터의 일관성을 보장할 수 없다는 뜻이다.
Write Around 전략에 따르면 데이터를 수정할 때 DB만 업데이트를 시키기 때문에 기존에 저장된 레디스의 데이터 값과 DB의 데이터 값은 다를 수 밖에 없다.
2. 캐시에 저장할 수 있는 공간이 비교적 작다.
DB는 디스크(Disk)에 저장해서 많은 양을 저장하기 용이하지만, 캐시는 메모리(RAM)에 저장하기 때문에 DB에 비해 많은 양의 데이터를 저장할 수가 없다.
✅ 이 한계를 어떻게 극복할까?
1. 캐시된 데이터와 DB 데이터가 일치하지 않을 수 있다.
캐시와 DB의 데이터를 일치시키기 위해, 데이터를 수정할 때마다 동시에 업데이트 시키는 것은 성능적으로 효율이 떨어진다. 그렇다고 성능 향상을 위해 DB의 데이터만 업데이트 시키면 캐시와 DB의 데이터가 일치하지 않게 된다.
-> 데이터 조회 성능 개선 목적으로 레디스를 쓰는 경우에는 데이터의 일관성을 포기하고 성능 향상을 택한 것이다.
이러한 이유로 인해 캐시를 적용시키기에 적절한 데이터는 다음과 같다.
- 자주 조회되는 데이터
- 잘 변하지 않는 데이터
- 실시간으로 정확하게 일치하지 않아도 되는 데이터
하지만 장기간 데이터가 일치하지 않는 건 문제가 될 수 있다. 따라서 적절한 주기로 데이터를 동기화시켜주어야 한다. 이 때 활용하는 기능이 레디스의 TTL 기능(만료 시간 설정 기능)이다.
일정 시간이 지나면 데이터가 캐시에서 삭제된다. 그럼 특정 사용자가 조회를 하는 순간 Cache Miss가 발생한다. DB의 데이터를 새로 조회해와서 캐시에 데이터를 넣게 된다. 즉, 데이터가 새롭게 갱신되는 효과가 있는 것이다.
2. 캐시에 저장할 수 있는 공간이 비교적 작다.
위에서 활용했던 TTL 기능(만료 시간 설정 기능)을 활용하면 캐시의 공간을 효율적으로 쓸 수 있다.
왜냐면 자주 조회하지 않는 데이터는 만료 시간에 의해 데이터가 삭제되기 때문이다.
✅ 데이터 조회 성능을 개선하는 방법
- SQL 튜닝
- 캐싱 서버 활용 (Redis 등)
- 레플리케이션 (Master/Slave 구조)
- 샤딩
- DB 스케일업 (CPU, Memory, SSD 등 하드웨어 업그레이드)
✅ 많은 성능 개선 방법 중 ‘SQL 튜닝’을 왜 먼저 고려해야 할까?
- SQL 튜닝을 제외한 나머지 방법은 추가적인 시스템을 구축해야 한다. 따라서 금전적, 시간적 비용이 추가적으로 발생한다. 조금 더 복잡해진 시스템 구조로 인해 관리 비용이 늘어난다. 그에 비해 SQL 튜닝은 기존의 시스템 변경 없이 성능을 개선할 수 있다.
- 근본적인 문제를 해결하는 방법이 SQL 튜닝일 가능성이 높다. SQL 자체가 비효율적으로 작성됐다면 아무리 시스템적으로 성능을 개선한다고 하더라도 한계가 있다. 하지만 SQL 튜닝을 통해 기본적으로 성능을 향상시킨다면, 시스템적인 성능 개선이 필요없거나 훨씬 간단한 개선으로 큰 성능 개선 효과를 얻을 수 있다.
'🏛️Infra > Redis' 카테고리의 다른 글
부하 테스트를 통해 Redis 적용 전후 성능 비교 (0) | 2025.03.16 |
---|---|
AWS EC2에서 Redis 활용 (0) | 2025.03.15 |
스프링부트 프로젝트에 적용해보기 (0) | 2025.03.15 |
Redis (0) | 2025.03.12 |