2. 데이터베이스 연동 심화
여기서는 스프링 부트와 데이터베이스 연동의 심화된 내용을 다룹니다. 트랜잭션 관리, 캐싱 사용, 여러 데이터 소스 설정에 대해 알아보겠습니다.
2.1. 트랜잭션 관리
트랜잭션은 데이터베이스 작업의 원자성(Atomicity)을 보장하기 위한 방법입니다. 스프링 부트에서 트랜잭션 관리를 위해@Transactional 어노테이션을 사용합니다.
예를 들어, 사용자 정보를 등록하고 금액을 이체하는 작업이 있을 때 이 두 작업을 트랜잭션으로 묶어 원자성을 보장할 수 있습니다.
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Autowired
private MoneyTransferService moneyTransferService;
@Transactional
public void registerAndTransferMoney(User user, double amount) {
userRepository.save(user);
moneyTransferService.transferMoney(amount);
}
}
2.2. 캐싱 사용
데이터베이스에서 데이터를 가져오는 데 시간이 걸리는 경우, 캐싱을 사용하여 성능을 향상할 수 있습니다. 스프링 부트에서는 @Cacheable 어노테이션을 사용하여 메서드 결과를 캐시에 저장할 수 있습니다.
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Cacheable(value = "userCache", key = "#id")
public User findById(Long id) {
return userRepository.findById(id).orElse(null);
}
}
2.3. 여러 데이터 소스 설정
스프링 부트에서 여러 데이터베이스를 사용할 경우, 각 데이터베이스에 대한 데이터 소스를 설정해야 합니다. 예를 들어, 메인 데이터베이스와 로그 데이터베이스를 사용하는 경우 다음과 같이 설정할 수 있습니다.
@Configuration
public class DataSourceConfig {
@Bean
@Primary
@ConfigurationProperties("app.datasource.main")
public DataSourceProperties mainDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
@Primary
public DataSource mainDataSource() {
return mainDataSourceProperties().initializeDataSourceBuilder().build();
}
@Bean
@ConfigurationProperties("app.datasource.log")
public DataSourceProperties logDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
public DataSource logDataSource() {
return logDataSourceProperties().initializeDataSourceBuilder().build();
}
}
이렇게 설정한 후, 리포지토리 또는 서비스 클래스에서 @Qualifier 어노테이션을 사용하여 원하는 데이터 소스를 주입할 수 있습니다.
@Service
public class LogService {
private final JdbcTemplate jdbcTemplate;
@Autowired
public LogService(@Qualifier("logDataSource") DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
// 로그 관련 메서드 작성
}
이렇게 여러 데이터 소스를 설정하고 사용하면, 애플리케이션에서 다양한 데이터베이스를 활용할 수 있게 됩니다.
이번 섹션에서는 스프링 부트와 데이터베이스 연동의 심화된 내용에 대해 알아보았습니다. 트랜잭션 관리를 통해 원자성을 보장할 수 있으며, 캐싱을 사용하여 성능을 향상할 수 있습니다. 또한, 여러 데이터 소스를 설정하여 다양한 데이터베이스를 동시에 사용할 수 있습니다.
2023.05.05 - [프로그래밍/스프링부트(Spring Boot) 기초부터 ~] - [스프링 부트(SpringBoot) : 중급] 스프링 부트 고급 구성
'GD's IT Lectures : 기초부터 시리즈 > 스프링부트(Spring Boot) 기초부터 ~' 카테고리의 다른 글
[스프링 부트(SpringBoot) : 중급] RESTful API 개발 심화 (0) | 2023.05.05 |
---|---|
[스프링 부트(SpringBoot) : 중급] 웹 개발 심화 (0) | 2023.05.05 |
[스프링 부트(SpringBoot) : 중급] 스프링 부트 고급 구성 (0) | 2023.05.05 |
[스프링 부트(SpringBoot)] 초급 실전 예제 (0) | 2023.05.04 |
[스프링 부트(SpringBoot)] 기본 배포 및 모니터링 (0) | 2023.05.03 |
댓글