πŸ’»
Albert's Til
GitHub
  • 맀일맀일 μ‘°κΈˆμ”© μ„±μž₯ν•˜κΈ°
    • README
    • CS
      • Network
      • HTTP
        • NO-CACHE
      • 였λ₯˜ μ½”λ“œ
      • ORM 도ꡬ
      • Design Pattern
        • CQRS Pattern
          • Event Sourcing and CQRS pattern
        • Builder Pattern
    • DB
      • MySQL
        • Timeline
        • Pagination
        • Index
        • Database Performance Optimization Strategies
        • B+ tree
        • MySQL Connectors VS MySQL Shell(Scripting) VS MySQL Workbench
        • MySQL Storage Engine Architecture
      • Normalization & Denormalization
      • JPA
        • @Transactional
        • Why JPA?
        • About JPA
        • N+1 Issue
        • Index
        • ElementCollection&CollectionTable
        • orphanRemoval
        • CascadeType
        • Use Subselect
        • Dynamic Instance Creation
        • Paging
        • Order
        • Spefication
        • mappedBy
      • MongoDB
        • ObjectId
      • Why MySQL?
      • ACID properties of transactions
      • Between JPA and JDBC
      • Identifiers in Hibernate/JPA
    • Java
      • Jackson de/serialize
      • Collections.singletonList() vs List.of()
      • Manage dependencies in Gradle
      • Logging Level
      • Bean Validation
      • JVM Internals
        • Threads
          • Frame
        • Shared Between Threads
          • Classloader
            • Class Loader Hierarchy
            • Loading Linking Initialization
      • Java Collection Framework
      • Annotation
      • Generic
      • λ””λ―Έν„° 법칙
    • Spring
      • Caching
      • Spring Integration Overview
        • ThreadPollTaskExecutor
        • Messaging Bridge
        • Channel Adapter
        • Poller
        • Configuration and @EnableIntegration
        • Message Endpoints
        • Message Channels
      • HATEOAS
      • @Autowired vs Constructor Dependency Injection
      • Spring Security
        • JWT 토큰 μ‚¬μš©ν•œ 인가
        • OAuth 2 Login
        • OAuth 2 인증
        • 인가
        • 인증
        • PasswordEncoder
      • IoC Container
      • Filter,Interceptor,AOP,Argument Resolver
      • Spring Annotation
      • About Spring
    • Kafka
      • Error Channel
    • Infra
      • Scale Up || Scale Out
      • Docker
        • Dockerfile
        • Docker Hub Deploy
        • Command
      • Cloud μœ ν˜•
        • Infrastructure as a Service
        • Platform as a Service
        • Software as a Service
      • 무쀑단 배포
        • μ—”μ§„μ—‘μŠ€(Nginx)
      • μ½”λ“œ μžλ™ 배포
        • Technical
      • AWS EC2
        • PEM(Privacy Enhanced Mail) ν‚€
      • AWS RDS
      • AWS S3
    • CodeSquad
      • Spring Boot Project 1μ£Όμ°¨ 회고
      • Spring Boot Project 2μ£Όμ°¨ 회고
      • Spirng Boot Project 3μ£Όμ°¨ 회고
      • Spring Boot Project 4μ£Όμ°¨ 회고
    • Foody Moody ν”„λ‘œμ νŠΈ
      • Query Performance Comparison
      • HeartCount Asynchronous Issue
      • DeferredResult
      • ResponseBodyEmitter
      • SseEmitter (Spring)
      • Server-Sent Events (SSE)
      • 기술 μŠ€νƒ 적용 이유
      • NO-CACHE(HTTP)
      • Transactional
    • DDD
      • AggregateId
    • Test
      • RestAssured
    • Coding and Algorithmic Problems
      • 819. Most Common Word
      • 344. Reverse String
      • 125. Valid Palindrome
      • 937. Reorder Data in Log Files
    • Node
      • Async... Await...
      • Custom Transactional Decorator Challenger
    • Python
      • Python Basic Grammar
        • Comments and Input/Output
        • Variable
        • Data type
        • Operations and syntax
        • List,Tuple,Dictionary,Set
        • Function
        • Conditional statement
        • Loop
    • HTML
      • HTML Basic
      • HTML Basic Tags
      • HTML Form Tags
      • HTML Table Tags
    • CSS
      • CSS Basic
      • CSS Practice
