데이터베이스 연동은 애플리케이션 개발에서 가장 중요한 부분 중 하나입니다. 이 장에서는 Spring Boot와 MyBatis를 활용하여 데이터베이스와의 연결을 설정하고, 트랜잭션 관리를 통해 안정적인 데이터 처리를 구현하는 방법을 설명합니다.
1. DataSource 설정
DataSource는 데이터베이스 연결을 관리하는 핵심 컴포넌트입니다. Spring Boot에서는 application.properties 또는 application.yml 파일을 통해 간단하게 데이터베이스 설정을 구성할 수 있습니다.
DataSource 설정
아래는 MySQL을 사용하는 예제입니다:
application.properties 예제
# 데이터베이스 연결 정보
spring.datasource.url=jdbc:mysql://localhost:3306/my_database?useSSL=false&serverTimezone=UTC
spring.datasource.username=my_username
spring.datasource.password=my_password
# 데이터베이스 드라이버
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# HikariCP 설정 (Spring Boot의 기본 DataSource 풀)
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.max-lifetime=1800000
application.yml 예제
spring:
datasource:
url: jdbc:mysql://localhost:3306/my_database?useSSL=false&serverTimezone=UTC
username: my_username
password: my_password
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
maximum-pool-size: 10
minimum-idle: 5
idle-timeout: 30000
max-lifetime: 1800000
주요 설정 설명
spring.datasource.url: 데이터베이스의 URL.spring.datasource.username&spring.datasource.password: 데이터베이스 접속 계정 정보.spring.datasource.driver-class-name: 데이터베이스 드라이버 클래스.- HikariCP 설정: 기본적으로 Spring Boot는 HikariCP를 사용하며, 연결 풀의 성능과 안정성을 높여줍니다.
2. MyBatis와 데이터베이스 연결 설정
MyBatis를 Spring Boot에 통합하려면 몇 가지 필수 설정이 필요합니다. mybatis-spring-boot-starter 라이브러리를 사용하면 간단하게 통합할 수 있습니다.
의존성 추가
pom.xml 파일에 MyBatis 관련 의존성을 추가합니다.
<dependencies>
<!-- MyBatis Spring Boot Starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.0</version> <!-- 최신 버전으로 교체 -->
</dependency>
<!-- MySQL Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
MyBatis 설정
MyBatis와 관련된 추가 설정은 application.properties 또는 application.yml에서 정의할 수 있습니다.
application.properties 예제
# MyBatis 설정
mybatis.config-location=classpath:mybatis-config.xml
mybatis.mapper-locations=classpath:mappers/*.xml
mybatis.type-aliases-package=com.example.domain
주요 설정
mybatis.config-location: MyBatis 설정 파일 경로.mybatis.mapper-locations: Mapper XML 파일의 위치.mybatis.type-aliases-package: 도메인 클래스의 패키지 경로. 이 설정은 SQL 결과를 간단한 이름으로 매핑할 수 있게 도와줍니다.
3. 트랜잭션 관리
트랜잭션 관리는 데이터 무결성을 유지하는 데 필수적입니다. Spring Boot는 기본적으로 트랜잭션 관리 기능을 제공하며, 간단한 설정으로 트랜잭션을 적용할 수 있습니다.
트랜잭션 관리 활성화
Spring Boot에서 트랜잭션 관리 기능을 사용하려면 클래스에 @EnableTransactionManagement를 추가해야 합니다. 그러나 Spring Boot는 기본적으로 자동 설정을 통해 이를 활성화합니다.
서비스 계층에서 트랜잭션 사용
트랜잭션은 일반적으로 서비스 계층에서 관리됩니다. @Transactional 애너테이션을 사용하여 트랜잭션 경계를 설정할 수 있습니다.
예제: UserService에 트랜잭션 적용
@Service
@Transactional // 트랜잭션 적용
public class UserService {
private final UserMapper userMapper;
public UserService(UserMapper userMapper) {
this.userMapper = userMapper;
}
public User createUser(User user) {
userMapper.insertUser(user);
// 추가 로직
return user;
}
public void deleteUser(Long id) {
userMapper.deleteUser(id);
}
}
주요 옵션
@Transactional: 메서드 또는 클래스에 트랜잭션을 적용합니다.- 속성:
readOnly = true: 읽기 전용 트랜잭션으로 설정.rollbackFor = Exception.class: 특정 예외가 발생했을 때 롤백.
결론
Spring Boot와 MyBatis를 사용하면 데이터베이스와 애플리케이션 간의 연동을 간단하고 효율적으로 구현할 수 있습니다. DataSource 설정으로 안정적인 연결을 보장하고, 트랜잭션 관리를 통해 데이터 무결성을 유지하며, 계층별 역할 분리를 통해 유지보수성과 확장성을 확보할 수 있습니다.
'SpringBoot' 카테고리의 다른 글
| Spring Boot: 스프링 MVC 패턴 (0) | 2024.11.18 |
|---|---|
| Spring Boot: CRUD 기능 구현 (1) | 2024.11.17 |
| Spring Boot: Controller, Service, DAO, DTO (2) | 2024.11.15 |
| Spring Boot: MyBatis를 활용한 데이터베이스 연동 (0) | 2024.11.14 |
| Spring Boot: ResponseEntity를 활용한 응답 처리 (0) | 2024.11.13 |