Java Local Cache ๋น„๊ตํ•˜๊ธฐ

2025. 3. 9. 17:09ยท๐Ÿ“‚ programming-language/java

1. Local Cache ? Global Cache?

(1) ๋กœ์ปฌ ์บ์‹œ

  1. ์žฅ์ 
    • ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•ด ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๋ฏ€๋กœ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ๊ฐ์†Œ
  2. ๋‹จ์ 
    • ์บ์‹œ ๋ฐ์ดํ„ฐ ์ฆ๊ฐ€ ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ฆ๊ฐ€๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ
    • ์บ์‹ฑ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์—ฌ๋Ÿฌ ์„œ๋ฒ„ ๊ฐ„ ์ •ํ•ฉ์„ฑ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ

(2) ๊ธ€๋กœ๋ฒŒ ์บ์‹œ

  1. ์žฅ์ 
    • ๋‹ค์ค‘ ์ธ์Šคํ„ด์Šค์—์„œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ๊ณต์œ  ๊ฐ€๋Šฅ
    • Sharding ๊ณผ Replication ์„ ํ™œ์šฉํ•œ ๊ณ ๊ฐ€์šฉ์„ฑ ๋ณด์žฅ
  2.  ๋‹จ์ 
    • ์ถ”๊ฐ€ ์ธํ”„๋ผ ๊ตฌ์„ฑ์œผ๋กœ ์ธํ•œ ๋น„์šฉ ๋ฐœ์ƒ
    • ๋„คํŠธ์›Œํฌ ์ง€์—ฐ์œผ๋กœ ์ธํ•ด ๋กœ์ปฌ ์บ์‹œ๋ณด๋‹ค ์‘๋‹ต ์†๋„๊ฐ€ ๋А๋ฆด ์ˆ˜ ์žˆ์Œ

 

2. ๋กœ์ปฌ ์บ์‹œ ์ข…๋ฅ˜

(1) EhCache

EhCache๋Š” Java ๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ ์†Œ์Šค ์บ์‹œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์ฃผ๋กœ Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

  1. ํŠน์ง•
    1. Heap ๋ฉ”๋ชจ๋ฆฌ, OffHeap ์ €์žฅ์†Œ, ๋””์Šคํฌ ์ €์žฅ ๊ฐ€๋Šฅ
      • heap memory ์ €์žฅ ๊ณต๊ฐ„ : JVM ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ
      • offHeap ๊ณต๊ฐ„(3๋ฒ„์ „ ๋ถ€ํ„ฐ ๋„์ž…) : memory heap ์™ธ๋ถ€์— ์ถ”๊ฐ€์ ์ธ ์œ ํ˜•์˜ ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Java GC ๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์€ ์ €์žฅ์†Œ์ด๋ฉฐ, Byte ๋‹จ์œ„์˜ ํฐ ์บ์‹œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ๋””์Šคํฌ ๊ณต๊ฐ„ : File ์บ์‹œ์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๊ฐ€ ๋””์Šคํฌ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
    2. Terracotta Server์™€ ์—ฐ๊ณ„ํ•˜์—ฌ ๋ถ„์‚ฐ ์บ์‹œ ์ง€์›
      • Terracotta Server : ๊ฐ ์บ์‹œ ๋…ธ๋“œ๋“ค์˜ ํ—ˆ๋ธŒ ์—ญํ• ์„ ํ•˜๋Š” ๋ถ„์‚ฐ ์บ์‹œ ์„œ๋ฒ„ ์—ญํ• .
      • EhCache ์™€ Terracotta Server ์™€ ๊ฒฐํ•ฉํ•ด ์บ์‹œ ๋…ธ๋“œ๋“ค ๊ฐ„์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ๊ณต์œ ํ•˜๊ธฐ ๋™๊ธฐํ™” ํ•œ๋‹ค.

 

(2) Caffeine Cache