Powered by GitBook
On this page
  • 데이터가 변경될 λ•Œ μΊμ‹œμ˜ λ¬΄νš¨ν™”
  • TTL (Time to Live):
  • μ“°κΈ° μ‹œ λ¬΄νš¨ν™” (Write Through):
  • μ§€μ—° μ“°κΈ° (Write Behind):
  • λ³€κ²½λœ λΆ€λΆ„λ§Œ μΊμ‹œ (Cache Aside):
  • λΆ„μ‚° μΊμ‹œμ˜ 일관성:
  • @CachePut VS @CacheEvict
  • @CachePut
  • @CacheEvict

Was this helpful?

  1. 맀일맀일 μ‘°κΈˆμ”© μ„±μž₯ν•˜κΈ°
  2. Spring

Caching

데이터가 변경될 λ•Œ μΊμ‹œμ˜ λ¬΄νš¨ν™”

TTL (Time to Live):

  • μΊμ‹œλœ λ°μ΄ν„°λŠ” 일정 μ‹œκ°„ ν›„ μžλ™μœΌλ‘œ λ§Œλ£Œλ˜λ„λ‘ TTL 값을 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 방식은 자주 λ³€κ²½λ˜μ§€ μ•ŠλŠ” λ°μ΄ν„°λ‚˜ 일정 μ‹œκ°„ λ™μ•ˆλ§Œ μœ νš¨ν•œ λ°μ΄ν„°μ˜ κ²½μš°μ— μœ μš©ν•©λ‹ˆλ‹€.

μž₯점:

  • μžλ™ 만료:

    • μΊμ‹œλœ 데이터가 였래된 경우 μžλ™μœΌλ‘œ λ§Œλ£Œλ˜λ―€λ‘œ 관리가 κ°„λ‹¨ν•©λ‹ˆλ‹€.

  • λ¦¬μ†ŒμŠ€ μ ˆμ•½:

    • 였래된 λ˜λŠ” 더 이상 ν•„μš”ν•˜μ§€ μ•Šμ€ 데이터가 λ©”λͺ¨λ¦¬μ—μ„œ μžλ™μœΌλ‘œ μ œκ±°λ˜λ―€λ‘œ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

단점:

  • 데이터 μ§€μ—°:

    • 만료된 데이터λ₯Ό λ‹€μ‹œ λ‘œλ“œν•  λ•Œ 지연이 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • 잠재적 λΉ„νš¨μœ¨μ„±:

    • TTL 값이 λ„ˆλ¬΄ 짧게 μ„€μ •λœ 경우, λΉˆλ²ˆν•œ 데이터 λ¦¬λ‘œλ“œκ°€ ν•„μš”ν•˜κ²Œ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

μ“°κΈ° μ‹œ λ¬΄νš¨ν™” (Write Through):

  • 데이터λ₯Ό λ³€κ²½ν•  λ•Œ ν•΄λ‹Ή 데이터λ₯Ό λ™μ‹œμ— μΊμ‹œμ™€ λ°μ΄ν„°λ² μ΄μŠ€μ— λͺ¨λ‘ μ“°λŠ” μ „λž΅μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 λ°μ΄ν„°μ˜ 일관성을 μœ μ§€ν•  수 μžˆμ§€λ§Œ, μ“°κΈ° μž‘μ—…μ˜ μ§€μ—° μ‹œκ°„μ΄ 증가할 수 μžˆμŠ΅λ‹ˆλ‹€.

μž₯점:

  • 일관성:

    • μΊμ‹œμ™€ λ°μ΄ν„°λ² μ΄μŠ€ κ°„μ˜ 데이터 일관성을 보μž₯ν•©λ‹ˆλ‹€.

  • 즉각적인 반영:

    • 변경사항이 μ¦‰μ‹œ μΊμ‹œμ™€ λ°μ΄ν„°λ² μ΄μŠ€μ— λͺ¨λ‘ λ°˜μ˜λ©λ‹ˆλ‹€.

단점:

  • μ„±λŠ₯ μ €ν•˜:

    • μΊμ‹œμ™€ λ°μ΄ν„°λ² μ΄μŠ€ λ‘˜ 닀에 데이터λ₯Ό μ“°κΈ° λ•Œλ¬Έμ— μ“°κΈ° μž‘μ—…μ˜ μ§€μ—° μ‹œκ°„μ΄ 증가할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ§€μ—° μ“°κΈ° (Write Behind):

  • λ³€κ²½λœ 데이터λ₯Ό λ¨Όμ € μΊμ‹œμ— μ“΄ ν›„, 일정 μ‹œκ°„ 뒀에 배치둜 λ°μ΄ν„°λ² μ΄μŠ€μ— μ“°λŠ” μ „λž΅μž…λ‹ˆλ‹€. 이 방식은 μ“°κΈ° μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆμ§€λ§Œ, λ°μ΄ν„°λ² μ΄μŠ€μ— μ“°κΈ° 전에 μ‹œμŠ€ν…œ μž₯μ• κ°€ λ°œμƒν•˜λ©΄ 데이터 μ†μ‹€μ˜ μœ„ν—˜μ΄ μžˆμŠ΅λ‹ˆλ‹€.

