✅ 1. 폴더 및 프로젝트 준비
mkdir springboot-mysql-demo
cd springboot-mysql-demo
# (아래는 start.spring.io에서 압충 해제 후 옮긴 경우)
- Tip:
- Spring Boot 프로젝트는 start.spring.io에서 생성
- Java 17, DevTools, Web, JPA, MySQL Driver 선택
- src/main/java/... 아래 코드 작성
✅ 2. 간단한 컨트롤러 작성
📄 src/main/java/.../AppController.java
@RestController
public class AppController {
@GetMapping("/")
public String home() {
return "Hello, World";
}
}
✅ 3. DB 연결 정보 (application.yml)
📄 src/main/resources/application.yml
(# 네트워크 이슈 먼저 경험하고 수정하도록 아래 두가지 모두 기재!)
1) 잘못된 예시 (초기 실수!)
srping:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: pwd1234
driver-class-name: com.mysql.cj.jdbc.Driver
- 설명:
- localhost:3306은 "Spring Boot 컨테이너 내부의 3306포트"를 의미해서, 실제 MySQL 컨테이너에 접근할 수 없음.
✅ 4. Dockerfile 작성
📄 Dockerfile
FROM openjdk:17-jdk
COPY build/libs/*SNAPSHOT.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
✅ 5. compose.yml 작성
📄 compose.yml
services:
app:
build: .
ports:
- 8080:8080
depends_on:
my-db:
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", "-h", "localhost"]
interval: 5s
retries: 10
- 설명:
- 서비스명: app (Spring Boot), my-db (MySQL)
- depends_on/healthcheck: DB가 살아있는지 확인 후 app 컨테이너 시작
✅ 6. Spring Boot 빌드
gradlew clean build
- 설명:
- build/libs/*.jar 가 생기면 성공
✅ 7. 컨테이너 실행
docker compose up -d --build
- Tip:
- 두 컨테이너가 동시에 백그라운드로 실행됨
✅ 8. 상태 확인
docker compose ps
docker logs [Spring Boot 컨테이너 ID]
- 설명:
- Spring Boot가 MySQL 연결에 실패할 수 있음
- logs에서 DB 연결 오류 확인
❗ 문제 발생!
- Spring Boot 컨테이너에서 "localhost:3306"으로 MySQL에 접근하려 하면, 실제로는 Spring Boot 컨테이너 자신의 3306 포트만 바라보기 때문에 연결 실패.
✅ 9. 네트워크 해결법: Service 이름으로 접근!
📄 application.yml
srping:
datasource:
url: jdbc:mysql://my-db:3306/mydb
username: root
password: pwd1234
driver-class-name: com.mysql.cj.jdbc.Driver
- 설명:
- my-db 는 compose.yml의 서비스명!
- Docker Compose 네트워크에서는 서비스며응로 바로 접근 가능!
✅ 10. 수정 후 다시 실행
#
gradlew clean build
# 실행중인 컨테이너, compose 삭제
docker compose down
# 도커 컴포즈 빌드
docker compose up -d --build
# 실행 확인
docker ps
- 설명:
- 두 컨테이너 모두 Up, 브라우저에서 http://localhost:8080 확인
🔍 핵심 포인트
항목 | 설명 |
서비스명 접근 | jdbc:mysql://my-db:3306/mydb (compose 서비스명) |
healthcheck | MySQL 컨테이너가 준비되면 app이 실행되도록 |
volumes | MySQL 데이터 영구 저장 |
depends_on | DB 먼저, 그 다음 Spring Boot |
✅ 구조 흐름도
[Spring Boot 컨테이너(app)] ←──(네트워크)──→ [MySQL 컨테이너(my-db)]
│
└─▶ localhost:8080 (브라우저 접근)
🧠 실전 팁
- docker compose down 하면 데이터는 그대로 (mysql_data 폴더에 저장)
- DB 접속 확인은 Workbench, DBeaver 등으로 host: localhost, port: 3306, user: root, pw: pwd1234 로 바로 가능
- application.yml은 곡 서비스명 기준으로 DB 주소 작성
'코딩 > Docker' 카테고리의 다른 글
🐳 Docker 프로젝트에 꼭 필요한 .dockerignore 설정 정리 (Node.js 백엔드 예시) (0) | 2025.07.29 |
---|---|
🐳 Docker Compose로 Spring Boot, MySQL, Redis 컨테이너 동시에 실행하기 (2) | 2025.07.18 |
🐳 Docker Compose로 MySQL, Redis 컨테이너 동시에 실행하기 (0) | 2025.07.15 |
🐳 Docker Compose로 프론트엔드 (HTML, CSS, Nginx) 실행하기 (0) | 2025.07.15 |
🐳 Docker Compose로 Next.js 프론트엔드 실행하기 (0) | 2025.07.15 |
댓글