현업에서 EC2에 Redis를 설치해서 쓰지않고 ElastiCache를 쓰는 이유
현업에서 EC2에 Redis를 직접 설치해서 사용하는 경우는 드물다. 일일이 Redis를 설치하고 셋팅하고 관리하면서 확장까지 하려면 신경쓸 게 생각보다 많다. 하지만 ElastiCache를 사용하면 셋팅도 쉽게할 수 있고, 확장도 쉽게 할 수 있고, 기본적인 모니터링 기능도 제공해주고, 장애가 날 가능성도 훨씬 적다. 이런 이유로 인해 현업에서는 ElasitiCache를 많이 활용한다.
AWS ElastiCache 셋팅하기
1. ElastiCache 서비스로 들어가기
2. 캐시 생성을 위해 ‘지금 시작’ 버튼 누르기
3. 클러스터 설정에서 ‘구성’ 선택하기
- 여기서 얘기하는 클러스터(cluster)란 여러 캐시 서버를 이루는 한 단위의 그룹을 뜻한다. 여기서 하나의 캐시 서버를 노드(Node)라고 얘기한다.
4. ‘클러스터 모드’ 설정하기
- 대규모 트래픽 처리를 위한 ‘클러스터 모드’라는 게 있다. 하지만 어지간한 규모의 트래픽이 발생하는 서비스가 아니라면 ‘클러스터 모드’를 쓸 일은 없다. 나중에 관심이 있으면 따로 공부하도록 하자. 레디스를 입문할 때 우선순위가 높은 기능은 아니다.
5. ‘클러스터 정보’ 입력하기
6. ‘위치’ 설정하기
- **다중 AZ(Multi AZ)**는 여러 Region에 캐시 서버를 나눠서 셋팅해두는 것이다. 특정 Region에서 재난이 발생해 서비스가 중단될 수도 있는 걸 방지하는 기능이다. 하지만 재난이 발생할 가능성은 아주 적은데 비해서 비용은 추가로 발생하기 때문에, 재난으로 인해 서비스가 중단되는 게 치명적인 경우가 아니면 사용하지 말자.
- **자동 장애 조치(Failover)**는 클러스터 내부에 특정 노드(Node)가 장애가 났을 때 정상 노드(Node)로 교체하는 기능이다. 쉽게 얘기해서 내부에 장애가 일어나면 스스로 고치는 기능이다.
7. ‘클러스터 설정’ 셋팅하기
- 최소한의 비용으로 테스트하기 위해 복제본 개수는 0으로 하자.
- 복제본 개수가 늘어날수록 노드(Node)가 늘어난다. ElastiCache는 노드(Node)당 가격을 매기고 있다.
- 복제본 개수를 1 이상 써야만 Failover 기능을 활용할 수 있다. 이 때문에 프로덕션에서는 복제본 개수를 1개 이상 만드는 경우가 많다.
8. 기존 서브넷 그룹 선택하기
9. ‘가용 영역 배치’는 설정하지 않고 다음으로 넘어가기
10. ‘보안’ 설정하지 않기
- 현재로썬 중요한 기능이 아니기 때문에 체크하지 않고 넘어가자. 이 옵션을 체크하지 않는다고 해서 보안적으로 치명적인 건 아니니 걱정하지 말자.
11. EC2 서비스로 가서 보안그룹 생성하기
- ElastiCache는 기본적으로 같은 VPC 내에서만 접근을 할 수 있고, 외부 IP에 대해 접근하는 게 막혀있다. 따라서 보안 그룹에서 모든 IP를 대상으로 허용한다고 하더라도 외부에서 접근할 수는 없으니 걱정하지 않아도 된다.
12. ‘보안그룹’ 셋팅하기
13. ‘백업’ 설정 해제하기
- 임시로 데이터를 저장하는 캐싱 용도로 쓸 거기 때문에 백업 옵션은 해제하자.
14. 나머지 옵션은 그대로 두고 다음으로 넘어가기
15. ‘생성’ 누르기
AWS ElastiCache가 정상적으로 잘 생성됐는 지 확인
1. ElastiCache 대시보드 들어가기
2. ‘기본 엔드포인트’ 주소에서 포트 번호 빼고 복사하기 (리더(Reader) 엔드포인트는 읽기 전용 주소이다.)
3. EC2에 들어가서 ElastiCache에 접속해보기
# redis-cli -h {호스트 주소}
$ redis-cli -h {ElastiCache의 기본 엔드포인트}
4. 로컬 환경에서 접속되는 지 테스트해보기
- 접속이 안 되는 걸 알 수 있다. 왜냐하면 ElastiCache는 같은 VPC일 때만 접속할 수 있기 때문이다.
Spring Boot에 ElastiCache 연결하기
1. application.yml 파일 수정하기
# local 환경
spring:
profiles:
default: local
datasource:
url: jdbc:mysql://host.docker.internal:3306/mydb
username: root
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
data:
redis:
host: cache-server
port: 6379
logging:
level:
org.springframework.cache: trace
---
# prod 환경
spring:
config:
activate:
on-profile: prod
datasource:
url: jdbc:mysql://instagram-db.coseefawhrzc.ap-northeast-2.rds.amazonaws.com:3306/mydb
username: admin
password: password
data:
redis:
host: instagram-cache-server.s8nyjv.ng.0001.apn2.cache.amazonaws.com
port: 6379
2. Github Repository에 Push하기
3. EC2에서 Git Pull 받기
$ cd {프로젝트 경로 }
$ git pull origin main
4. Spring Boot 프로젝트 실행시키기
$ ./gradlew clean build -x test
$ cd build/libs
$ java -jar -Dspring.profiles.active=prod {빌드된 jar 파일명}
5. Postman으로 테스트해보기
6. 실제 ElastiCache에 캐시가 저장되고 있는 지 확인해보기
$ redis-cli -h {ElastiCache의 기본 엔드포인트}
$ keys *
$ get getBoards::boards:page:1:size:10
$ ttl getBoards::boards:page:1:size:10
'개발이 좋아서 > Redis가 좋아서' 카테고리의 다른 글
Docker Compose로 Redis + Spring Boot 띄우기 (0) | 2025.01.31 |
---|---|
부하 테스트를 통해 Redis 적용 전 후 성능 비교하기 (1) | 2025.01.31 |
AWS EC2에서 Redis 활용하기 (0) | 2025.01.31 |
로컬 환경에서 Spring Boot + Redis로 구현하기 (0) | 2025.01.31 |
Redis 캐싱 전략 (0) | 2025.01.28 |