[AWS] ElasticCache Redis 정의와 생성 및 EC2 연결

Noh Jihyeon·2023년 9월 30일
0

AWS

목록 보기
2/2
post-thumbnail

🔸 오늘의 목표: Redis 사용을 위한 ElasticCache 구현 및 EC2 연결하기

SpringBoot: 3.1.3
Build: Gradle
Java: 17
OS: Window
EC2: ubuntu




📌 오늘은 프로젝트에 적용했던 ElastiCache의 Redis 연결방법을 정리하고자 한다.

🙋‍♀ 나는 위의 "참고사이트"에서 도움을 많이 받았는데 EC2 서버가 달라서 내가 선택한 ubuntu 기준으로 다시 확인하고 SpringBoot에 어떻게 적용했는지 기록해 보려고 한다.




[1] AWS ElasticCache 개요

1) ElasticCache란?

- AWS(Amazon Web Services)에서 제공하는 완전 관리형 인메모리 데이터 스토어 서비스

👉 이 서비스를 사용하면 사용자는 인터넷을 통해 고성능, 확장 가능하고, 안정적인 인메모리 데이터 스토어를 설정, 관리 및 확장할 수 있다.



🤷‍♀ 완전 관리형 인메모리 데이터 스토어 서비스가 뭘까?

💬 완전 관리형 인메모리 데이터 스토어 서비스

👉 사용자가 인메모리 데이터 스토어 관련 작업을 거의 신경 쓰지 않아도 된다는 뜻으로, AWS가 백업, 패치 관리, 장애 복구 등을 처리한다.



🤷‍♀ 인메모리 데이터는 또 뭘까??

💬 인메모리 데이터

👉 인메모리 데이터는 컴퓨터의 주 기억장치인 RAM(Random Access Memory)에 저장되는 데이터를 의미한다.
인메모리 데이터는 디스크에 저장되는 데이터에 비해 빠르게 접근하고 처리할 수 있어, 높은 성능이 필요한 애플리케이션에서 사용된다.






- ElasticCache는 주로 Redis 및 Memcached와 같은 오픈 소스 인메모리 데이터 스토어 엔진을 사용한다.


- 보안: ElastiCache는 데이터 보안을 위한 다양한 기능을 제공한다. VPC(Virtual Private Cloud) 내에서 실행되며, SSL 암호화 및 인스턴스 수준의 접근 제어를 지원한다.

👉 VPC(Virtual Private Cloud)는 AWS에서 제공하는 가상의 개인 네트워크 환경이다.
사용자는 VPC 내에서 AWS 리소스를 실행할 수 있으며, 이 환경은 사용자가 정의한 IP 주소 범위, 서브넷, 라우팅 테이블, 네트워크 게이트웨이 등을 포함한다.

ElasticCache가 VPC 내에서 실행된다는 것은, ElasticCache가 사용자가 설정한 가상의 개인 네트워크 환경 내에서 운영되며, 이 환경 내에서만 ElasticCache에 접근할 수 있다는 의미이다.
이로 인해, ElasticCache는 인터넷에서 직접적으로 접근할 수 없기 때문에 보안이 향상된다.



📌 이 설명의 정확한 이해를 위해 아래와 같이 가정해보았다.

사용자 A: EC2 생성
사용자 B: ElasticCache 생성

Q. 사용자 B가 만든 ElasticCache를 사용자 A의 EC2에 연결할 수 있는가?

👉 불가


일반적으로, AWS 리소스들은 같은 AWS 계정 내의 리소스끼리만 연결할 수 있다. 
따라서, 사용자A가 생성한 EC2 인스턴스에 연결하려면 사용자A가 ElasticCache도 생성해야 한다.

물론 특정 설정과 권한 부여를 통해 다른 계정의 리소스와의 연결이 가능할 수는 있다.
예를 들어 Resource Access Manager를 사용하여 리소스를 공유하거나, 
IAM 역할을 사용하여 다른 계정의 리소스에 접근 권한을 부여할 수 있다. 
하지만 이러한 설정은 복잡하고 보안 리스크가 있을 수 있으므로, 신중하게 검토하고 구현해야 한다.
따라서 일반적으로 사용자 A의 EC2 인스턴스와 사용자 B의 ElasticCache 인스턴스를 직접 연결하는 것은 
허용되지 않는다고 보면 된다.



요약하자면

VPC는 AWS 리소스에 대한 보안을 강화해주고, ElasticCache는 고성능의 인메모리 데이터 스토어 서비스를 제공하여, 사용자는 편리하고 안전하게 서비스를 이용할 수 있다.




[2] ElastiCache 생성하기

1)AWS Console > ElastiCache > Redis 클러스터 생성



2) 1단계 클러스터 전체 설정



새 클러스터 구성 & 비활성화

👉 free-tier는 t2.micro 노드 1개에 대해 무료로 제공하기때문에 동적으로 노드갯수가 늘어나서 요금이 발생할 가능성이 있어서 비활성화를 권유한다.



이름(필수), 설명(선택), 위치(AWS 클라우드 선택)



노드 유형 선택


Free-tier를 사용한다면 노드유형을 t2.micro로 셋팅해야 별도로 요금이 부과되지 않는다.

복제본의 갯수를 2개로 하면 Free-tier의 경우 750(t2.micro 무료 제공시간)/3(master + 복제본2)시간으로 소모된다.

따라서 비용이 부과될 수 있어서 0으로 설정하는 것을 권장한다.



서브넷 설정

"다음" 클릭



3) 2단계 클러스터 전체 설정

보안그룹 생성

  • Ec2 - 보안 그룹 - 보안 그룹 생성을 통해 redis의 port만 열어주기



EC2 보안그룹에서 설정 후 ElastiCache에 보안 그룹 추가

나머지는 기본값으로 설정 후 생성하기 완료




[2] AWS - EC2에서 Elastic Cache redis 접속

1) EC2에 Redis 설치 및 확인

EC2 접속 후 아래의 명령어를 하나씩 입력하기

  • Window Gitbash + ubuntu 서버
sudo apt-get update
sudo apt-get install build-essential wget

wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz

cd redis-stable
make distclean 
make

src/redis-cli -c -h yourcachecluster.yourregion.cache.amazonaws.com -p 6379

set a "hello"

📌 Redis 접속방법

기본 엔드포인트의 주소를

src/redis-cli -c -h yourcachecluster.yourregion.cache.amazonaws.com -p 6379

표시한 부분에 넣어주기


핑 테스트




[3] SpringBoot에 연결하기

1) application.properties에 두 줄 추가하기

spring.data.redis.host={본인 엔드포인트 입력}
// ex. spring.data.redis.host=abc.cache.amazonaws.com

spring.data.redis.port=6379



2) build.gradle 추가

    //Redis
    implementation 'org.springframework.boot:spring-boot-starter-data-redis'

완료~!~!

profile
꼭꼭 씹어서 소화시키는 맛있는 코딩

0개의 댓글