Caffeine Cache๋Š” Guava Cache์™€ ConcurrentHashMap์„ ๊ฐœ์„ ํ•œ ๊ณ ์„ฑ๋Šฅ ์บ์‹œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

  1. ํŠน์ง•
    1. ๋†’์€ ์„ฑ๋Šฅ๊ณผ ๋‚ฎ์€ ์ง€์—ฐ์‹œ๊ฐ„ ์ œ๊ณต
    2. LRU(Least Recently Used), LFU(Least Frequently Used), FIFO(First In First Out) ์ œ๊ฑฐ ์ •์ฑ… ์ง€์›
    3. ์ž๋™ ์ ์‘์  ์บ์‹œ ํฌ๊ธฐ ์กฐ์ ˆ ๊ธฐ๋Šฅ ์ œ๊ณต

 

(3) Guava Cache

Guava Cache๋Š” ๊ตฌ๊ธ€์—์„œ ์ œ๊ณตํ•˜๋Š” Java ๊ธฐ๋ฐ˜ ์บ์‹œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ๊ฐ„๋‹จํ•œ ์บ์‹ฑ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

  1. ํŠน์ง•
    1. ConcurrentHashMap ๊ธฐ๋ฐ˜์œผ๋กœ Thread-Safe ๋ณด์žฅ
    2. ๋‹ค์–‘ํ•œ ์บ์‹œ ์ œ๊ฑฐ ๋ฐฉ์‹ ์ œ๊ณต (์‚ฌ์ด์ฆˆ ๊ธฐ๋ฐ˜, ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜, ์ฐธ์กฐ ๊ธฐ๋ฐ˜)
      1. ์‚ฌ์ด์ฆˆ ๊ธฐ๋ฐ˜ ์ œ๊ฑฐ : ๊ฐ์ฒด ํฌ๊ธฐ๊ฐ€ ํฌ๋‹ค๋Š” ์˜๋ฏธ๋Š” ๊ทธ๋งŒํผ ๋ฌด๊ฒ๊ฒŒ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ํฐ ๊ฐ์ฒด๋ฅผ ์บ์‹ฑํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.
      2. ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ์ œ๊ฑฐ : ์ฝ๊ธฐ ์ดํ›„ ์„ค์ •ํ•œ ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„ ๋งŒ๋ฃŒํ•œ๋‹ค.
      3. ์ฐธ์กฐ ๊ธฐ๋ฐ˜ ์ œ๊ฑฐ
        • weakReference : ๊ฐ’์ด๋‚˜ ํ‚ค๊ฐ€ weakReference ๋กœ ๊ฐ์‹ธ์ ธ ์ฐธ์กฐ๊ฐ€ ์—†์–ด์ง€๋ฉด GC ์ฒ˜๋ฆฌ๋œ๋‹ค.
        • softReference : JVM ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ GC ์ฒ˜๋ฆฌ๋˜๋Š” ์ฐธ์กฐ ๋ฐฉ์‹

 

3. Local Cache ์„ฑ๋Šฅ ๋น„๊ต

  1. ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ
    • 8 thread ๊ธฐ๋ฐ˜ ๋™์‹œ์„ฑ ์ฝ๊ธฐ ์ž‘์—…์—์„œ ์ดˆ๋‹น ์ž‘์—…๋Ÿ‰ / 6 thread ๊ธฐ๋ฐ˜ ๋™์‹œ์„ฑ ์ฝ๊ธฐ ์ž‘์—… + 2 thread ์“ฐ๊ธฐ ์ž‘์—… ์ฒ˜๋ฆฌ๋Ÿ‰ ๋น„๊ต
    • Caffeine ์ด read(100%) + read(75%)/write(25%) + write(100%) ์—์„œ ๋ชจ๋‘ ์šฐ์ˆ˜ํ•จ
  1. ๊ฒฐ๋ก 
    • Caffeine Cache๊ฐ€ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ ์ž‘์—…์—์„œ ๊ฐ€์žฅ ์šฐ์ˆ˜ํ•œ ์„ฑ๋Šฅ์„ ๋ณด์ด๋ฉฐ, ์ž๋™ ์กฐ์ • ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ตœ์ ์˜ ์บ์‹ฑ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค.
    • EhCache๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ์ ํ•ฉํ•˜๋ฉฐ, Spring ํ™˜๊ฒฝ๊ณผ์˜ ์—ฐ๊ณ„๊ฐ€ ์šฉ์ดํ•˜๋‹ค.
    • Guava Cache๋Š” ๋‹จ์ˆœํ•œ ์บ์‹ฑ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ ํ•ฉํ•˜๋‹ค.

 

