본문 바로가기

Spring Boot

Spring Boot와 MySQL을 연동하는 방법

반응형

Spring Boot와 MySQL을 연동하는 방법

Spring Boot는 다양한 데이터베이스와 쉽게 연동할 수 있도록 설계되었습니다. 이 글에서는 MySQL 데이터베이스를 Spring Boot 애플리케이션과 연동하는 방법을 단계별로 설명합니다.


1. MySQL 설치 및 데이터베이스 준비

  1. MySQL 설치:
    MySQL이 로컬 또는 원격 서버에 설치되어 있어야 합니다. MySQL 다운로드 페이지에서 운영 체제에 맞는 버전을 설치하세요.

  2. 데이터베이스 생성:
    MySQL에 접속한 뒤, 사용할 데이터베이스를 생성합니다:

    CREATE DATABASE springboot_db;

2. 프로젝트 설정

  1. Spring Boot Starter 의존성 추가

pom.xml 파일에 MySQL과 Spring Data JPA 의존성을 추가합니다:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

Gradle을 사용하는 경우:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'mysql:mysql-connector-java'
}
  1. application.yml 또는 application.properties 설정

MySQL 연결 정보를 설정 파일에 추가합니다.

application.yml:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/springboot_db
    username: root
    password: yourpassword
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

application.properties:

spring.datasource.url=jdbc:mysql://localhost:3306/springboot_db
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

3. 엔티티(Entity)와 리포지토리(Repository) 생성

  1. 엔티티 클래스 작성

데이터베이스 테이블과 매핑되는 엔티티 클래스를 작성합니다:

import jakarta.persistence.*;

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false, unique = true)
    private String email;

    // Getter와 Setter

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
  1. 리포지토리 인터페이스 작성

Spring Data JPA를 사용해 데이터베이스 작업을 처리할 리포지토리를 생성합니다:

import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
}

4. 서비스와 컨트롤러 작성

  1. 서비스 클래스 작성
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class UserService {

    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    public User saveUser(User user) {
        return userRepository.save(user);
    }
}
  1. 컨트롤러 작성
import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping("/api/users")
public class UserController {

    private final UserService userService;

    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userService.saveUser(user);
    }
}

5. 애플리케이션 실행 및 테스트

  1. Spring Boot 애플리케이션 실행:
    애플리케이션을 실행하면 설정된 MySQL 데이터베이스와 자동으로 연결됩니다. JPA 설정(ddl-auto=update)에 따라 필요한 테이블이 자동으로 생성됩니다.

  2. Postman으로 테스트:

    • GET 요청: http://localhost:8080/api/users (사용자 목록 조회)
    • POST 요청: http://localhost:8080/api/users (사용자 생성)
      {
          "name": "John Doe",
          "email": "john.doe@example.com"
      }

6. 추가 설정

  1. Connection Pool 설정:
    HikariCP를 사용한 커넥션 풀 설정을 추가하여 성능을 최적화할 수 있습니다:

    spring:
      datasource:
        hikari:
          maximum-pool-size: 10
  2. 프로파일 별 설정:
    개발, 테스트, 프로덕션 환경에 따라 다른 설정을 사용하려면 Spring Profiles를 활용하세요:

    spring:
      profiles:
        active: dev
    ---
    spring:
      profiles: dev
      datasource:
        url: jdbc:mysql://localhost:3306/dev_db
    ---
    spring:
      profiles: prod
      datasource:
        url: jdbc:mysql://localhost:3306/prod_db

반응형