Spring Boot에 MySQL 연결하기

2026. 3. 26. 12:29·Dev/Spring

개요

본 게시글에서는 개발용으로 사용하던 H2 InMemory DB를 MySQL로 교체하는 과정을 다룹니다.
H2는 서버를 재시작하면 Data가 사라지는 반면, MySQL은 영구적으로 Data를 저장합니다.


H2 vs MySQL 비교

항목 H2 MySQL
설치 불필요 (Liberary만 추가) 별도 설치 필요
DATA 유지 서버 재시작 시 사라짐 영구 저장
용도 개발 초기, 테스트 실제 서비스

1. MySQL 설치

Homebrew를 이용해 MySQL을 설치.

brew install mysql

설치 후 MySQL 서비스를 시작.

brew services start mysql

2. 데이터베이스 생성

MySQL에 접속해 프로젝트에서 사용할 DB를 생성합니다.

mysql -u root

접속 후 아래 명령어를 실행.

DB 이름은 마음대로 정해도 됩니다. 저는 todo_db로 하겠습니다.

CREATE DATABASE todo_db;
SHOW DATABASES;
exit;

SHOW DATABASE를 입력했을 때 todo_db 가 목록에 표시되면 정상적으로 생성된 것입니다.


3. build.gradle 수정

dependencies 블록에 MySQL 드라이버를 추가하고, 기존 H2 의존성을 제거합니다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    runtimeOnly 'com.mysql:mysql-connector-j'
}

참고: runtimeOnly 는 컴파일 시점에는 필요 없고 실행 시점에만 필요한 의존성에 사용.
MySQL 드라이버는 코드에서 직접 참조하지 않고 JPA가 내부적으로 사용하므로 runtimeOnly 로 지정.


4. application.properties 수정

기존 H2 설정을 MySQL 설정으로 교체하겠습니다.

spring.application.name=demo

# MySQL 설정
spring.datasource.url=jdbc:mysql://localhost:3306/todo_db
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=

# JPA 설정
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect

설정 항목 설명

항목 설명
spring.datasource.url MySQL DB 접속 주소
spring.datasource.driver-class-name MySQL JDBC Driver 클래스명
spring.datasource.username DB 접속 계정
spring.datasource.password DB 접속 비밀번호
spring.jpa.hibernate.ddl-auto=update 서버 시작 시 Table이 없으면 생성, 있으면 유지
spring.jpa.show-sql=true JPA가 실행하는 SQL을 터미널에 출력
spring.jpa.properties.hibernate.dialect MySQL 문법에 맞는 SQL을 생성하도록 지정

H2와 ddl-auto 차이: H2에서는 create-drop (서버 시작 시 생성, 종료 시 삭제)을 사용했지만,
MySQL에서는 update (테이블이 없으면 생성, 있으면 유지)를 사용해 데이터를 영구 보존.


5. 빌드 및 실행

./gradlew build -x test

빌드 성공 후 서버를 실행하면 터미널에 아래와 같이 출력됩니다.

Started DemoApplication in x.xxx seconds

6. 연결 확인

Postman에서 POST로 Todo를 생성한 후 서버를 재시작하고 GET으로 조회했을 때
데이터가 그대로 남아있으면 MySQL 연결이 성공적으로 완료된 것입니다.


트러블슈팅

저는 게시글 작성 전 직접 구현해보고 오류를 경험하면 해결 후 원인과 결과를 정리해서 같이 알려드립니다.

이번 오류들은 모두 오타와 세미콜론을 오기입하여 발생하였고 항상 조심할 필요가 있습니다.

1. Access denied for user 'root;'@'localhost'

원인: application.properties 에서 username 값에 세미콜론(;)이 포함된 경우 발생.
해결: spring.datasource.username=root 에 불필요한 특수문자가 없는지 확인할 필요가 있습니다.

2. Unable to resolve name [org.hibernate.dialectMySQLDialect]

원인: dialect 설정에서 .dialect. 부분이 누락된 경우 발생.
해결: org.hibernate.dialect.MySQLDialect 로 정확히 입력해아 합니다. (.dialect. 포함)


마무리

이로써 H2에서 MySQL로 DB 교체를 마쳤습니다.
서버를 재시작해도 데이터가 유지되는 것을 확인할 수 있고 다음 글에서는 Service 레이어를 추가해 더 깔끔한 구조로 코드를 개선하는 과정을 다루겠습니다.

 

감사합니다.

'Dev > Spring' 카테고리의 다른 글

Spring Boot 전역 예외 처리하기  (0) 2026.04.07
Spring Boot Service 레이어  (0) 2026.04.07
Spring Boot로 CRUD REST API 구현하기  (0) 2026.03.26
Mac OS에서 Spring Boot 개발환경 구축하기  (0) 2026.03.25
Spring의 진짜 핵심과 좋은 객체 지향 프로그래밍에 대한 생각  (0) 2025.07.15
'Dev/Spring' 카테고리의 다른 글
  • Spring Boot 전역 예외 처리하기
  • Spring Boot Service 레이어
  • Spring Boot로 CRUD REST API 구현하기
  • Mac OS에서 Spring Boot 개발환경 구축하기
스프링개발캣
스프링개발캣
  • 스프링개발캣
    SpringDev.Cat
    스프링개발캣
  • 전체
    오늘
    어제
    • 분류 전체보기 (31)
      • Dev (22)
        • Spring (8)
        • WANTED AI NATIVE CAREER CAM.. (12)
        • 개발 이야기 (2)
      • Today (1)
        • 티스토리 관리 (0)
        • 잡담 (1)
        • 취업 준비 (0)
      • 주식 이야기 (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    원티드랩
    쓸데없는소리
    잡소리
    Spring
    S&P500
    spring boot
    회고
    해외주식
    나스닥
    잡담
    개발
    주식
    관세
    미국주식
    백엔드
    AI Native Career Camp
    스프링
    springboot
    개발자
    스프링부트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
스프링개발캣
Spring Boot에 MySQL 연결하기
상단으로

티스토리툴바