Spring Boot와 MySQL 연동: 완벽 가이드
Overview
Spring Boot와 MySQL을 연동하는 것은 현대의 웹 애플리케이션에서 데이터베이스와의 상호작용을 효율적으로 처리하는 데 매우 중요한 과정입니다. Spring Boot는 Java 기반의 프레임워크로, 애플리케이션의 설정과 배포를 간소화하며, MySQL은 가장 널리 사용되는 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 이 가이드는 Spring Boot 애플리케이션을 MySQL 데이터베이스와 연결하는 과정을 단계별로 자세히 설명합니다.
1. 프로젝트 설정
Spring Boot 애플리케이션을 MySQL과 연동하기 위해서는 먼저 프로젝트를 설정해야 합니다. Maven 또는 Gradle을 사용하여 Spring Boot 애플리케이션을 생성하고, 필요한 의존성을 추가합니다.
Maven을 사용하는 경우
pom.xml 파일 수정
<dependencies> <!-- Spring Boot Starter Data JPA --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- MySQL Connector Java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- Spring Boot Starter Web (선택 사항) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
애플리케이션 속성 설정
src/main/resources/application.properties
또는application.yml
파일에 MySQL 데이터베이스 연결 정보를 추가합니다.spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name spring.datasource.username=your_username spring.datasource.password=your_password spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
Gradle을 사용하는 경우
build.gradle 파일 수정
dependencies { // Spring Boot Starter Data JPA implementation 'org.springframework.boot:spring-boot-starter-data-jpa' // MySQL Connector Java runtimeOnly 'mysql:mysql-connector-java' // Spring Boot Starter Web (선택 사항) implementation 'org.springframework.boot:spring-boot-starter-web' }
애플리케이션 속성 설정
src/main/resources/application.properties
또는application.yml
파일에 MySQL 데이터베이스 연결 정보를 추가합니다.
2. 데이터베이스 연결 설정
애플리케이션이 MySQL 데이터베이스에 연결되도록 설정하려면, application.properties
또는 application.yml
파일에 적절한 설정을 추가해야 합니다.
application.properties
예시
spring.datasource.url=jdbc:mysql://localhost:3306/demo_db
spring.datasource.username=root
spring.datasource.password=root_password
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
여기서 spring.datasource.url
은 MySQL 서버의 주소와 데이터베이스 이름을 포함합니다. spring.datasource.username
과 spring.datasource.password
는 데이터베이스 접근을 위한 인증 정보를 설정합니다. spring.jpa.hibernate.ddl-auto
는 데이터베이스 스키마를 자동으로 업데이트할지 여부를 설정하며, update
는 애플리케이션 실행 시 데이터베이스 스키마를 자동으로 업데이트합니다. spring.jpa.show-sql
은 실행된 SQL 쿼리를 로그에 출력하도록 설정합니다.
application.yml
예시
spring:
datasource:
url: jdbc:mysql://localhost:3306/demo_db
username: root
password: root_password
jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5Dialect
3. JPA 엔티티와 리포지토리 생성
Spring Data JPA를 사용하여 데이터베이스와 상호작용하려면 엔티티 클래스와 리포지토리 인터페이스를 정의해야 합니다.
엔티티 클래스 정의
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// Getters and Setters
}
위 예제에서 @Entity
어노테이션은 이 클래스가 JPA 엔티티임을 나타냅니다. @Id
는 기본 키를 정의하며, @GeneratedValue
는 기본 키의 값을 자동으로 생성하도록 설정합니다.
리포지토리 인터페이스 정의
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}
리포지토리 인터페이스는 JPA의 기본 CRUD 연산을 제공하는 JpaRepository
를 확장합니다. 이 인터페이스를 통해 데이터베이스에 대한 다양한 쿼리를 손쉽게 수행할 수 있습니다.
4. 데이터베이스 초기화
애플리케이션 실행 시 데이터베이스에 초기 데이터를 삽입할 수 있습니다. data.sql
파일을 사용하여 데이터베이스에 데이터를 삽입하거나, CommandLineRunner
를 사용하여 애플리케이션 시작 시 실행할 로직을 정의할 수 있습니다.
data.sql
파일을 사용하는 경우
src/main/resources
디렉터리에 data.sql
파일을 생성하고 초기 데이터를 삽입합니다.
INSERT INTO user (name, email) VALUES ('John Doe', 'john.doe@example.com');
CommandLineRunner
를 사용하는 경우
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public CommandLineRunner demo(UserRepository repository) {
return (args) -> {
repository.save(new User("John Doe", "john.doe@example.com"));
};
}
}
CommandLineRunner
는 애플리케이션이 시작될 때 자동으로 실행되는 코드를 정의합니다.
5. 오류 및 문제 해결
일반적인 오류
java.sql.SQLException: Access denied for user
- 문제: 데이터베이스 사용자 이름 또는 비밀번호가 잘못되었습니다.
- 해결:
application.properties
또는application.yml
파일에서 사용자 이름과 비밀번호를 확인하고 수정합니다.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory'
- 문제: JPA 설정이 잘못되었습니다.
- 해결:
spring.jpa.hibernate.ddl-auto
및spring.jpa.properties.hibernate.dialect
값을 확인하고 올바른 값을 설정합니다.
DataIntegrityViolationException
- 문제: 데이터베이스 제약 조건이 위반되었습니다 (예: null 값이 허용되지 않는 열에 null 값 삽입 시).
- 해결: 엔티티 클래스의 필드와 데이터베이스 제약 조건을 일치시키도록 수정합니다.
참고문서
이 문서들은 Spring Boot와 MySQL을 연동할 때 필요한 자세한 정보와 설정 방법을 제공하며, 추가적인 설정이나 문제가 발생했을 때 참고할 수 있는 유용한 자료들입니다.
'Study Information Technology' 카테고리의 다른 글
Spring Boot와 PostgreSQL 연동하기 (3) | 2024.08.13 |
---|---|
Spring Boot와 Maven을 활용한 개발의 모든 것 (0) | 2024.08.13 |
Spring Boot와 Gradle 완벽한 조합 (0) | 2024.08.13 |
Spring Boot와 Redis 연동 및 활용 방법 (1) | 2024.08.13 |
Spring Boot와 Azure 통합 자세한 가이드 (1) | 2024.08.13 |