일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- java알고리즘문제풀이
- java list 출력
- java참조자료형
- java set 출력
- 항해15기
- 노베이스부트캠프
- 컴파일
- java최솟값구하기
- java set 저장
- javaJRE
- java알고리즘
- 인터프린터언어
- 격파르타후기
- java기본자료형
- javaJVM
- sqld자격증합격
- 격파르타장점
- 코딩부트캠프후기
- 격파르타비전공자
- java map 출력
- java map
- java map 저장
- 비전공자sqld
- 작은수제거하기
- java list 저장
- 항해99후기
- java 자료구조 활용
- 프로그래머스제일작은수
- 프로그래머스
- 격파르타합격후기
- Today
- Total
코딩과 결혼합니다
230726 - Spring Transaction 본문
Transaction
Transaction 이란?
여러 작업을 진행하다가 문제가 생겼을 경우 이전 상태로 롤백하기 위해 사용된다.
Transaction은 하나의 흐름으로 하나의 실행이 성공하거나 실패하면 모든 연산들을 동일하게 처리한다.
예를들어 A, B, C의 연산을 한 묶음이라고 할 때 A는 정상 작동 됐지만, B가 실패한다면 A의 작업 이력도 이전으로 돌린다.
Commit - 모든 작업 성공 ▶ 완료 작업 상태를 모두 반영
Rollback - 하나라도 실패 ▶ 모든 사항을 폐기
Transaction 의 성질
✅ 원자성 Atomicity
한 트랜잭션 내의 실행 작업은 하나의 단위로 처리 즉, 모두 성공 또는 모두 실패하는 것을 의미한다.
✅ 독립성 Isolation
동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 함. 격리성이라고도 한다.
✅ 일관성 Consistency
트랜잭션을 일관성 있는 데이터베이스 상태를 유지한다.
제약조선이나 데이터 규칙에 위반하지 않는 일관성을 의미한다. 하나의 동작이 정상적인 흐름을 일관적으로 가질 수 있어야 한다는 원칙.
✅ 영속성 Durability
트랜잭션을 성공적으로 마치면 결과가 항상 저장된다.
트랜잭션의 동작이 성공 후 commit이 된다면 영원히 반영되어야 한다는 원칙.
Spring이 제공하는 Transaction 핵심 기술
1. 트랜잭션 동기화
이유 : JDBC를 이용하는 개발자가 직접 여러 개의 작업을 하나의 트랜잭션으로 관리하려면 Connection 객체를 공유하는 등 상당히 불필요한 작업들이 많이 생길 것이다.
해결 : 트랜잭션을 시작하기 위한 Connection 객체를 특별한 저장소에 보관해두고 필요할 때 꺼내쓸 수 있도록 하는 기술
-트랜잭션 동기화 저장소는 작업 쓰레드마다 Connection 객체를 독립적으로 관리하기 때문에, 멀티쓰레드 환경에서도 충돌이 발생할 여지가 없다.
문제 : 개발자가 JDBC가 아닌 Hibernate와 같은 기술을 쓴다면 기술 종속적인 문제가 발생. 대표적으로 Hibernate에서는 Connection이 아닌 Session이라는 객체를 사용하기 때문
2. 트랜잭션 추상화
이유 : 기술 종속적인 문제가 발생
해결 : Spring은 트랜잭션 기술의 공통점을 담은 트랜잭션 추상화 기능을 제공한다. 이를 이용함으로써 애플리케이션 각 기술마다(JDBC, JPA, Hibernate 등) 종속적인 코드를 이용하지 않고도 일관되게 트랜잭션을 처리할 수 있도록 해준다.
문제 : 트랜잭션 관리 코드들이 비즈니스 로직 코드와 결합되어 여러가지 책임을 지니게 된다.
3. AOP를 이용한 트랜잭션 분리
이유 : 트랜잭션 코드와 비즈니스 코드가 복잡하게 얽혀있는 코드 발생
해결 : Spring에서 마치 트랜잭션 코드와 같은 부가 기능 코드가 존재하지 않는 것처럼 보이기 위해 해당 로직을 클래스 밖으로 빼내서 별도의 모듈로 만드는 AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)를 고안 및 적용하게 되었고, 이를 적용한 트랜잭션 어노테이션 (@Transaction)을 지원하게 되었다. 이를 적용하면 코드를 핵심 비즈니스 로직만 남길 수 있다.
장점
- 메서드에서 서비스의 비즈니스 로직만을 작성할 수 있기 때문에, 비즈니스 로직에 집중된 코드를 작성할 수 있다.
- 반복적인 트랙잭션 처리에 대해, @Transaction 어노테이션을 통해 중복된 트랜잭션 처리 코드를 제거할 수 있다.
'2세 > Spring' 카테고리의 다른 글
230816 - Controller에서 JPA Entity를 반환하면 안되는 이유 (0) | 2023.08.17 |
---|---|
230727 - @Transactional 을 사용하는 이유 (0) | 2023.07.27 |
230725 - .gitignore가 적용되지 않을 때 Git 캐시 삭제 (민감 정보 감추기 ) (0) | 2023.07.25 |
230722 - Post 생성 + 수정 기능 에러 해결 (0) | 2023.07.22 |
230721 - 클론코딩 프로젝트 : 오늘의 집 (0) | 2023.07.21 |