캐싱은 엔지니어가 데이터를 빠르게 저장하고 액세스할 수 있도록 하는 강력한 도구입니다. 캐싱을 통해 엔지니어는 데이터 소스 용량을 확장하고, 예측 불가능한 워크로드 급증을 완화하며, 외부 데이터 소스에 장애가 발생하더라도 데이터를 계속 제공하여 애플리케이션 가용성을 향상시킬 수 있습니다.
분산 캐싱의 일반적인 사용 시나리오는 일반적으로 다음과 같습니다.
-
확장성이 뛰어난 웹 서비스에서 사용자 세션 데이터를 저장하고 검색합니다.
-
쿼리 속도를 높이고 기본 데이터베이스의 과부하를 방지하려면 관계형 또는 비관계형 데이터베이스 앞에 캐싱 계층을 배포합니다.
Redis는 분산 캐시 솔루션으로 널리 사용되는 오픈 소스 NoSQL 데이터 저장 시스템으로, AWS 빅데이터 및 데이터베이스 아키텍처에서 중요한 역할을 합니다.
이 문서에서는 Redis에 대해 자세히 알아보고 AWS에서 ElastiCache Redis를 배포하여 프로젝트에서 분산 캐싱의 낮은 지연 시간과 높은 성능을 활용하는 방법을 설명합니다.
Redis란 무엇인가요?
Redis는 Redis 커뮤니티에서 지속적으로 개발 및 유지 관리되는 오픈소스 인메모리 데이터 구조 캐시 및 스토리지 시스템입니다. 고속 인메모리 데이터베이스 또는 애플리케이션 캐시로 널리 사용됩니다. Redis는 캐시와 데이터베이스 기능을 모두 수행할 수 있다는 점에서 독보적입니다.
Redis는 데이터 세트를 메모리에 저장하고, 지속성이 필요하거나 재시작 후 복구가 필요할 때만 디스크에 기록합니다. 이러한 접근 방식을 통해 Redis는 읽기 및 쓰기 작업에 대해 밀리초 수준의 지연 시간을 구현하고 다양한 데이터 구조, 내장 복제 및 클러스터링 기능을 지원합니다.
운영 관점에서 볼 때 Redis를 배포, 모니터링, 확장하는 것은 어려울 수 있지만, Redis용 AWS ElastiCache와 같은 관리형 서비스를 사용하면 이러한 작업이 훨씬 쉬워집니다.
Redis용 Amazon ElastiCache란 무엇인가요?
AWS ElastiCache는 Redis와 Memcached를 지원하는 관리형 캐싱 서비스입니다. Redis의 경우, ElastiCache는 사용자가 고성능 분산형 인메모리 데이터 스토리지 클러스터를 신속하게 배포, 관리 및 확장할 수 있는 완전 관리형 플랫폼을 제공합니다.
이 서비스는 머신 유지 관리, 소프트웨어 패치, 모니터링, 장애 복구 및 백업의 운영 부담을 크게 줄여줍니다. ElastiCache는 네이티브 Redis 데이터 구조, API 및 클라이언트와 완벽하게 호환되므로 기존 Redis 애플리케이션을 코드 변경 없이 마이그레이션할 수 있습니다.
ElastiCache는 클러스터링 모드와 비클러스터링 모드를 모두 지원하며, 자동 장애 조치 및 교차 AZ 배포를 통해 향상된 고가용성과 안정성을 제공합니다. 온라인 클러스터 조정 기능을 통해 사용자는 다운타임 없이 필요에 따라 용량을 확장하거나 축소할 수 있습니다.
보안 측면에서 ElastiCache는 VPC 지원 기능을 내장하고 있으며 전송 중인 데이터와 저장 중인 데이터의 암호화를 제공하는 동시에 Redis의 AUTH 인증 메커니즘과 호환됩니다.
Redis용 Amazon ElastiCache를 시작하는 방법
1단계: AWS 환경 구성
Redis에 ElastiCache를 사용하기 전에 AWS 환경을 준비해야 합니다.
-
EC2 인스턴스 배포:
이 인스턴스는 샘플 웹 애플리케이션을 실행하는 데 사용됩니다. 구성을 간소화하기 위해 EC2와 ElastiCache 클러스터를 동일한 VPC에 배포할 수 있습니다.
자세한 내용은 AWS 공식 문서의 EC2 생성 프로세스를 참조하세요. -
EC2 공용 IPv4 DNS 주소를 복사합니다.이는 나중에 샘플 애플리케이션에 액세스할 때 사용됩니다.
-
보안 그룹 규칙 구성:
-
동일한 보안 그룹에서 Redis 기본 포트(6379)에 대한 액세스를 허용합니다.
-
로컬 컴퓨터에서 웹 애플리케이션에 액세스하려면 모든 IP(0.0.0.0/0)에서 TCP 포트 5000에 대한 액세스를 허용합니다.
-
2단계: AWS ElastiCache Redis 클러스터 생성
-
열려 있는 ElastiCache 콘솔"지금 시작하기"를 클릭하세요. EC2 인스턴스와 동일한 리전을 선택했는지 확인하세요.
-
새 클러스터를 만들려면 다음을 선택하세요. 레디스 엔진으로서. 확장이 필요한 경우 다음을 활성화할 수 있습니다. 클러스터 모드(최대 500개의 마스터 노드를 지원합니다).
-
기본 가용성 영역 위치를 선택하고 클러스터 이름을 지정합니다(예:
엘라스틱에이크-레디스). -
예를 들어 인스턴스 유형을 선택하세요. 캐시.t2.micro(무료 계층에서 이용 가능).
-
기본 구성을 유지하거나 필요에 따라 엔진 버전, 여러 복제본, 여러 가용성 영역 등의 옵션을 조정할 수 있습니다.
-
존재하다 고급 설정 VPC 폴더에 새로운 서브넷 그룹을 만들고 EC2와 동일한 VPC를 선택해야 합니다.
-
존재하다 보안 패널에서 EC2와 동일한 보안 그룹을 선택합니다.
-
자동 백업 옵션을 끌 수 있습니다(이 예에서는 필요하지 않습니다).
-
구성을 확인한 후 클릭하세요 만들다.
-
생성이 완료되면 콘솔에 복사하세요 1차 종료점 웹 애플리케이션이 Redis에 연결하는 데 사용할 주소입니다.
3단계: 웹 애플리케이션의 세션 저장소로 Redis 사용
Redis는 확장 가능한 웹 애플리케이션의 세션 관리 시나리오에서 사용자 세션 데이터를 저장하고 유지하는 데 자주 사용됩니다. 다음 예제는 Flask 애플리케이션의 세션 저장소로 Redis를 사용하는 방법을 보여줍니다.
-
EC2 인스턴스에 대한 SSH 연결다음 명령을 실행하여 종속성을 설치합니다.
sudo yum install git -y
sudo yum install python3 -y
sudo pip3 가상환경 설치
git 클론 https://github.com/aws-samples/amazon-elasticache-samples/
CD 아마존-엘라스틱케시-샘플/세션-스토어
가상 환경 venv
원천 ./venv/bin/활성화
pip3 설치 -r requirements.txt
-
환경 변수를 설정합니다.
내보내다 REDIS_URL="redis://<기본 엔드포인트>"
내보내다 FLASK_APP=example-4.py
내보내다 SECRET_KEY=무작위 값
-
Flask 애플리케이션을 실행합니다.
플라스크 실행 -h 0.0.0.0 -p 5000 --reload
브라우저를 열고 방문하세요
http:// :5000, 기본적인 세 개의 엔드포인트를 볼 수 있습니다./,/로그인,/로그아웃.로그인 후 페이지를 새로고침하면 방문자 수가 증가하는 것을 확인할 수 있습니다. 10초 이내에 새로고침하지 않으면 카운터가 초기화됩니다.
이 애플리케이션은 사용자가 로그인할 때 세션 데이터를 저장하기 위해 고유한 Redis 키를 생성하고 설정합니다. TTL(10초), 만료 후 자동으로 지워집니다.
요약하다
캐싱 솔루션을 구현하면 클라우드 기반 애플리케이션의 전반적인 성능을 크게 개선하고 액세스 지연으로 인해 발생하는 비용과 비효율성을 줄일 수 있습니다.
사용 Redis용 AWS ElastiCacheAWS 호스팅의 장점을 활용해 운영 부담을 줄이는 동시에 Redis의 속도, 단순성, 유연성을 누릴 수 있습니다.
또한, 결합된 NetApp 클라우드 볼륨 ONTAPAWS, Azure, Google Cloud에서 엔터프라이즈급 스토리지 관리 기능을 제공하며 고가용성, 데이터 보호, Kubernetes 통합 등의 기능을 지원합니다.
클라우드에서 실행되는 NoSQL 데이터베이스나 빅데이터 분석 클러스터의 경우, 지속적인 디스크 데이터 지원을 제공하는 데 사용할 수도 있어 복잡한 Redis 클러스터의 스토리지 관리를 보다 효율적으로 만들 수 있습니다.

