본문 바로가기

Study Information Technology

Spring Boot와 MySQL 연동 완벽 가이드

728x90
반응형

Spring Boot와 MySQL 연동: 완벽 가이드

Overview

Spring Boot와 MySQL을 연동하는 것은 현대의 웹 애플리케이션에서 데이터베이스와의 상호작용을 효율적으로 처리하는 데 매우 중요한 과정입니다. Spring Boot는 Java 기반의 프레임워크로, 애플리케이션의 설정과 배포를 간소화하며, MySQL은 가장 널리 사용되는 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 이 가이드는 Spring Boot 애플리케이션을 MySQL 데이터베이스와 연결하는 과정을 단계별로 자세히 설명합니다.

1. 프로젝트 설정

Spring Boot 애플리케이션을 MySQL과 연동하기 위해서는 먼저 프로젝트를 설정해야 합니다. Maven 또는 Gradle을 사용하여 Spring Boot 애플리케이션을 생성하고, 필요한 의존성을 추가합니다.

Maven을 사용하는 경우

  1. 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>
  2. 애플리케이션 속성 설정
    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을 사용하는 경우

  1. 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'
    }
  2. 애플리케이션 속성 설정
    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.usernamespring.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. 오류 및 문제 해결

일반적인 오류

  1. java.sql.SQLException: Access denied for user
  • 문제: 데이터베이스 사용자 이름 또는 비밀번호가 잘못되었습니다.
  • 해결: application.properties 또는 application.yml 파일에서 사용자 이름과 비밀번호를 확인하고 수정합니다.
  1. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory'
  • 문제: JPA 설정이 잘못되었습니다.
  • 해결: spring.jpa.hibernate.ddl-autospring.jpa.properties.hibernate.dialect 값을 확인하고 올바른 값을 설정합니다.
  1. DataIntegrityViolationException
  • 문제: 데이터베이스 제약 조건이 위반되었습니다 (예: null 값이 허용되지 않는 열에 null 값 삽입 시).
  • 해결: 엔티티 클래스의 필드와 데이터베이스 제약 조건을 일치시키도록 수정합니다.

참고문서

이 문서들은 Spring Boot와 MySQL을 연동할 때 필요한 자세한 정보와 설정 방법을 제공하며, 추가적인 설정이나 문제가 발생했을 때 참고할 수 있는 유용한 자료들입니다.

728x90
반응형