본문 바로가기
SA/Architecting

캐싱 전략

by okms1017 2024. 11. 8.
728x90

✍ Posted by Immersive Builder  Seong

 

캐시(Cache)

캐시는 연산 결과 또는 자주 참조하는 데이터를 메모리에 복사하여 이후 요청을 빠르게 처리하는 저장소입니다. 사용자가 브라우저를 통해 웹 페이지에 접근할 때마다 웹 서버는 데이터베이스로부터 필요한 데이터를 가져와 화면에 표시합니다. 어플리케이션의 성능은 데이터베이스를 얼마나 자주 호출하느냐에 따라 달라집니다. 웹 서버와 데이터베이스 사이에 캐시 계층을 구성함으로써 원본 데이터베이스 서버를 호출하는 빈도수를 줄이고 성능을 개선할 수 있습니다.  

 

캐싱 전략(Caching Strategy)

캐시의 사용 빈도, 데이터 접근 패턴, 일관성 등 각기 요구사항에 따라 여러가지 캐싱 전략을 구상할 수 있습니다. 대표적인 캐싱 전략으로는 Cache-Aside, Read-Through, Write-Through, Write-Behind, Write-Around 등이 있습니다. 

 

Cache-Aside (Lazy-Loading)

Cache-Aside 캐싱은 캐시를 먼저 조회하고 캐시에 데이터가 없으면 데이터베이스를 조회하는 전략입니다. 가장 일반적으로 사용하는 캐싱 전략입니다. 

 

  1. 요청이 들어오면 어플리케이션이 먼저 캐시에 데이터가 있는지 조회합니다. 
  2. 캐시에 데이터가 존재하면 바로 데이터를 반환합니다. 
  3. 캐시에 데이터가 존재하지 않으면 어플리케이션에서 데이터베이스를 호출하여 해당 데이터를 가져옵니다.
  4. 데이터를 캐시에 저장하고 사용자에게 반홥합니다. 

 

요청한 데이터만 캐시에 저장하므로 자원을 효율적으로 사용할 수 있습니다. 반면, 처음 요청한 데이터는 원본 데이터베이스로 접근하는 시간이 약간 소요될 수 있습니다.  

 

Read-Through

Read-Through 캐싱은 Cache-Aside와 동작 방식이 유사하나, 캐시를 주 데이터 소스로 사용하는 전략입니다. 두 캐싱 전략의 차이점은 데이터 동기화의 주체가 다르다는 것입니다. Cache-Aside 캐싱은 어플리케이션이 데이터 동기화를 처리하고, Read-Through 캐싱은 별도의 캐시 계층이 데이터 동기화를 처리합니다. 

 

  1. 요청이 들어오면 먼저 캐시에 데이터가 있는지 조회합니다.
  2. 캐시에 데이터가 존재하면 바로 데이터를 반환합니다. 
  3. 캐시에 데이터가 존재하지 않으면 캐시 계층에서 데이터베이스를 호출하여 해당 데이터를 가져옵니다. 
  4. 데이터를 캐시에 저장하고 어플리케이션으로 반환합니다. 

 

이 전략은 데이터베이스가 느리거나 데이터를 자주 읽어오지만 갱신이 거의 없는 경우에 적합합니다. 

 

Write-Through

Write-Through 캐싱은 캐시와 데이터베이스에 데이터 쓰기 연산을 동시에 처리하는 전략입니다. 

 

  1. 데이터가 갱신될 때 캐시에 저장됩니다. 
  2. 동시에 데이터베이스에도 갱신 데이터가 저장됩니다. 

 

캐시에는 항상 최신의 데이터가 저장됩니다. 그리고 캐시와 데이터베이스 간에 데이터 일관성이 보장되므로 캐시가 만료되어도 데이터가 손실되지 않습니다. 이 전략은 은행 또는 결제 시스템과 같이 데이터 일관성이 중요한 경우에 적합합니다. 

 

Write-Behind (Write-Back)

Write-Behind 캐싱은 캐시에서 데이터 쓰기 연산을 처리하고, 이후 일정 주기마다 데이터베이스에 동기화하는 전략입니다. 

 

  1. 캐시에서 쓰기 작업을 처리하고 저장합니다. 
  2. 이후 데이터베이스에 데이터를 동기화합니다. 

 

쓰기 연산이 캐시에서 이루어지므로 성능이 빠르고 캐시에 집중된 처리가 가능합니다. 그러나 캐시가 비정상적으로 종료되면 데이터가 유실될 가능성이 있습니다. 이 전략은 쓰기 연산이 많이 이루어지고, 데이터 일관성보다 성능을 중요시하는 경우에 적합합니다. 

 

Write-Around

Write-Around 캐싱은 쓰기 연산에 대해 캐시를 우회하여 데이터베이스에만 저장하는 전략입니다. 캐시는 주로 읽기 연산을 처리하는데 사용됩니다. 마찬가지로 읽기 요청은 캐시에 데이터가 없으면 데이터베이스에서 가져와 캐시에 저장하는 방식으로 동작합니다.  

 

캐시의 자원을 읽기 연산에 최적화할 수 있으나 데이터의 갱신이 빈번한 경우 최신 데이터가 존재하지 않아 지연이 발생할 수 있습니다. 이 전략은 쓰기 연산이 대량으로 발생하는 경우에 적합합니다. 

 

728x90

'SA > Architecting' 카테고리의 다른 글

지리적 라우팅 설계  (0) 2024.11.15
확장성을 고려한 데이터베이스 설계 방안  (2) 2024.11.11
메시지 큐  (0) 2024.11.10
콘텐츠 전송 네트워크 설계  (1) 2024.11.09
확장성을 고려한 시스템 설계 방안  (0) 2024.11.07