βš™οΈ CS & 기타 개발 자료

μΊμ‹œ(Cache) κ°œλ… μ‰½κ²Œ μ •λ¦¬ν•˜κΈ°

μ†Œμ˜ πŸ€ 2025. 6. 3. 00:50

πŸš€ μΊμ‹œ(Cache)λž€?

μ§€κΈˆκΉŒμ§€ 데이터가 ν•„μš”ν•  λ•Œ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 직접 μ‘°νšŒν•΄μ™”μŠ΅λ‹ˆλ‹€.

κ°œλ°œμ„ 곡뢀해봀닀면 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„±λŠ₯은 I/O μž‘μ—…μ˜ 영ν–₯이 ν¬λ‹€λŠ” 말을 듀어봀을 κ²λ‹ˆλ‹€.

그만큼 μž¦μ€ DB 접근은 뢀담이 되며 속도도 λŠλ¦½λ‹ˆλ‹€.

 

κ·Έλ ‡λ‹€λ©΄, 자주 μ‘°νšŒν•˜λŠ” 데이터λ₯Ό 더 빨리 μ‘°νšŒν•  수 μžˆλŠ” 방법이 μ—†μ„κΉŒμš”?

 

λ°”λ‘œ μΊμ‹œκ°€ κ·Έ λ°©λ²•μž…λ‹ˆλ‹€.
μΊμ‹œ(Cache)λž€, 자주 μ‘°νšŒν•˜λŠ” 데이터λ₯Ό λΉ λ₯΄κ²Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ μž„μ‹œ μ €μž₯ν•˜λŠ” 곡간을 λ§ν•©λ‹ˆλ‹€.

μΊμ‹œλ₯Ό μ΄μš©ν•΄ 데이터 μ ‘κ·Ό μ‹œκ°„μ„ 쀄이고, μ„œλ²„μ™€ λ°μ΄ν„°λ² μ΄μŠ€μ˜ λΆ€ν•˜λ₯Ό 쀄여 μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

즉, μΊμ‹œμ˜ λͺ©μ μ€ λΉ λ₯Έ λ°μ΄ν„° μ‘°νšŒλ₯Ό ν†΅ν•΄ μ‘λ‹΅ μ‹œκ°„을 λ‹¨μΆ•ν•˜κ³ , μ‹œμŠ€ν…œ λΆ€ν•˜μ™€ λΉ„μš©μ„ μ€„μ΄λŠ” κ²ƒμž…λ‹ˆλ‹€.

 

 

컴퓨터 μ‹œμŠ€ν…œμ—μ„œ 데이터에 μ ‘κ·Όν•˜λŠ” μ†λ„λŠ” 데이터가 μ €μž₯된 μœ„μΉ˜μ— 따라 λ‹€λ¦…λ‹ˆλ‹€.

λ©”λͺ¨λ¦¬ 계측 κ΅¬μ‘°λŠ” μœ„ κ·Έλ¦Όκ³Ό 같이 ν‘œν˜„ν•  수 있고,

데이터 쑰회 μš”μ²­ μ‹œ μ•„λž˜ μˆœμ„œλ‘œ μ‘°νšŒν•©λ‹ˆλ‹€.

CPU Register -> L1 Cache -> L2 Cache -> L3 Cache  -> 메인 λ©”λͺ¨λ¦¬(RAM) -> λ””μŠ€ν¬

 

μ™Όμͺ½μœΌλ‘œ 갈수둝 속도가 λΉ λ₯΄μ§€λ§Œ μš©λŸ‰μ΄ μž‘κ³ 

였λ₯Έμͺ½μœΌλ‘œ 갈수둝 μ†λ„λŠ” λŠλ¦¬μ§€λ§Œ μš©λŸ‰μ΄ ν½λ‹ˆλ‹€.

 

μš°λ¦¬κ°€ μ‚¬μš©ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μΊμ‹œλŠ” λŒ€λΆ€λΆ„ 메인 λ©”λͺ¨λ¦¬μ— μ‘΄μž¬ν•©λ‹ˆλ‹€.
λ°μ΄ν„°λ² μ΄μŠ€μ²˜λŸΌ λ””μŠ€ν¬λ₯Ό κ±°μΉ˜μ§€ μ•Šκ³ , ν›¨μ”¬ λΉ λ₯Έ μ†λ„λ‘œ λ°μ΄ν„°λ₯Ό κ°€μ Έμ˜¬ μˆ˜ μžˆμ–΄ μ„±λŠ₯ κ°œμ„ μ— ν° λ„움이 λ©λ‹ˆλ‹€.


πŸ“Œ νŠΉμ§•

βœ… μ‹œκ°„μ  μ§€μ—­μ„±(Temporal Locality)

ν•œ 번 참쑰된 λ°μ΄ν„°λŠ” κ°€κΉŒμš΄ λ―Έλž˜μ— λ‹€μ‹œ 참쑰될 κ°€λŠ₯성이 λ†’λ‹€.

 

νŠΉμ • 데이터가 ν•œ 번 μ ‘κ·Όλ˜μ—ˆμ„ 경우 κ°€κΉŒμš΄ λ―Έλž˜μ— 또 ν•œ 번 데이터에 μ ‘κ·Όν•  κ°€λŠ₯성이 λ†’λ‹€λŠ” 뜻으둜,

