반응형
포스팅을 깜빡하고 있다가 여태까지 한 미션들을 복습하며 이제야 정리하게 되었다.
1. 요구사항 ✨
자세한 미션 요구사항 및 수행 내역은 깃허브 레포지토리에 branch 별로 분류해두었습니다.
학습 목표: JdbcTemplate을 직접 구현해보자.
2. 학습 내역 🔮
💜 Local Transaction vs Global Transaction
👉 https://yeonyeon.tistory.com/279
💜 트랜잭션 특성 (ACID)
- Atomicity: 트랜잭션에 포함된 모든 작업이 모두 성공 또는 모두 실패 (=원자성)
- Consistency: 트랜잭션 실행 전후에 데이터의 일관성이 손상되지 않음 (=일관성)
- Isolation: 동시에 실행하는 여러 개의 트랜잭션들은 서로 독립적 (= 독립성; 격리성)
- Durability: 커밋이 완료된 트랜잭션은 손상되지 않는 성질 (= 지속성; 영속성)
💜 트랜잭션 격리 수준
- Read Uncommitted: 커밋되지 않은 데이터도 조회 가능
- Read Committed: 커밋된 데이터만 조회
- Repeatable Read: 같은 트랜잭션 내에서 동일 결과를 보여줄 수 있게 보장 (하지만 phantom read현상 존재)
- Serializable: 조회도 lock을 걸어 phantom read 해결
🔻 Phantom Read
다른 트랜잭션에서 수행한 변경 작업에 의해 레코드가 보였다 안보였다 하는 현상. MySQL의 InnoDB에서는 Repeatable Read에서도 Phantom Read가 발생하지 않는다고 알려져있지만 완전히 맞는 말은 아니다. select ...for update 같은 경우에는 쓰기 잠금을 획득해야하기 때문에 Phantom Read 현상이 발생할 수 있다.
💜 트랜잭션 전파 속성
- REQUIRED: 디폴트. 기존 트랜잭션이 있으면 사용하고 없으면 새로 생성
- SUPPORTS: 기존 트랜잭션이 있으면 사용하고 없으면 트랜잭션 없이 로직 수행
- MANDATORY: 기존 트랜잭션 있으면 사용하고 없으면 예외 발생
- NEVER: 기존 트랜잭션이 있으면 예외 발생
- NOT_SUPPORTED: 기존 트랜잭션이 있으면 일시 중지 후 트랜잭션 없이 로직 수행
- REQUIRES_NEW: 기존 트랜잭션이 있으면 일시 중지 후 새 트랜잭션 생성
- NESTED: 기존 트랜잭션이 있으면 save point를 표시해 로직에서 예외 발생 시 해당 save point로 롤백. 기존 트랜잭션이 없으면 REQUIRED와 동일하게 동작.
💜 트랜잭션 경계
👉 트랜잭션을 적용할 시작 지점부터 끝 지점. 특정 범위 내의 로직을 하나의 작업으로 묶어 전부 commit 또는 rollback을 적용할지 지정할 수 있다. JDBC 같은 경우에는 Connection 를 이용해 setAutoCommit(false)를 통해 트랜잭션을 시작하고 commit() 또는 rollback()을 통해 트랜잭션을 종료할 수 있다.
3. 실습 링크 ⭐
👉 우테코 핸즈온 실습: https://github.com/yeon-06/jwp-hands-on/pull/7
👉 토비의 스프링 실습: https://github.com/yeon-06/toby-spring/pull/7
반응형
'Memo > 우테코 4기' 카테고리의 다른 글
[우테코] 우아한테크코스 4기 수료 후기 (44) | 2022.11.27 |
---|---|
[우테코] 최종 데모데이 후기 (10) | 2022.10.22 |
[우테코] @MVC 프레임워크 구현 미션 학습 로그 (2) | 2022.10.01 |
[우테코] 톰캣 구현 미션 학습 로그 (2) | 2022.09.29 |
[우테코/줍줍] 5차 스프린트 회고 (2) | 2022.09.26 |