μž₯점:

  • 높은 μ„±λŠ₯:

    • μΊμ‹œ μ“°κΈ°κ°€ μ¦‰κ°μ μœΌλ‘œ μ΄λ£¨μ–΄μ§€λ―€λ‘œ μ“°κΈ° μ„±λŠ₯이 λΉ λ¦…λ‹ˆλ‹€.

단점:

  • 데이터 손싀 μœ„ν—˜:

    • λ°μ΄ν„°λ² μ΄μŠ€μ— μ“°κΈ° 전에 μ‹œμŠ€ν…œ μž₯μ• κ°€ λ°œμƒν•˜λ©΄ 데이터 μ†μ‹€μ˜ μœ„ν—˜μ΄ μžˆμŠ΅λ‹ˆλ‹€.

  • 일관성 문제:

    • λ°μ΄ν„°λ² μ΄μŠ€μ™€ μΊμ‹œ κ°„μ˜ μΌμ‹œμ μΈ λΆˆμΌμΉ˜κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ³€κ²½λœ λΆ€λΆ„λ§Œ μΊμ‹œ (Cache Aside):

  • 데이터 λ³€κ²½ μ‹œ μΊμ‹œμ—μ„œ ν•΄λ‹Ή 데이터λ₯Ό μ œκ±°ν•˜κ³ , 데이터가 λ‹€μ‹œ ν•„μš”ν•  λ•Œλ§Œ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ‘°νšŒν•˜μ—¬ μΊμ‹œμ— μ €μž₯ν•˜λŠ” μ „λž΅μž…λ‹ˆλ‹€. 이 방식은 읽기와 μ“°κΈ° μž‘μ—…μ„ μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μž₯점:

  • μ΅œμ ν™”λœ λ¦¬μ†ŒμŠ€ μ‚¬μš©:

    • ν•„μš”ν•œ λ°μ΄ν„°λ§Œ μΊμ‹œμ— λ‘œλ“œλ©λ‹ˆλ‹€.

  • μœ μ—°μ„±:

    • μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ λ‘œμ§μ—μ„œ 데이터λ₯Ό μ–Έμ œ μΊμ‹œν• μ§€ μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

단점:

  • 초기 μ§€μ—°:

    • 처음 데이터λ₯Ό λ‘œλ“œν•  λ•Œ 좔가적인 지연이 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • λ³΅μž‘μ„± 증가:

    • μ‘μš© ν”„λ‘œκ·Έλž¨ μ½”λ“œμ—μ„œ μΊμ‹œ 관리λ₯Ό 직접 μˆ˜ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λΆ„μ‚° μΊμ‹œμ˜ 일관성:

  • μ—¬λŸ¬ μ„œλ²„ λ˜λŠ” λ…Έλ“œμ—μ„œ λΆ„μ‚° μΊμ‹œλ₯Ό μ‚¬μš©ν•  경우, μΊμ‹œ κ°„μ˜ 일관성을 μœ μ§€ν•˜κΈ° μœ„ν•œ μ „λž΅μ΄ ν•„μš”ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 데이터 λ³€κ²½ μ‹œ λͺ¨λ“  λ…Έλ“œμ˜ μΊμ‹œλ₯Ό λ™μ‹œμ— λ¬΄νš¨ν™”ν•˜κ±°λ‚˜ νŠΉμ • λ…Έλ“œμ—μ„œλ§Œ μΊμ‹œλ₯Ό λ¬΄νš¨ν™”ν•˜λŠ” λ“±μ˜ μ „λž΅μ„ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μž₯점:

  • ν™•μž₯μ„±:

    • λΆ„μ‚° μΊμ‹œλ₯Ό μ‚¬μš©ν•˜λ©΄ μ—¬λŸ¬ μ„œλ²„ λ˜λŠ” λ…Έλ“œμ— μΊμ‹œλ₯Ό ν™•μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

단점:

  • λ³΅μž‘μ„±:

    • λΆ„μ‚° μΊμ‹œ κ°„μ˜ 일관성을 μœ μ§€ν•˜κΈ° μœ„ν•œ 좔가적인 μ „λž΅κ³Ό 관리가 ν•„μš”ν•©λ‹ˆλ‹€.

  • λ„€νŠΈμ›Œν¬ μ˜€λ²„ν—€λ“œ:

    • λ‹€λ₯Έ λ…Έλ“œμ™€μ˜ 일관성을 μœ μ§€ν•˜κΈ° μœ„ν•œ λ„€νŠΈμ›Œν¬ ν†΅μ‹ μœΌλ‘œ μΈν•œ 좔가적인 지연이 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@CachePut VS @CacheEvict

