Youtube 강의를 시청하고 정리하였습니다.

redis란?

  • In-memory data structure store.
  • 인 메모리 데이터 저장소이다. 즉 데이터를 메모리에 저장한다.
    • Memory: 임시 저장소(휘발성), 빠른 속도, 적은 용량
    • Storage: 장기 저장소(비휘발성), 느린 속도, 많은 용량
    • 따라서 외부 DB나 스토리지와 비교할 때 훨씬 빠른 속도로 데이터를 가져올 수 있다.
  • 용도
    • Cache
      • 서버의 성능을 향상시키기 위해 사용되는 메모리
      • 앞으로 필요할 것이라 예상되는 데이터를 미리 가지고 있다가 빠르게 제공하는 것.
      • 서버가 클라이언트에 전달해주는 정적인 리소스들을 복사하여 미리 저장해놓는다. (Cache miss)
      • 그 후 클라이언트가 특정 리소스를 요청할 때 캐시에 저장된 리소스를 빠르게 반환한다.(Cache hit)
    • DB
    • Message Broker

정말 많은 캐싱 전략이 있지만, 이 글에선 local cache에 대해 다룬다.

 

Local Cache

  • Local Cache는 서버마다 캐시를 따로 저장하여 다른 서버의 캐시를 참조하기 어려운 형태의 캐시다.
  • 메모리에 저장되기 때문에 속도가 매우 빠르고 설치 및 설정이 간편하다.

 

캐싱 전략

  • Read-Through (Lazy-Loading)
    • 클라이언트로부터 데이터 요청이 들어오면, 서버는 캐시에 데이터가 존재하는지 확인한다.
    • 캐시에 데이터가 없다면(Cache Miss) 서버는 DB를 조회하여 필요한 데이터를 얻은 후 캐시에 저장하고 클라이언트에 응답한다.
    • 캐시에 데이터가 존재한다면 캐시에서 데이터를 바로 반환한다. (Cache Hit)
    • 데이터가 자주 변하지 않는 경우에 활용된다.
  • Write-Through
    • 데이터를 데이터베이스에 작성할 때마다 캐시에 데이터를 추가하거나 업데이트하는 전략이다.
    • 데이터가 자주 변하는 경우에 활용된다.
  • Cache-Aside
    • 어플리케이션이 캐시를 옆에 따로 두고 필요할 때만 데이터를 캐시에 로드하는 전략이다.
  • Write-Back(Behind)
    • 데이터를 먼저 캐시에 쓴 다음 비동기식으로 데이터를 데이터 저장소에 업데이트하여 쓰기 성능을 향상시키는 전략이다.

 

캐시 활용 케이스

  • 복잡하고 오래 걸리는 쿼리
    • 길고 복잡한 Aggregation Pipeline
  • 지연되는 DB 연결 시간
    • 네트워크 상황에 따라 연결 시간 지연 (예: 해외에 저장소가 존재할 때)

Postman 등을 활용하여 응답 소요 시간 체크해보자.

 

캐시 활용 사례

  • Read-through 활용 전략 (응답 지연 시간이 길고, 요청하는 정보가 자주 변하지 않는 페이지 로딩)
    • 최초 요청 시 cache가 비어있기 때문에 DB로부터 필요한 데이터를 추출해서 cache에 저장한다.
    • 두 번째 요청부터는 캐시에서 바로 응답이 가도록 한다.
    • 캐싱 유효 시간을 두어 주기적으로 데이터가 캐시에 업데이트 될 수 있도록 설정할 수 있다.
  • Read-through + Write-through 활용 전략 (응답 지연 시간이 길고, 요청하는 정보가 자주 변하는 페이지 로딩)
    • Read-through 전략을 통해 캐싱할 모든 데이터를 캐시에 저장해둔다.
    • 일부가 변경될 때마다 Write-through 전략을 통해 수정한다.
    • 이로써 캐시 데이터를 늘 최신 상태로 유지하고 메모리가 유실되더라도 DB를 통해 복구가 가능해진다.
    • Sync + Async
      • 데이터를 쓰는 속도가 빠른 캐시에는 동기적으로 write
      • 데이터를 쓰는 속도가 느린 DB에는 비동기적으로 write (캐시에 데이터가 존재하고 클라이언트는 캐시로부터 데이터를 먼저 찾아가기 때문에 DB에 데이터를 쓰는 작업은 비동기적으로 처리해도 큰 문제가 없다.)

 

캐싱 전략을 도입할 때 주의해야할 사항들

  • 시간과 비용을 점검하자.
    • 캐싱에 드는 시간과 비용
    • DB 쿼리에 드는 시간과 비용
  • 캐싱 솔루션 선택
    • Redis, Memcached..
  • 구체적인 설계의 중요성
    • 캐싱을 적절하게 적용하기 위해 전체적인 캐싱 흐름과 로직을 완벽하게 이해하는 것이 중요하다.

'Backend > 📬Server' 카테고리의 다른 글

[Server] Elasticsearch 개념 이해  (0) 2021.11.28
[Server] Websocket과 Stomp  (0) 2021.11.26
[Server] CORS란?  (0) 2021.11.25
[Server] OAuth와 JWT 도입하기  (0) 2021.11.24
[Server] RESTful API  (0) 2021.11.23
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기