SSAFY

[ SSAFY ] 캐싱의 개념과 적용

황성안 2021. 8. 24. 11:47
728x90

캐싱의 개념과 적용

알고 넘어가야 할 것

  • 폰 노이만 구조
  • 캐싱 -> 지역성 (공간 지역성, 시간 지역성)
  • 안드로이드 이미지 해시 -> LRU
  • HTTP 메소드는 GET 을 캐싱할 수 있다.
  • LRU

좋은 AP

  • 높은 신뢰성
  • 보안
  • 처리 속도/성능캐싱은 처리속도 성능과 상당히 연관이 있다.
  • 편리한 UX

캐시

  • 데이터나 값을 미리 복사해 놓는 임시 장소
  • 원본 데이터를 접근하는 시간이 캐시의 접근 시간에 비해 오래 걸리는 경우
  • 복잡한 수식을 재연산하는 시간을 절약하고 싶은 경우
  • 캐시에 데이터를 미리 복사해 놓으면 계산, 접근 시간 없이 빠른 속도로 데이터에 접근 가능

책상에 어떤 책을 쌓아두지

  • 아마도 바로 옆에 꽂혀있는
  • 참고한지 오래 된 책은 치우기 (LRU?)
  • 공간 지역성
  • 시간 지역성

고전은 중요하다

애니악 -> 폰 노이만 구조

  • 폰 노이만 구조: 범용 컴퓨터의 구조기존 하드웨어 쓰는 명령에 세트를 메모리를 이용하여 버스를 통해 처리를 하자.병목 현상이 있는 곳 => 공간 지역서, 시간 지역성을 갖는 무엇인가를 놓자 (캐시 메모리)

생활 캐싱

  • 요청이 있을 때 마다, 검색해서 찾는게 아니라. 미리 받아두고 저장을 해서 사용자에게 보여준다.
  • 하지만 데이터가 바뀔 경우, 이러한 것들을 알려주는 것이 필요하다.
  • 실시간 버스 현황APWAS -> 실시간 버스 현황AP

IO 속도

  • CPU
  • 메모리
  • 파일
  • 네트워크

캐싱 적합 대상

  • Write가 빈번하고 READ 는 거의 없는 경우
  • READ가 Write는 거의 없는 경우수정이 없는 경우가 제일 적합하다.

바람직한 철학

  • 가능한 많은 데이터를 캐싱하면 성능 향상
  • 메모리는 매우 중요한 자원 -> 선별적인 캐싱 정책

캐싱 = 메모리 I/O

TTL

  • 보통 캐싱된 데이터에는 만료시간 및 갱신 주기가 존재함
  • 데이터 sync 는 너무나도 중요

캐싱 적용기

  • 메뉴 목록을 하드 코딩하지는 않는 것
  • 메뉴 데이터는 DB 에 존재한다고 가정
  • 사용자 요청이 많아질수록 DB 조회 많아짐

ORM 이나 래퍼에서 자체 캐싱이 있지만, 직접적으로 구현이 필요할 때가 있다.


직접 구현

  • 메모리에 특정 객체를 생성한 후 캐싱하고자 하는 데이터를 저장
  • 단 해당 프로세스에서 유일한 저장 장소가 되도록 잘 선언해서 사용

Java

1 2

List menuList = new ArrayList(); menuList = selectMenuListFromDB();
  • 단일 머신에서는 문제가 없는데
  • 실서버는 Cluster를 고려를 해야한다.원본 데이터가 변형이 될때, 머신에서 변경을 해주어야 하는데. 다른 것들은?내부적으로 옵저빙을 하든해서 변경시 업데이트가 필요하다.

EHCache

  • 로컬 캐시 라이브러리
  • WAS n대 클러스터링 되어 있다면 동기화 이슈 발행
  • WAS 간 내부 통신
  • EHCache 가 RMI 클러스터링 지원

캐싱 적용기

  • DB 방송 편성 데이터 상품 정보 관리
  • 별도의 서버/솔루션 설치는 불가한 상황
  • 성능 향상을 위해 메모리 캐싱 정책 고려

REDIS

  • NOSQL & Cache 솔루션, 메모리 기반으로 구성
  • in-memory DB
  • 데이터베이스로 사용될 수 있으며 Cache로도 사용할 수 있음.
  • 하지만 역시는 오류는 있을 수 있다.

적용

  • Cache의 기본적인 개념 파악
  • 웹 AP 작성 코드에 DB 연동 조회 결과값을 특정 객체에 저장
  • 로컬 캐시 적용기
  • in-memory DB 솔루션 Redis 경험해보기
  • 백엔드에서만 국한되는 문제는 아니다.
728x90

'SSAFY' 카테고리의 다른 글

[ ssafy ]하둡 & 블록체인  (0) 2021.10.01
병렬 분산 알고리즘 구현 ( 이론 )  (0) 2021.08.25
[SSAFY] 산업혁명  (0) 2021.08.17
[SSAFY] TDD (Test Driven Dev)  (0) 2021.08.12
[SSAFY] Vue 컴포넌트 전역 등록  (0) 2021.08.12