@CachePut

μž₯점:

  • μžλ™ μ—…λ°μ΄νŠΈ:

    • @CachePut은 λ©”μ„œλ“œ 호좜의 κ²°κ³Όλ₯Ό μΊμ‹œμ— μžλ™μœΌλ‘œ μ €μž₯ν•˜λ―€λ‘œ, μΊμ‹œμ˜ 데이터가 항상 μ΅œμ‹  μƒνƒœλ‘œ μœ μ§€λ©λ‹ˆλ‹€.

  • 데이터 일관성:

    • 데이터λ₯Ό λ³€κ²½ν•˜λŠ” μž‘μ—… 후에 μžλ™μœΌλ‘œ μΊμ‹œλ₯Ό μ—…λ°μ΄νŠΈν•˜κΈ° λ•Œλ¬Έμ— λ°μ΄ν„°λ² μ΄μŠ€μ™€ μΊμ‹œ κ°„μ˜ 일관성을 μœ μ§€ν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€.

단점:

  • μ„±λŠ₯ μ €ν•˜:

    • λ°μ΄ν„°λ² μ΄μŠ€μ™€ μΊμ‹œ λ‘˜ 닀에 데이터λ₯Ό μ“°κΈ° λ•Œλ¬Έμ—, μ“°κΈ° μž‘μ—…μ˜ μ§€μ—° μ‹œκ°„μ΄ 증가할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • λΆˆν•„μš”ν•œ μΊμ‹œ μ—…λ°μ΄νŠΈ:

    • λͺ¨λ“  μ—…λ°μ΄νŠΈ μž‘μ—…μ— λŒ€ν•΄ μΊμ‹œλ₯Ό κ°±μ‹ ν•˜λ―€λ‘œ, ꡳ이 μΊμ‹œμ— μ €μž₯ν•  ν•„μš”κ°€ μ—†λŠ” λ°μ΄ν„°κΉŒμ§€λ„ μ—…λ°μ΄νŠΈ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

@CacheEvict

μž₯점:

  • κ°„λ‹¨ν•œ μΊμ‹œ 관리:

    • μΊμ‹œμ—μ„œ 데이터λ₯Ό κ°„λ‹¨ν•˜κ²Œ μ œκ±°ν•˜μ—¬, λ°μ΄ν„°μ˜ λ³€κ²½ λ˜λŠ” μ‚­μ œ μ‹œ 일관성 문제λ₯Ό ν”Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • ν”Œλ ‰μ‹œλΈ”:

    • νŠΉμ • 쑰건에 따라 μΊμ‹œλ₯Ό μ œκ±°ν•  수 있으며, μ—¬λŸ¬ μΊμ‹œλ‚˜ 전체 μΊμ‹œλ₯Ό ν•œ λ²ˆμ— μ œκ±°ν•˜λŠ” 것도 κ°€λŠ₯ν•©λ‹ˆλ‹€.

  • λ¦¬μ†ŒμŠ€ μ ˆμ•½:

    • 항상 μ΅œμ‹  λ°μ΄ν„°λ§Œ μΊμ‹œμ— μœ μ§€ν•˜λ©΄μ„œ μΊμ‹œ 크기λ₯Ό μ΅œμ†Œν™”ν•˜μ—¬, λ¦¬μ†ŒμŠ€λ₯Ό μ ˆμ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

단점:

  • λΉˆλ²ˆν•œ λ°μ΄ν„°λ² μ΄μŠ€ 쑰회:

    • μΊμ‹œμ—μ„œ 데이터λ₯Ό μ œκ±°ν•œ ν›„ ν•΄λ‹Ή 데이터가 λ‹€μ‹œ ν•„μš”ν•˜λ©΄ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ λ‹€μ‹œ μ‘°νšŒν•΄μ•Ό ν•˜λ―€λ‘œ, 이둜 μΈν•œ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • μΌμ‹œμ μΈ 데이터 뢈일치:

    • 데이터λ₯Ό μ—…λ°μ΄νŠΈ ν•œ ν›„ μΊμ‹œμ—μ„œ ν•΄λ‹Ή 데이터λ₯Ό μ œκ±°ν•˜λ©΄, λ‹€μŒ 데이터 μš”μ²­ μ‹œκΉŒμ§€λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ™€ μΊμ‹œ κ°„μ˜ μΌμ‹œμ μΈ 데이터 λΆˆμΌμΉ˜κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€

Last updated 1 year ago

Was this helpful?