20220516 Cache
title: "Cache" date: "2022-05-16"
modified: "2022-05-16"
뭔가 의미없지만 의미있는 정리2
면접때 뭘 물어보면 좋을까
Cache(Asynchronous Programming)
- 레벨1기초 : 1.1. 묻고자 하는바 : 캐시가 무엇이고 캐시의 기본 원리가 무엇인지 아는가? 1.2. 정답 - 주요 키워드 중심으로 :
- 원리 : 참조 지역성의 원리(or 캐시 지역성, 캐시 로컬리티, locality of reference). 메모리상이 동일한 값 혹은 해당 값 근처들이 자주 액세스되는 특성. 근처의 값을 더 빠른 곳에 위치시켜 속도를 향상하고자 함. 근처(locality)는 아래와 같은 세가지 방식으로 분류함
- 레벨2심화 2.1.1. 묻고자 하는바 : 캐쉬에서 말하는 로컬리티에 대해서 알고 있는가? 2.1.2. 정답 - 주요 키워드 중심으로 : 1) 공간 : 특정 메모리에 인접한 메모리를 참조하는 경향이 있음. ex) 유명인 문제. 저스틴 비버의 인스타그램은 더 많이 참조되므로, 해당 DB가 있는 자원이 훨씬 더 많이 사용된다. 2) 시간 : 최근에 참조된 메로리를 다시 참조하는 경향이 있음. ex) 최근. LRU(Least Recently Used) 알고리즘을 사용 3) 순차 : 순차적으로 메모리를 참조하는 경향이 있음.
2.2.1. 묻고자 하는바 : 캐쉬의 교체 알고리즘은 무엇이 있는가? 2.2.2. 정답 - Cache replacement policies
2.3.1. 묻고자 하는바 : aside cache와 inline cache에 대해서 말하시오 2.3.2. 정답 - inline cache : 모든 데이터가 캐쉬에 있는 것을 기본으로.
- aside cache : 캐쉬힛하면 캐쉬의 데이터를, 캐쉬미스가나면 원본 데이터를 긁어옴
- https://brunch.co.kr/@springboot/151
레벨3응용 3.1. 묻고자 하는바 : 기본적인 리드캐쉬를 사용한 적이 있는가? 3.1.1. 상세 : 수억명의 사용자 정보가 저장된 유저 관리 시스템을 사용하고 있다. 유저의 고유값(uid)을 가지고 사용 디바이스 명(devicename)을 가져오는 시스템을 사용 중인데 매번 sql 쿼리를 날려 데이터를 긁어오는 것은 DB에 너무 큰 부담을 준다. 캐시(ex. redis 등)를 이용하여 리드 성능을 개선해보라. 3.2. 정답 - 알고리즘에서 해당 부분을 판단. 1) 유저 아이디(uid)로 캐쉬힛(캐쉬에 데이터가 있음)하면 캐쉬에서 해당유저의 디바이스 명(devicename)을 긁어옴 2) 캐쉬미스(캐쉬에 데이터가 없으면) 유저 아이디(uid)를 이용하여 DB에 쿼리를 날려 디바이스명(devicename)을 긁어옴
function getDeviceName(uid : string) {//캐쉬서버에서 디바이스 이름 먼저 검색var devicename = cache.get(uid);//캐쉬 서버에 데이터가 없으면 DB검색if(devicename == null) {devicename = sql.get(uid);//최근 사용한 값이므로 locality에 따라 사용할 수 있도록 캐쉬에 넣어 둠cache.set(uid, devicename);}return devicename;}