트랜잭션?
트랜잭션(transaction)은 "쪼갤 수 없는 업무처리의 최소 단위"를 말합니다
개발에서는 "DB(database)의 상태를 변화시키기 위해서 수행하는 작업의 단위"를 의미합니다.
DB에 접근하기 위해서 SQL(질의어)문을 이용하는데,
작업단위는 질의어 하나가 아니라, 많은 질의어를 사람이 기준을 정해서 사용합니다.
예시
예를들어 장기게임을 만든다고 치고, 게임을 즐기기위해서 방을 만들도록 합니다.
방을 만들면 데이터베이스에서는는 방을 만드는 작업, 방을 만들면서 장기말을 세팅하는 작업, 두가지가 일어나게 됩니다.
트랜잭션 단위로 데이터가 처리되지 않는다면, 오작동 했을 시 원인을 찾기가 힘들것입니다.
게임방 생성과 장기 기물을 생성하는 두개의 과정을 별도의 과정으로 보게되고, DB입장에서는 둘중 하나가 실패해도 진행되버리는 경우가 발생합니다. 그래서 게임방은 생겼지만, 장기 기물이 생기지 않는 상황이 벌어질 수 있습니다.
그래서 이렇게 하나의 작업으로 만들어주면, 두 개의 과정을 하나의 작업으로 만들어서 처리가 가능합니다.
이런 하나의 작업 단위를 트랜잭션이라고 합니다.
@Transactional
트랜잭션의 시작 -> {관심사 로직 수행} -> 커밋 또는 롤백
트랜잭션 처리를 하려면, 위와같은 작업을 거칩니다.
이러한 작업을 spring에서는 proxy객체라는 개념을 도입해서 처리합니다.
트랜잭션을 여는 코드를 선언하고, 우리가 수행하고자 하는 내용을 Target객체를 호출해서 처리합니다.
다시 트랜잭션을 종료하는 코드를 추가하고, 이런 proxy객체를 bean으로 등록합니다.
하지만 이러한 트랜잭션 과정을 일일히 코드로 적는 프로그래밍식 트랜잭션 관리를 매번하면 불편할 것입니다.
spring에서 제공하는 트랜잭션 관리를 도와주는 어노테이션이 '@Transcational'입니다.
spring의 공식문서에 따르면 대부분의 경우, 어노테이션을 사용하는 선언적 트랜잭션 관리로도 충분하다고 합니다.
'Backend > Spring Boot' 카테고리의 다른 글
JPA - 양방향관계매핑 (0) | 2023.12.13 |
---|---|
Spring Boot - 용어 (0) | 2023.08.11 |
Spring Boot - 연관관계 매핑 (0) | 2023.07.30 |
Spring Boot - MVC 모델 (0) | 2023.07.30 |
Spring Boot - Spring Data JPA 활용 (0) | 2023.07.29 |