JSCODE Logo
프로그래밍 과외블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2025 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

[실습] Spring Boot, MySQL, Redis 컨테이너 동시에 띄워보기

JSCODE 박재성
JSCODE 박재성
2025-12-01
author
JSCODE 박재성
category
Docker
createdAt
Dec 1, 2025
series
비전공자도 이해할 수 있는 Docker 입문
slug
run-spring-boot-and-mysql-and-redis-together
type
post
updatedAt
Dec 1, 2025 12:07 PM

✅ 1. Spring Boot 프로젝트에 Redis 연결 코드 추가하기

build.gradle
... dependencies { ... implementation 'org.springframework.boot:spring-boot-starter-data-redis' }
 
application.yml
spring: datasource: url: jdbc:mysql://my-db:3306/mydb username: root password: pwd1234 driver-class-name: com.mysql.cj.jdbc.Driver data: redis: host: localhost port: 6379
 
RedisConfig
@Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); return template; } }
 
AppController
@RestController public class AppController { @Autowired private RedisTemplate<String, Object> redisTemplate; @GetMapping("/") public String home() { redisTemplate.opsForValue().set("abc", "def"); return "Hello, World!"; } }
 
compose.yml
services: my-server: build: . ports: - 8080:8080 depends_on: my-db: condition: service_healthy my-cache-server: condition: service_healthy my-db: image: mysql environment: MYSQL_ROOT_PASSWORD: pwd1234 MYSQL_DATABASE: mydb volumes: - ./mysql_data:/var/lib/mysql ports: - 3306:3306 healthcheck: test: [ "CMD", "mysqladmin", "ping" ] interval: 5s retries: 10 my-cache-server: image: redis ports: - 6379:6379 healthcheck: test: [ "CMD", "redis-cli", "ping" ] interval: 5s retries: 10
 
 

✅ 2. Docker 컨테이너로 띄워보기

$ ./gradlew clean build $ docker compose down $ docker compose up --build -d
위 명령어를 통해 컨테이너를 띄운 뒤에 localhost:8080으로 요청을 해보면 아래와 같은 에러가 발생한다.
 
 
notion image
notion image
Connection refused 에러가 발생한 이유는 Redis와 연결이 잘 안 됐기 때문이다. 왜 안됐는 지 application.yml 파일을 다시 한 번 살펴보자.
 
 
application.yml
spring: datasource: url: jdbc:mysql://my-db:3306/mydb username: root password: pwd1234 driver-class-name: com.mysql.cj.jdbc.Driver data: redis: host: localhost host: my-cache-server port: 6379
각 컨테이너는 각자의 네트워크를 가지고 있기 때문에, localhost가 아니라 Redis가 실행되고 있는 컨테이너로 통신을 해야 한다. Redis가 실행되고 있는 컨테이너의 주소는 service 이름으로 표현한다고 했다. compose.yml에서 Redis가 실행되고 있는 컨테이너의 service 이름을 my-cache-server라고 이름 붙였다.
 
 
위와 같이 코드를 수정한 뒤에 다시 한 번 실행시켜보자.
$ ./gradlew clean build $ docker compose down $ docker compose up --build -d
 
 
notion image
에러가 발생하지 않고 정상적으로 실행되는 걸 확인할 수 있다.
 
 

✅ 그림으로 이해하기

notion image
 
author
category
Docker
createdAt
series
비전공자도 이해할 수 있는 Docker 입문
slug
type
series-footer
updatedAt
Jan 12, 2026 12:04 AM
📎
이 글은 비전공자도 이해할 수 있는 MySQL 성능 최적화 입문/실전 (SQL 튜닝편) 강의의 수업 자료 중 일부입니다.