일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 손에 익히며 배우는 네트워크 첫걸음
- 회고
- 리액트
- 렛츠기릿 자바스크립트
- 프로그래머스
- 타입스크립트 올인원
- LeetCode
- 코드스테이츠
- javascript
- 제로초
- js
- 코어 자바스크립트
- 리트코드
- 정재남
- 타임어택
- SQL 고득점 Kit
- 타입스크립트
- 2주 프로젝트
- 리덕스
- 알고리즘
- 백준
- 4주 프로젝트
- python
- 파이썬
- codestates
- HTTP
- 자바스크립트
- til
- 토익
- programmers
Archives
- Today
- Total
Jerry
캐싱과 메모이제이션의 차이 본문
캐싱
: 캐싱은 자주 사용하는 데이터나 연산 결과를 임시 저장소(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 |