카테고리 없음

로컬에서 docker compose - redis, spring boot 띄우기 및 AWS ElastiCache 세팅

느리지만 꾸준하게 2024. 10. 14. 20:04

먼저 dockerfile, compose.yml 만들어줍니다.

FROM openjdk:17-jdk

COPY build/libs/*SNAPSHOT.jar app.jar

ENTRYPOINT ["java", "-jar", "/app.jar"]

 

 

compose.yml 

services:
  api-server:
    build: .
    ports:
      - 8080:8080
    depends_on:
      cache-server:
        condition: service_healthy
  cache-server:
    image: redis
    ports:
      - 6379:6379
    healthcheck:
      test: [ "CMD", "redis-cli", "ping" ]
      interval: 5s
      retries: 10

 

 

Mac의 로컬 환경에서 테스트 하고 있던 기존 Redis 및 Spring Boot 종료시켜줍니다.

brew services stop redis 
brew services info redis # 잘 종료됐는 지 확인

lsof -i:8080 # 8080번 포트 실행되고 있는 프로세스 확인
kill {Spring Boot의 PID} # 프로세스 종료
lsof -i:8080 # 잘 종료됐는 지 확인

 

 

spring boot에서 관리하고 있는 application.yml파일에 docker와 redis 정보를 반영해줍니다.

# local 환경
spring:
  profiles:
    default: local
  datasource:
    url: jdbc:mysql://host.docker.internal:3306/mydb
    username: ~~~
    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://기본 엔드포인트~~/mydb
    username: ~~~
    password: ~~~

 

 

Docker desktop을 실행시킨 후 아래 명령어로 Docker 컨테이너를 한번 띄워봅니다.

./gradlew clean build -x test
docker compose up --build -d

docker ps -a # 띄워졌는지 확인
docker compose log -f # 실시간 로그 확인

 

 

이제 AWS ElastiCache 을 세팅 해봅시다.

 

1. aws ElastiCache 서비스로 들어가서 지금 시작 버튼으로 Redis OSS를 클릭 (Memcached에 대한 자세한거는 나중에 알아봅시다.)

 

 

 

클러스터 설정으로 구성으로 배포 옵션은 자체 캐시 설계 생성 방법은 클러스터 캐시를 설정해줍니다.

 

여기서 클러스터라 함은 여러 캐시 서버를 구성하는 한 단위의 그룹을 뜻합니다. 여기서 하나의 캐시 서버는 노드입니다.

 

 

클러스터 모드는 비활성화 해줍니다.(대규모 트래픽을 다루는용이 아니고 학습용으로 ElasticCache를 사용하고 있으므로)

 

클러스터 정보를 입력해줍니다.

 

 

위치도 설정해줍니다.

 

여기서 다중AZ는 여러 Region에 캐시 서버를 나눠서 셋팅해두는 것입니다. 하나의 특정 Region에서 재난이 발생하면 서비스가 중단될 수도 있다는 걸 방지하는 기능인데 재난이 발생할 가능성이 아주 적은데 비해서 비용이 추가로 발생하기 때문에 재난으로 서비스가 중단되는 게 아니라면 사용하지 않으셔도 됩니다.

 

자동 장애 조치는 클러스터 내부에 특정 노드가 장애가 났을 때 정상 노드로 교체하는 기능인데 내부에 여러 장애이슈가 생기게 되면 스스로 고치는 기능입니다.

 

 

 

클러스터 설정 세팅 해봅시다. 복제본 개수는 최소한의 비용을 고려하기 때문에 0으로 해줍니다.

  • 복제본 개수가 늘어날수록 노드가 늘어납니다. ElasticCache는 노드당 가격을 매기고 있고
  • 복제본 개수를 1 이상 써야만 FailOver 기능을 활용할 수 있어서 배포 환경에서는 복제본 개수를 1개 이상 만드는 경우가 많습니다.

 

 

 

기존 서브넷 그룹을 선택해주고 가용 영역 배치는 설정하지 않고 다음으로 넘어가줍니다.

 

 

보안도 설정하지말고 그냥 넘어가줍니다.

 

 

EC2 서비스로 가서 보안그룹도 생성해줍니다. 6379 포트로 모든 IP가 접근하게 허용하면 보안적으로 위험하지 않습니다. ElastiCache

가 기본적으로 같은 VPC 내에서만 접근을 할 수 있고 외부 IP에 대해서는 접근하는게 막혀있기 때문입니다. 즉 보안 그룹에서 모든 IP를 대상으로 허용한다 하더라도 외부에서 접근할 수 없어서 괜찮습니다.

 

 

보안그룹 또한 세팅해줍니다.

 

 

백업 설정 또한 해제해줍니다. 임시로 데이터를 저장하는 캐싱 용도로 쓸 거기 때문에 백업 옵션은 해제해줍니다.

 

나머지 옵션은 그대로 두고 다음으로 넘어가서 생성을 눌러줍니다.