π[SpringBoot] @Transactional μ λ Έν μ΄μ
@Transactional
@Transactional
μ λ
Έν
μ΄μ
μ λ©μλ λ΄μμ μ€νλλ λ°μ΄ν°λ² μ΄μ€ μμ
μ νλμ νΈλμμ
μΌλ‘ λ¬Άλ μν μ νλ€.
νΈλμμ
μ λ°μ΄ν°λ² μ΄μ€μ μμ
μ μμμ±(Atomicity)
, μΌκ΄μ±(Consistency)
, λ
립μ±(Isolation)
, μ§μμ±(Durability)
μ 4κ°μ§
μμ±μ 보μ₯νλ κ°λ
μ΄λ€.
νΈλμμ
μμ λ‘€λ°±(Rollback)
μ μμ
μ€μ μμΈκ° λ°μνκ±°λ λͺ
μμ μΌλ‘ λ‘€λ°±μ μ§μ ν κ²½μ°μ μνλλ€.
λ‘€λ°±μ νΈλμμ
λ΄μμ μ΄μ μνλ‘ λλ리λ μμ
μ΄λ€.
μ΄λ λ°μ΄ν° μΌκ΄μ±μ μ μ§νκ³ , λ°μ΄ν°λ² μ΄μ€λ₯Ό μΌκ΄λ μνλ‘ μ μ§νλλ°μ μμ΄ μ€μν μμ
μ΄λ€.
μΆκ°λ‘, λ‘€λ°±μ λ°μ΄ν°λ² μ΄μ€μ μμ
μ΄ λͺ¨λ μ±κ³΅ν κ²½μ°μλ μνλλ€.
λ°μ΄ν°λ² μ΄μ€μ μμ
μ΄ λͺ¨λ μ±κ³΅νλ€ νλλΌλ, νΈλμμ
μ μ¬μ ν μ μ©νκΈ° λλ¬Έμ΄λ€.
μ¬λ¬ κ°μ μμ
μ΄ νλμ νΈλμμ
μΌλ‘ λ¬Άμ¬μλ κ²½μ°, λͺ¨λ μμ
μ΄ μ±κ³΅νμ λλ§ μ΅μ’
μ μΈ μ»€λ°(Commit)
μ΄ μνλμ΄
λ°μ΄ν°λ² μ΄μ€μ λ³κ²½ λ΄μ©μ΄ μꡬμ μΌλ‘ λ°μλκΈ° λλ¬Έμ΄λ€.
μ΄μ²λΌ λ‘€λ°±μ μννλ μ΄μ λ λ°μ΄ν°μ μΌκ΄μ±κ³Ό μμ μ±μ μ μ§νκΈ° μν΄μμ΄λ€.
@Transactional
μ λ
Έν
μ΄μ
μ μ¬μ©νλ©΄ λ‘€λ°±
μ ν΅ν΄ λ°μ΄ν°λ² μ΄μ€ μμ
μ μμμ±κ³Ό μΌκ΄μ±μ 보μ₯νκ³ , μμΈ λ°μ μμ λ°μ΄ν°μ 무결μ±μ μ μ§ν μ μλ€.
μμ
UserService
λ νμ μ 보λ₯Ό μμ νλ λ©μλλ₯Ό μ μν ν΄λμ€μ΄λ€.
User
ν΄λμ€μ id
κ° LongμΌλ‘ μ§μ λμ΄ μμ΄ μμ μ΄ μλ£λλ©΄ μμ ν λ°μ΄ν°μ idλ₯Ό λ겨주기 λλ¬Έμ λ°ννλ μλ£νμ΄ LongμΌλ‘ μ§μ λμ΄μλ€.
[UserService]
@Transactional
public Long update(Long id, UserUpdateRequestDto requestDto) {
User user = userRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("not found"));
user.update(requestDto.getName(), requestDto.getPhone(), requestDto.getAddress());
return id;
}
λκΈλ¨κΈ°κΈ°