A - Atomicity
Spring Boot에서, [[@Transactional]]
어노테이션을 사용하여 메서드의 원자성을 보장할 수 있습니다.
이 어노테이션은 메서드에서 발생하는 모든 데이터베이스 연산이 하나의 트랜잭션으로 처리되도록 합니다.
만약 메서드 내에서 어떤 예외가 발생하면, 해당 트랜잭션의 모든 연산은 롤백됩니다.
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Transactional
public void updateUserEmail(Long id, String newEmail) {
User user = userRepository.findById(id).orElseThrow(() -> new RuntimeException("User not found"));
user.setEmail(newEmail);
}
}
C - Consistency
Consistency는 데이터베이스의 스키마, 비즈니스 규칙, 제약 조건 등을 통해 보장됩니다.
예를 들어, 데이터베이스에서 일정 칼럼의 유일성을 보장하는 unique 제약 조건이 존재하면, 같은 값을 가진 레코드를 추가하려고 하면 에러가 발생하며, 이는 Consistency를 보장합니다.
I - Isolation
Spring Boot에서는 @Transactional
어노테이션과 함께 Isolation Level을 설정하여 트랜잭션 간의 고립 수준을 조절할 수 있습니다.
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Transactional(isolation = Isolation.SERIALIZABLE)
public void updateUserEmail(Long id, String newEmail) {
User user = userRepository.findById(id).orElseThrow(() -> new RuntimeException("User not found"));
user.setEmail(newEmail);
}
}
D - Durability
Durability는 데이터베이스 자체의 기능과 장애 복구 메커니즘을 통해 보장됩니다.
Spring Boot 애플리케이션에서는 트랜잭션이 성공적으로 커밋된 후에는 해당 데이터가 영구히 데이터베이스에 저장되는 것을 기대할 수 있습니다.
이러한 방식을 통해, Spring Boot는 ACID 원칙을 준수하며 데이터의 일관성과 정확성을 유지합니다.
레퍼런스
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
728x90
'DEV > Java' 카테고리의 다른 글
Junit Test 꿀팁 (0) | 2023.07.19 |
---|---|
@Transactional (0) | 2023.07.18 |
Service의 책임 (0) | 2023.07.18 |
Controller의 책임 (0) | 2023.07.18 |
Custom Exception (0) | 2023.07.18 |