코드스테이츠_국비교육/[Section3]

52.01_[Spring MVC] 트랜잭션(Transaction)_트랜잭션 개요_22.11.04

생각없이 해도 생각보다 좋다. 2022. 11. 8. 22:52

>트랜젝션
: 여러 작업을 하나로 묶는 단위.
: 여러 작업을 하나로 묶을 수 있는 기준은 각 작업들이 별개의 업무를 수행하되, 결국 하나의 작업처럼 인식되어야 한다. 즉, '전부 성공하든가' 혹은 '전부 실패하든가'로 처리되어야 하는 작업 단위를 트랜젝션이라고 한다.

>트랜잭션의 ACID 원칙
-Atomicity(원자성)
: 원자란 물질을 이루는 가장 작은 단위이다. 이와 같은 의미로 트랜잭션은 더 이상 나눠지지 않는 가장 작은 단위여야한다는 의미이다. 트랜잭션으로 취급받는 작업은 더 이상 쪼갤 수 없다.
-Consistency(일관성)
: 트랜잭션이 성공적으로 종료된 경우, 결과 데이터가 로직에서 의도한대로 저장되거나 변경되어야하는 것을 의미. 어찌보면 당연한 얘기이다. 1의 정보가 들어왔을때, 1이 더해져서 2가 저장되길 원하는 로직을 갖는 트랜잭션이 있다면 해당 트랜잭션이 성공적으로 완료되면 2가 저장되어야 한다는 의미이다.
-Isolation(격리성)
: 여러 개의 트랜잭션이 실행될 경우 각각 독립적이어야하고 서로를 간섭하면 안된다는 의미. Atomicity와도 관련이 있다. 왜냐하면 두 개의 트랜잭션이 서로 간섭하는 순간 하나의 작업으로 취급되는데, 그 작업은 두 개의 트랜잭션으로 나눌 수 있기 때문이다.
-Durability(지속성)
: 트랜잭션의 결과(성공이든 실패든)는 모두 물리적인 공간에 저장되어야 한다는 의미이다. 물리적인 공간을 사용해서 데이터베이스를 종료하더라도 저장된 결과는 유지되어야 한다.

>트랜잭션 커밋과 롤백
-커밋(commit)
: 하나의 트랜잭션의 결과를 최종적으로 데이터베이스에 반영하는 명령어.
: 커밋 수행 시, 변경된 내용이 데이터베이스에 영구적으로 저장된다.
: 프로그램 흐름 관점으로 보면 모든 트랜잭션의 마지막 단계는 commit 명령이 된다.
-롤백(rollback)
: 트랜잭션이 수행되는 과정 중 문제가 생겼을때 수행된 작업을 모두 취소하고 트랜잭션 시작 이전으로 돌아가는 것을 의미한다.

>트랜젝션 커밋 작업의 복잡한 과정
1. TransactionImpl
2. JdbcResourceLocalTransactionCoordinatorImpl > TransactionDriverControlImpl
3. AbstractLogicalConnectionImplementor
4. JdbcConnection
5. Command
6. SessionLocal

>트랜잭션 커밋 작업의 요점
: JPA API를 사용해서 commit 하는 것은 아주 간단한 코드 작업이지만, 내부적으로 매우 복잡한 과정을 거친다는 것을 알자. 또한, 복잡한 과정 중에서 내부적으로 JDBC API를 이용하는 부분이 존재한다는 것도 알고있자.
: 그 부분은 데이터베이스와 연계되는 부분이다.

>트랜젝션 용어의 사용 범위
: 보통은 데이터베이스에서의 작업 처리 상황을 많이 떠올린다.
: 하지만 애플리케이션을 사용함에 있어 하나의 작업으로 수행되는 모든 하위 작업 묶음을 트랜젝션이라고 할 수 있고, 항상 고민하면서 다뤄야한다.