오늘은 친구랑 얘기하다가 나온 김에 Redis와 AWS ElasticCache에 대해 정리해보겠습니다. 먼저 가장 쉽게 이해하게 됐던 말입니다.
Redis는 인메모리 데이터베이스로 게임의 인벤토리 같이 실시간으로 데이터를 쥐고, 데이터를 읽거나 써야하는 경우 자주 사용한다
Redis
Redis는 데이터베이스 캐싱, 실시간 분석, 메시징 시스템, 세션 관리, 잠금 관리 등 다양한 사용 사례에 널리 사용되고 있습니다.
뛰어난 성능: Redis는 인메모리 데이터베이스로 작동하므로 데이터를 디스크에 저장하는 대신 메모리에 저장합니다. 이로 인해 매우 빠른 읽기 및 쓰기 성능을 제공하며, 데이터 액세스에 대한 지연 시간을 크게 줄일 수 있습니다. 또한 Redis는 단일 스레드로 작동하여 락 관리 오버헤드를 줄이고 병렬 처리를 향상시킵니다.
다양한 데이터 구조: Redis는 단순한 키-값 저장소를 넘어 다양한 데이터 구조를 제공합니다. 문자열, 해시, 리스트, 집합, 정렬된 집합 등 다양한 데이터 유형을 지원하므로 데이터를 더 구조화하고 효율적으로 저장할 수 있습니다. 이를 통해 개발자는 다양한 사용 사례에 적합한 데이터 구조를 선택할 수 있습니다.
캐싱 및 세션 관리: Redis는 인메모리 캐싱에 탁월한 선택입니다. 데이터베이스 쿼리나 계산 결과를 Redis에 캐싱함으로써 데이터베이스 부하를 줄이고 응답 시간을 향상시킬 수 있습니다. 또한 Redis는 세션 관리에도 자주 사용되며, 사용자 세션 데이터를 효율적으로 저장하고 관리할 수 있습니다.
Pub/Sub 메시징: Redis는 Publish/Subscribe(Pub/Sub) 메시징 패턴을 지원합니다. 이를 통해 다양한 구독자에게 메시지를 발행하고 수신할 수 있으며, 실시간 메시지 전달 및 이벤트 기반 아키텍처를 구현할 수 있습니다.
데이터의 영속성: Redis는 필요에 따라 데이터를 디스크에 저장하여 영속성을 제공할 수 있습니다. 이를 통해 서버 재시작이나 장애 상황에서도 데이터의 지속성을 보장할 수 있습니다.
강력한 기능과 확장성: Redis는 다양한 고급 기능을 제공합니다. 예를 들어, 트랜잭션 지원, 캐시 만료, 비동기 저장 등의 기능을 활용할 수 있습니다. 또한 Redis는 클러스터링을 통해 확장성을 제공하므로 대용량 데이터를 처리하고 고가용성을 보장할 수 있습니다.
ElasticCache
AWS ElasticCache는 AWS에서 제공하는 관리형 인메모리 캐싱 서비스입니다. ElasticCache를 사용하면 애플리케이션의 응답 시간을 단축하고 확장성을 향상시킬 수 있습니다. ElasticCache는 주로 데이터베이스나 기타 백엔드 스토리지로부터 데이터를 조회하는 작업의 성능을 개선하기 위해 사용됩니다.
ElasticCache는 두 가지 인기 있는 인메모리 캐싱 엔진인 Redis와 Memcached를 지원합니다. Redis는 고급 기능을 제공하며 데이터를 영속적으로 저장할 수 있습니다. Memcached는 단순하고 빠르게 데이터를 캐싱하는 데에 특화되어 있습니다.
ElasticCache의 장점
높은 성능 : ElasticCache는 인메모리 캐싱을 사용하여 데이터에 접근하는 시간을 단축시켜 응답 시간을 향상시킵니다. 데이터베이스나 백엔드 스토리지로부터 데이터를 가져오는 대신 캐시에서 데이터를 직접 조회하므로 데이터베이스 부하를 줄일 수 있습니다.
자동 관리: ElasticCache는 AWS가 관리하는 완전 관리형 서비스입니다. 서버 프로비저닝, 패치 관리, 모니터링 및 장애 복구와 같은 일련의 작업을 자동으로 처리합니다. 이를 통해 개발자는 인프라 관리에 시간을 투자하지 않고도 애플리케이션에 집중할 수 있습니다.
확장성: ElasticCache는 수평 및 수직 확장이 가능합니다. 애플리케이션의 요구에 따라 캐시 노드를 추가하거나 크기를 조정하여 처리량과 성능을 향상시킬 수 있습니다. 이를 통해 더 많은 트래픽을 처리하거나 대규모 데이터 세트를 캐싱할 수 있습니다.
다양한 보안 기능: ElasticCache는 Amazon VPC(Virtual Private Cloud)와 통합되어 데이터에 대한 보안을 제공합니다. VPC 내에서 캐시 환경을 구성하여 데이터를 보호하고 외부로의 액세스를 제한할 수 있습니다.
복제와 고가용성: ElasticCache는 데이터의 복제와 고가용성을 제공합니다. Redis를 사용할 경우, 마스터-슬레이브 복제를 통해 데이터의 복제본을 유지하고 장애 시에도 서비스의 지속성을 보장합니다.
이러한 기능들을 통해 AWS ElasticCache는 애플리케이션의 성능과 확장성을 향상시키고, 데이터베이스 부하를 줄여 데이터베이스 서버의 확장성 문제를 완화하는 데 도움을 줍니다.
ElasticCache의 주요 기능에 대한 이해
- 먼저 Redis는 다른 nosql과 같이 Sharding을 통해서 데이터를 분산 처리합니다. 이런 방법을 통해 DB의 Scale-out이 원활해집니다..
- ElasticCache에서 제공하는 주요 기능은 shard 내에 읽기 전용 복제 노드를 통해서 읽기 요청에 대한 시스템적 DB에 부하를 낮추고, 마스터 노드가 기능을 상실했을 경우, 레플리카 노드가 마스터 노드를 시스템에서 자동으로 대체할 수 있습니다.
- 위 과정을 통해 시스템 상에서 지속적으로 캐싱, 읽기 처리해야하는 요청에 부하를 막고, 사고에 대비할 수 있습니다.
- AWS 공식문서
데이터엔지니어링 관점(어떻게 데이터웨어하우스에 적재할까?)
1. AWS Database Migration Service(DMS) 활용
- Redis에서 데이터를 읽어와 DMS를 통해 데이터 웨어하우스로 이동
- Redis 데이터를 읽기 위해 AWS DMS는 특정 데이터 소스 엔드포인트를 설정하고 Redis 데이터베이스에 연결.
- 대상 엔드포인트로는 데이터 웨어하우스를 선택하고 매핑 및 변환 규칙을 구성하여 데이터 이동.
2. AWS Glue
- AWS Glue는 완전 관리형 ETL(Extract, Transform, Load) 서비스로, 데이터의 추출, 변환 및 로딩을 자동화.
- Redis 데이터를 AWS Glue를 사용하여 추출하고 변환한 다음 데이터 웨어하우스로 로드.
- Glue는 스키마 추론 기능을 제공하여 Redis 데이터의 구조를 자동으로 파악하고 변환 작업을 수행.
- Glue를 통해 변환된 데이터를 데이터 웨어하우스에 적재.
3. AWS lambda
- Redis 데이터를 읽기 위해 AWS Lambda 함수를 작성하고, 필요한 변환 작업을 수행한 후 데이터를 데이터 웨어하우스에 전달.
- 이를 위해 Lambda 함수는 Redis 클라이언트 라이브러리를 사용하여 데이터를 쿼리하고 데이터 웨어하우스로 전송.
AWS 시스템을 활용하지 않고서도, 충분히 Redis의 데이터를 데이터웨어하우스로 적재할 수 있을 것 같습니다. Spark을 활용해도 충분할 것 같은데, 데이터를 가져오는 상황에서 시스템의 부하를 어떻게 줄이는지에 대한 이해가 좀 필요할 것 같다. Redis의 특성상 실시간 데이터를 가져오고, 해당 데이터를 분석해보는 과정도 재밌을 것 같습니다. Spark의 스트리밍 방식을 이해하면 좀 더 수월하게 작업을 할 수 있을 것 같긴한데.. 일단 이 부분은 Redis나 Spark을 제대로 이해한 후에 토이 프로젝트 같은 걸로 진행해보겠습니다. 감사합니다:)
'AWS' 카테고리의 다른 글
[AWS REDSHIFT] AIRFLOW S3 → Redshift UPSERT 관련 에러('syntax error at or near "#"') (0) | 2023.06.17 |
---|---|
[AWS LAMBDA] DOCKER 활용 AWS LAMBDA 딥러닝 모델 적용 (1) | 2023.06.11 |
[S3] 버킷 생성 및 boto3 파일 업로드, 파일 읽기 실습 (0) | 2023.05.14 |
[S3] AMZON S3 기초개념 (2) | 2023.05.14 |
[EC2]AWS EC2 MOBAXTERM 연결 (0) | 2023.04.16 |