Cache를 활용한 성능 개선

이한울·2020년 9월 4일
0

BackEnd

목록 보기
3/3

Cache

  캐시는 컴퓨터사이언스, 특히 OS나 시스템 관련 과목에서 매우 자주 등장하는 개념이다. 캐시를 사용하는 것, 즉 캐싱이란 간단히 말해 요청 결과를 미리 저장해 둠으로써 바르게 보여주는 것이다.
  웹 서버 역시 캐싱을 통해 성능을 개선할 수 있다. 캐시는 저장하는 방식에 따라 크게 두 가지 방식으로 나눌 수 있다.

  • Look aside cache
    찾고자 하는 데이터가 Cache 저장소에 있는지 먼저 확인하고 존재할 경우 Cache에서 가져오고 없을 경우 DB에서 읽어오고 읽어온 데이터를 Cache에 저장한다.
  • Write Back
    웹 서버는 특정 기간의 모든 데이터를 Cache에 저장한다. 특정 시간이 지나면 Cache에 있는 데이터를 DB에 저장하고 Cache에 있는 데이터는 삭제한다. 로그와 같은 데이터를 저장할 때 효율적이다.

  캐시는 저장되는 위치에 따라서도 두 가지 방식으로 나뉜다.

  • Local Cache
    웹 서버마다 캐시를 따로 저장한다. 즉 각 서버의 로컬에 캐시가 각각 저장된다. 서버 내에서 작동하기 때문에 속도는 빠르지만 다른 서버의 캐시를 참조할 수 없기 때문에 서버의 개수가 늘어날 수록 hit율이 줄어들어 효율이 떨어진다.
  • Global Cache
    웹서버 외부에 모든 웹서버에서 접근 가능한 캐시 서버를 둔다. 웹서버간에 동일한 캐시를 공유할 수 있지만 서버 외부와의 통신 때문에 속도가 저하된다.

Redis

  Scale-Out을 통해 서버를 확장할 수록 Global Cache의 효율이 증가되기 때문에 redis server를 global cache 저장소로 활용하기로 했다. redis는 메모리를 사용하는 DBMS기 때문에 Disk에 데이터를 저장하는 DBMS(e.g. MySQL)보다 훨씬 빠른 속도를 보인다.

Cache 적용

  대부분의 게시판에는 조회수, 추천수 등을 기준으로 게시글을 조회할 수 있는 기능이 있다. 게시글의 총 개수가 몇 개 되지않는다면 DB에 저장된 해당 글들을 정렬된 채로 불러오는 것은 큰 시간이 소요되지 않을 것이다. 그러나 게시글의 개수가 커지면 커질 수록 정렬하고 불러오는 데 발생하는 비용이 커지게 된다. 또한 게시글의 숫자가 매우 커졌을 때 인기글의 순서는 크게 바뀌지 않게 된다. 따라서 인기글을 조회하는 메서드는 한 번 호출했을 때의 비용이 크고결과가 크게 바뀌지 않을 뿐더러, 실제값과 조금 차이가 있는 것은 큰 문제가 되지 않기 때문에 Cache를 적용하기 적절하다.

  실제 4만개의 테스트용 리뷰를 생성해 Postman으로 request에 소요되는 시간을 확인해 본 결과 10배 이상의 성능 향상이 있음을 확인할 수 있었다.

profile
Backend Engineer 이한울입니다

0개의 댓글