zoaseo
To Infinity And Beyond
zoaseo
전체 방문자
오늘
어제
  • 분류 전체보기 (760)
    • 개발이 좋아서 (378)
      • SAP가 좋아서 (0)
      • Java가 좋아서 (42)
      • Spring이 좋아서 (50)
      • JPA가 좋아서 (0)
      • QueryDSL이 좋아서 (26)
      • Docker가 좋아서 (7)
      • Redis가 좋아서 (7)
      • AWS가 좋아서 (5)
      • CI/CD가 좋아서 (6)
      • Troubleshooting이 좋아서 (4)
      • Kotlin이 좋아서 (7)
      • SQL이 좋아서 (6)
      • HTTP가 좋아서 (21)
      • JavaScript가 좋아서 (30)
      • TypeScript가 좋아서 (6)
      • Vue가 좋아서 (21)
      • Flutter가 좋아서 (61)
      • React가 좋아서 (20)
      • Redux(React)가 좋아서 (2)
      • Angular가 좋아서 (22)
      • HTML이 좋아서 (9)
      • CSS가 좋아서 (15)
      • PHP가 좋아서 (9)
      • Illustrator가 좋아서 (2)
    • 노력이 좋아서 (169)
    • 결과물이 좋아서 (14)
    • 코딩연습이 좋아서 (168)
      • 이론이 좋아서 (62)
      • SQL이 좋아서 (90)
    • 유용한 사이트가 좋아서 (28)
    • Github (2)

인기 글

티스토리

hELLO · Designed By 정상우.
zoaseo

To Infinity And Beyond

AWS ElasticCache 활용하기
개발이 좋아서/Redis가 좋아서

AWS ElasticCache 활용하기

2025. 1. 31. 12:59

현업에서 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

    티스토리툴바