관리 메뉴

Jerry

캐싱과 메모이제이션의 차이 본문

Front/React

캐싱과 메모이제이션의 차이

juicyjerry 2025. 2. 12. 00:54

캐싱

: 캐싱은 자주 사용하는 데이터나 연산 결과를 임시 저장소(Cache)에 저장해, 동일한 요청이 들어왔을 때 저장된 값을 반환하여 성능을 향상시키는 기법

 

특징

주로 디스크 I/O, 네트워크 요청, DB 조회 등과 같은 비싼 연산 비용을 줄이기 위해 사용됨

  • 캐시 계층(Cache Layer) 를 두어 속도가 빠른 저장소(RAM, SSD 등)에 데이터를 저장
  • 일반적으로 범용적인 데이터 저장소로 활용됨

 

예시

 

  • 웹 브라우저 캐시: 방문한 웹사이트의 이미지, CSS, JavaScript 파일을 저장하여 다시 방문할 때 빠르게 로드
  • 데이터베이스 캐시: Redis나 Memcached 같은 인메모리 캐시를 사용하여 데이터베이스 조회 부담을 줄임
  • CPU 캐시: 프로세서가 자주 사용하는 데이터를 L1, L2, L3 캐시에 저장하여 메모리 접근 속도를 향상

 

 

메모이제이션(Memoization)

: 메모이제이션은 함수의 실행 결과를 저장하여 같은 입력에 대해 다시 호출할 때 저장된 값을 반환하는 기법입니다.

 

특징

 

  • 순수 함수(Pure Function) 기반으로 사용됨 (입력이 같으면 출력이 같음)
  • 함수 단위에서 동작하며, 주로 재귀 함수의 중복 호출을 최적화하는 데 사용됨
  • 저장된 데이터는 일반적으로 해시 테이블(딕셔너리) 형태로 관리됨
  • 특정 연산 결과를 저장하는 것이므로, 캐싱보다 더 작은 범위에서 동작

 

예제

피보나치 수열 (재귀 vs 메모이제이션)

기본 재귀 함수는 동일한 계산을 여러 번 반복하지만, 메모이제이션을 사용하면 이미 계산된 값을 재사용하여 중복 계산을 줄일 수 있음.

 

# 일반적인 재귀 (중복 호출 발생)
def fib(n):
    if n <= 1:
        return n
    return fib(n - 1) + fib(n - 2)

print(fib(10))  # 계산량이 많음

 

 

 

 

# 메모이제이션 적용 (중복 호출 제거)
def fib_memo(n, memo={}):
    if n in memo:
        return memo[n]
    if n <= 1:
        return n
    memo[n] = fib_memo(n - 1, memo) + fib_memo(n - 2, memo)
    return memo[n]

print(fib_memo(10))  # 기존 값을 저장하여 불필요한 연산 제거

 

 

언제 사용해야 할까?

 

  • 캐싱: 네트워크 요청, 데이터베이스 조회, 파일 읽기 등 비용이 큰 작업을 최적화할 때
  • 메모이제이션: 재귀 함수에서 중복 연산을 방지하고 알고리즘 성능을 최적화할 때

 

 

 

즉, 캐싱은 시스템적인 최적화, 메모이제이션은 알고리즘적인 최적화라고 볼 수 있습니다. 

반응형

'Front > React' 카테고리의 다른 글

Props Drilling과 Context API  (0) 2025.02.14
리액트 공부  (2) 2024.12.10
리액트 공부  (2) 2024.12.10
리렌더링이란? 🤷‍♂️🤷‍♂️  (0) 2021.04.09
Virtual DOM 이란🧐🧐  (0) 2021.04.09