꾸준하게, 차근차근

[Redis] Docker Compose로 Redis + Spring Boot 띄우기 (로컬) 본문

Redis

[Redis] Docker Compose로 Redis + Spring Boot 띄우기 (로컬)

jn4624 2024. 10. 26. 00:00

백엔드 개발을 하다 보면 Docker를 자주 활용하는 것을 알 수 있다.

따라서 이번엔 Docker Compose로 Redis와 Spring Boot를 한 번에 띄울 수 있게 구성을 진행해보려 한다.

 

1. Dockerfile 만들기

Spring Boot 프로젝트 root 디렉토리에 Dockerfile을 생성한다.

# JDK17을 사용해서
FROM openjdk:17-jdk

# 빌드한 파일을 복사해와서
COPY build/libs/*SNAPSHOT.jar app.jar

# 복사한 파일을 기반으로 실행
ENTRYPOINT ["java", "-jar", "/app.jar"]

 

2. compose.yml 파일 만들기

이 파일도 Spring Boot 프로젝트 root 디렉토리에 생성하면 된다.

services: 
  api-server:
    # Dockerfile을 기준으로 빌드를 할거라 Dockerfile의 경로 설정
    build: .
    ports:
      - 8080:8080
    depends_on:
      cache-server:
        # Redis가 정상적으로 구동한 뒤에 api 서버를 구동한다는 설정
        condition: service_healthy
  cache-server:
    image: redis
    ports:
      - 6379:6379
    # Redis가 정상적으로 구동되었음을 확인하는 설정
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      retries: 10

 

Redis가 정상적으로 구동한 뒤에 api 서버를 구동해야 하는 이유

api서버가 구동되면서 Redis와의 연결을 시도하는데 이때, Redis가 구동되기 전이라면 Error가 발생해 정상적인 서버 구동이 어렵기 때문이다.

 

3. 기존에 실행되고 있는 Redis 종료

포트 충돌이 일어나기 때문에 기존에 실행해두었던 Redis를 종료해야 한다.

# 로컬에서 실행되고 있는 Redis 종료 명령어
brew services stop redis

# 정상 종료되었는지 확인하는 명령어
brew services info redis

 

4. 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 # compose에 명시한 이름으로 변경
      port: 6379

 

5. Docker 컨테이너로 띄워보자!

Spring Boot 다시 빌드

# 테스트 생략하고 Spring Boot 빌드하는 명령어
./gradlew clean build -x test

 

Docker 컨테이너로 띄우기

# Docker 컨테이너로 띄우는 명령어
docker-compose up --build -d

참고

Docker 컨테이너로 띄우기 전에 Docker 데몬이 실행되고 있는지 확인을 하자.

그렇지 않으면 이런 메세지를 만나게 될 것이다.

 

해결 방법은

  • Docker Desktop을 실행하여 Docker 데몬을 활성화하기
  • docker 서비스 시작하기

 

잘 떴을까?

# Docker 상태 확인을 위한 명령어
docker ps

 

Docker Desktop을 실행해 Docker 데몬을 활성화했다면 Docker Desktop에서도 확인이 가능하다!

 

6. API 확인까지 해야지?

서버가 잘 띄워졌다고 해도 API가 정상 동작하는지까지 확인해봐야 한다!

 

정상이군 😆

참고

Docker의 실시간 로그를 확인하는 방법을 알아두자!

백엔드 개발자에게 로그란 중요한 것이니까!

# Docker의 실시간 로그 확인하는 명령어
docker compose logs -f

 

최초 요청을 처리한 로그를 찾아봤는데 실시간으로 문제 없이 확인되는 것을 알 수 있다!

 

Reference.

https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-redis-%EC%9E%85%EB%AC%B8-%EC%84%B1%EB%8A%A5-%EC%B5%9C%EC%A0%81%ED%99%94

 

비전공자도 이해할 수 있는 Redis 입문/실전 (조회 성능 최적화편) 강의 | JSCODE 박재성 - 인프런

JSCODE 박재성 | 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 'Redis 입문/실전 (조회 성능 최적화편)' 강의를 만들어봤습니다!, 🤬 에라이, 못 해먹겠네!비전공자로 개발

www.inflearn.com