ν•œ 번 κ°€μ Έμ™”λ˜ λ°μ΄ν„°λŠ” 또 μ“Έ 일이 μžˆμ„ 거라고 λ³΄λŠ” κ²λ‹ˆλ‹€.

 

예λ₯Ό λ“€μ–΄, μ‡Όν•‘λͺ°μ—μ„œ '인기 μƒν’ˆ λͺ©λ‘'은 ν•œ 번 쑰회된 ν›„ 자주 λ‹€μ‹œ μ‘°νšŒλ˜λŠ” λ°μ΄ν„°μž…λ‹ˆλ‹€.

λͺ©λ‘μ„ 맀번 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 쿼리λ₯Ό μ‹€ν–‰ν•΄ κ°€μ Έμ˜¬ ν•„μš” 없이 μΊμ‹œμ— μ €μž₯ν•  수 있겠죠.

 

이런 경우 데이터λ₯Ό 처음 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ‘°νšŒν•  λ•Œ μΊμ‹œμ— μ €μž₯ν•˜κ³ ,

μ΄ν›„μ—λŠ” μΊμ‹œμ—μ„œλ§Œ 데이터λ₯Ό 읽으면 맀번 λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Όν•˜μ§€ μ•Šκ³  λΉ λ₯΄κ²Œ 읽을 수 μžˆμŠ΅λ‹ˆλ‹€.

 

λ”°λΌμ„œ μΊμ‹œλŠ” 반볡적으둜 μ‚¬μš©λ˜λŠ” 데이터가 λ§Žμ„ λ•Œ νš¨μœ¨μ μž…λ‹ˆλ‹€.

βœ… 곡간적 μ§€μ—­μ„±(Spatial Locality)

참쑰된 데이터와 μΈμ ‘ν•œ λ©”λͺ¨λ¦¬ μ£Όμ†Œμ˜ 데이터도 ν•¨κ»˜ 참쑰될 ν™•λ₯ μ΄ λ†’λ‹€.

 

곡간적 지역성은,

μ„œλ‘œ μΈμ ‘ν•˜μ—¬ μ €μž₯λ˜μ–΄ μžˆλŠ” 데이터듀은 μ—°μ†μ μœΌλ‘œ 접근될 κ°€λŠ₯성이 λ†’λ‹€λŠ” νŠΉμ„±μž…λ‹ˆλ‹€.

 

CPU μΊμ‹œλ‚˜ λ””μŠ€ν¬ μΊμ‹œμ˜ 경우 μ–΄λ–€ λ©”λͺ¨λ¦¬ μ£Όμ†Œμ— μ ‘κ·Όν•  λ•Œ

κ·Έ μ£Όμ†Œ 뿐 μ•„λ‹ˆλΌ ν•΄λ‹Ή 블둝을 ν†΅μ§Έλ‘œ μΊμ‹œμ— κ°€μ Έμ˜΅λ‹ˆλ‹€.


πŸ“Œ μ£Όμš” μš©μ–΄

βœ… μΊμ‹œ 히트(Cache Hit)

μš”μ²­λœ 데이터가 μΊμ‹œμ— μ‘΄μž¬ν•˜μ—¬ μ¦‰μ‹œ μ°Ύμ•„λ‚Έ 경우λ₯Ό λ§ν•©λ‹ˆλ‹€.

βœ… μΊμ‹œ 미슀(Cache Miss)

μš”μ²­λœ 데이터가 μΊμ‹œμ— μ—†λŠ” κ²½μš°μž…λ‹ˆλ‹€.

μΊμ‹œ λŒ€μ‹  원본 μ €μž₯μ†Œμ—μ„œ 데이터λ₯Ό μ‘°νšŒν•œ ν›„ μΊμ‹œμ— μ €μž₯ν•˜μ—¬ 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

 

βœ… μΊμ‹œ 적쀑λ₯ (Cache Hit Rate)

"μΊμ‹œ 적쀑λ₯  = μΊμ‹œ 히트 / 총 μš”μ²­ 수"

 

총 μš”μ²­ λŒ€λΉ„ μΊμ‹œκ°€ 히트된 횟수λ₯Ό λΉ„μœ¨λ‘œ λ‚˜νƒ€λ‚Έ κ°’μž…λ‹ˆλ‹€.

μΊμ‹œ 적쀑λ₯ μ΄ λ†’μ„μˆ˜λ‘ 히트 λΉ„μœ¨μ΄ 많고, μΊμ‹œλ₯Ό 효율적으둜 μ“°κ³  μžˆλ‹€κ³  해석할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

μ‹œμŠ€ν…œ μ„±λŠ₯κ³Ό λΉ„μš© 절감 효과λ₯Ό μ •λŸ‰μ μœΌλ‘œ 평가할 수 μžˆλŠ” 핡심 μ§€ν‘œλ‘œ μ€‘μš”ν•œ μš©μ–΄μž…λ‹ˆλ‹€.


참고자료

 

 

 

 

λ°˜μ‘ν˜•