ref : https://github.com/ben-manes/caffeine/wiki/Benchmarks

 

ref : https://github.com/ben-manes/caffeine/wiki/Benchmarks

 

 

'๐Ÿ“‚ programming-language > java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Virtual Thread ์€ ๋ฌด์—‡์ผ๊นŒ?  (2) 2025.04.10
์ž๋ฐ”์—์„œ ๋™์‹œ์„ฑ์€ ์™œ ๋ฐœ์ƒํ• ๊นŒ?  (4) 2025.03.23
SerialVersionUID๋ฅผ ์„ ์–ธํ•ด์•ผ ํ•˜๋Š” ์ด์œ   (0) 2024.11.28
์ž๋ฐ” ๋น„๋™๊ธฐ๋กœ ์นดํŽ˜ ์ฝ˜์†” ์˜ˆ์ œ ๋งŒ๋“ค๊ธฐ  (0) 2024.11.26
์–ด๋Œ‘ํ„ฐ ํŒจํ„ด(adapter pattern)  (1) 2024.07.09
'๐Ÿ“‚ programming-language/java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • Virtual Thread ์€ ๋ฌด์—‡์ผ๊นŒ?
  • ์ž๋ฐ”์—์„œ ๋™์‹œ์„ฑ์€ ์™œ ๋ฐœ์ƒํ• ๊นŒ?
  • SerialVersionUID๋ฅผ ์„ ์–ธํ•ด์•ผ ํ•˜๋Š” ์ด์œ 
  • ์ž๋ฐ” ๋น„๋™๊ธฐ๋กœ ์นดํŽ˜ ์ฝ˜์†” ์˜ˆ์ œ ๋งŒ๋“ค๊ธฐ
cooper25
cooper25
  • cooper25
    dev cooper
    cooper25
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (84)
      • ๐Ÿ“‚ backend (34)
        • spring (19)
        • architecture (10)
        • test (5)
      • ๐Ÿ“‚ computer-science (5)
      • ๐Ÿ“‚ programming-language (12)
        • java (12)
      • ๐Ÿ“‚ infra (9)
        • mysql (4)
        • redis (2)
        • message-queue (3)
      • ๐Ÿ“‚ cloud (2)
        • aws (2)
      • ๐Ÿ“‚ frontend (1)
        • react (0)
      • ๐Ÿ“‚ education & lecture (16)
        • ์ธํ”„๋ผ ๊ณต๋ฐฉ (11)
        • ํ•ญํ”Œ ๋ฐฑ์—”๋“œ 7๊ธฐ (5)
      • ๐Ÿ“‚ ai (1)
        • claude (1)
      • ๐Ÿ“‚ etc (2)
        • ํšŒ๊ณ  (1)
        • ์ปจํผ๋Ÿฐ์Šค (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์„ค๊ณ„
    mysql
    ๋™์‹œ์„ฑ
    react
    kafka
    spring-batch
    spring
    Redisson
    UUID
    ํšŒ๊ณ 
    gof
    ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„
    ์Šคํ”„๋ง์บ ํ”„ ํ›„๊ธฐ
    AWS
    nGrinder
    JPA
    spring camp 2025
    ์ธํ”„๋ผ๊ณต๋ฐฉ
    spring AOP
    ํ•ญํ•ดํ”Œ๋Ÿฌ์Šค
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
cooper25
Java Local Cache ๋น„๊ตํ•˜๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”