1. MemoryStore (메모리 기반 스토리지)
* 단순 키-값 저장 방식으로, 별도의 데이터 구조(리스트, 해시 등)를 제공하지 않고, 메모리에 객체나 문자열로만 데이터를 저장
* 메모리에 직접 데이터를 저장하므로, 읽기/쓰기 속도가 가장 빠름
* 휘발성이라 서버가 재시작되면 데이터 유실, 사용자는 다시 데이터를 입력하게 되는 불편함.
* 단일 서버에서만 사용 가능하므로, 여러 대의 서버로 확장할 때 세션 공유가 불가능
* TTL 설정을 지원하지 않아 세션을 수동으로 관리해야 하며,
특정 조건에 따라 세션을 삭제하려면 개발자가 코드에서 명시적으로 세션을 제거해야함
* 속도: 가장 빠름
* 주 사용 사례: 개발 환경, 테스트용 임시 데이터, 단일 서버에서의 세션 관리
2. Memcached
* 단순 키-값 저장만을 지원하여 주로 캐싱 용도로 사용됨
* 간단한 데이터를 매우 빠르게 저장하고 검색할 수 있도록 최적화
* 불필요한 기능을 최소화하여 캐싱에 최적화되어 있어 속도가 매우 빠름
* 영속성을 지원하지 않으며, 서버 재시작 시 모든 데이터가 사라짐
* 캐시 용도로 특화된 저장소로, 비영속적 데이터에 사용
* TTL(Time To Live) 설정을 지원하여, 일정 시간이 지나면 캐시된 데이터가 자동으로 삭제
* 오픈소스 Memcached: 무료로 사용할 수 있으며, 서버에 설치해서 운영
* 속도: 매우 빠름
* 주 사용 사례: 데이터베이스 쿼리 결과 캐싱, 세션 데이터 캐싱
3. Redis
* 메모리 기반의 “키-값” 구조 데이터 관리 시스템, 문자열뿐만 아니라, 리스트, 해시, 집합, 정렬된 집합 등 다양한 데이터 구조를 지원
* 이를 통해 다양한 작업(예: 순위 저장, 스트림 데이터 처리 등) 및 복잡한 데이터 구조의 캐싱 가능, 효율적 데이터 관리
* Redis는 고가용성(HA) 및 클러스터링 기능을 지원해, 서버 장애나 데이터 분산에 강함
(대규모의 트래픽과 데이터 처리에도 안정적으로 대응)
* 기본적으로 메모리에서 동작, 필요시 디스크에 저장하여 데이터 유실을 방지할 수 있지만,
이로 인해 Memcached보다 조금 느릴 수 있음
* Redis는 복제(replication)와 클러스터링을 지원하여 여러 서버에 걸쳐 데이터를 분산 가능
* Redis를 사용할 때는 데이터 변경이 잦기 때문에 실제 메모리 크기만큼 자식 프로세스로 복사하므로
실제로 필요한 메모리 양보다 더 많은 메모리를 사용
* TTL(Time To Live) 설정을 지원하여, 일정 시간이 지나면 캐시된 데이터가 자동으로 삭제
* 오픈소스 Redis: 자체 서버에 설치해 사용할 경우 무료이지만 인프라 유지나 보안 업데이트는 사용자가 직접 관리해야 함
* 속도: 빠름
* 주 사용 사례: 실시간 데이터, 세션 관리, 실시간 순위 저장, 복잡한 데이터 구조 처리
* Redis 영속성 옵션(같은 서버에서 영속성을 설정하면, 디스크 I/O를 사용하게 되므로 서버 성능에 영향을 줄 수 있음으로 주의)
RDB (Redis Database Backup):
* 주기적으로 스냅샷을 찍어 데이터를 디스크에 저장
* 서버가 재시작되면 이 스냅샷 파일을 불러와 마지막 스냅샷 시점의 데이터로 복구
* RDB는 데이터가 영구적으로 저장되지만, 스냅샷 간격 사이의 데이터는 손실될 수 있음
AOF (Append-Only File):
* 모든 쓰기 연산을 디스크에 로그 형식으로 저장
* Redis 재시작 시 AOF 파일을 통해 모든 변경 사항을 복원하여 데이터를 완전히 복구
* AOF는 RDB보다 데이터 손실 가능성이 낮지만, 파일이 커질 수 있어 다소 느려질수 있음
4. MongoDB
* 디스크에 데이터를 저장하는 문서 지향 데이터베이스
* 인메모리 데이터베이스와 비교하면 느리지만, 비정형 데이터 저장 및 인덱싱이 필요한 경우에 적합
* 속도: 상대적으로 느림 (디스크 기반)
* 주 사용 사례: 사용자 데이터 저장, 로그 데이터 관리, 비정형 데이터 처리
속도(빠른 순서)
MemoryStore > Memcached > Redis > MongoDB
Redis와 Memcached는 특히 높은 성능이 필요할 때 캐싱 용도로 널리 사용되며, MongoDB는 데이터 영구성과 복잡한 쿼리가 필요한 경우에 적합
보안과 데이터 보호를 위해 데이터 복제 및 백업 기능을 추가할 경우, 메모리 사용량이 증가하고 성능이 더 느려질 수 있음
Redis는 RDB 스냅샷이나 AOF(Append-Only File) 방식으로 데이터를 복제할 수 있는 반면, MemoryStore는 이를 기본적으로 제공하지 않으므로 직접 구현해야 하며, 이 경우 성능에 더 큰 영향을 미칠 수 있음
'node.js' 카테고리의 다른 글
| [Node.js] body-parser로 json data 처리하기 (0) | 2024.11.01 |
|---|---|
| [Node.js]Moment.js로 Date 관리하기 (0) | 2024.11.01 |
| [Node.js] express.js memoryStore 사용하기 (0) | 2024.10.31 |
| [Node.js]path.join, path.resolve(__filename, __dirname)경로 설정 (0) | 2024.10.31 |