본문 바로가기
스프링 부트3

스프링 부트 3와 MySQL

by 굿센스굿 2024. 12. 5.
반응형

 

스프링 부트 3는 최신 기술 스택과 개발자 경험을 개선하여 백엔드 애플리케이션 개발을 단순화합니다. MySQL은 안정적이고 확장 가능한 관계형 데이터베이스로, 스프링 부트 3와의 통합을 통해 강력하고 효율적인 데이터 처리가 가능합니다. 이 글에서는 스프링 부트 3와 MySQL의 통합 과정을 상세히 설명하고, 실무에서 자주 활용할 수 있는 예제를 3가지 제공하겠습니다.


1. 스프링 부트 3와 MySQL 설정

(1) 프로젝트 환경 설정

스프링 부트 3 프로젝트를 생성하려면 Spring Initializr를 사용합니다. 프로젝트 생성 시 필요한 의존성을 추가합니다:

  • Spring Boot Starter Data JPA
  • MySQL Driver
  • Spring Web

(2) 의존성 추가

build.gradle 또는 pom.xml에 아래와 같이 의존성을 추가합니다.
Gradle의 경우:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    runtimeOnly 'mysql:mysql-connector-java'
}

Maven의 경우:

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

(3) application.yml 파일 설정

MySQL 데이터베이스 연결 정보를 application.yml에 입력합니다.

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/your_database_name
    username: your_username
    password: your_password
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

2. 스프링 부트 3와 MySQL 통합 예제

예제 1: 간단한 엔티티 생성 및 CRUD

1) 엔티티 클래스 생성
User라는 간단한 엔티티를 생성합니다.

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;

    // Getter & Setter
}

2) Repository 인터페이스 생성

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

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

3) CRUD API 컨트롤러 생성

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserRepository userRepository;

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

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userRepository.save(user);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        userRepository.deleteById(id);
    }
}

예제 2: 사용자 지정 쿼리

1) Repository에 사용자 지정 쿼리 추가

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface UserRepository extends JpaRepository<User, Long> {
    @Query("SELECT u FROM User u WHERE u.email = :email")
    User findByEmail(@Param("email") String email);
}

2) 서비스에서 활용

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public User getUserByEmail(String email) {
        return userRepository.findByEmail(email);
    }
}

예제 3: 데이터베이스 연결 상태 확인

애플리케이션이 정상적으로 MySQL과 연결되었는지 확인하려면 CommandLineRunner를 활용합니다.

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import javax.sql.DataSource;

@Component
public class DatabaseCheckRunner implements CommandLineRunner {
    private final DataSource dataSource;

    public DatabaseCheckRunner(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println("Connected to: " + dataSource.getConnection().getMetaData().getURL());
    }
}

3. 성능 최적화 및 고려 사항

  • 연결 풀(Connection Pool): HikariCP와 같은 연결 풀 설정으로 데이터베이스 연결 성능을 개선합니다.
  • 캐시 활용: 2차 캐시 설정으로 쿼리 성능을 최적화합니다.
  • 쿼리 로그 확인: spring.jpa.show-sql과 spring.jpa.properties.hibernate.format_sql을 사용해 실행 쿼리를 분석합니다.

마무리

스프링 부트 3와 MySQL의 통합은 간단한 설정만으로도 강력한 기능을 제공합니다. 위의 예제를 통해 기본적인 CRUD, 사용자 지정 쿼리, 성능 최적화 방법을 익혔다면, 이를 확장하여 실무에 적용할 수 있습니다. 다음 단계로는 MySQL의 복잡한 트랜잭션 처리와 스프링 배치 작업을 탐구해보세요.

반응형