저의 회고 방식은 5F 입니다
사실, 무슨 일이 있었나요 ?
인프런 강의 김영한 님의 스프링 DB 1편 DB 2편을 수강하였습니다.
느낀점, 어떤 느낌이 들었나요 ?
이번에 강의를 들으며 가장 감명 깊었던 주제는 트랜잭션입니다.
정말 전 이러한 트랜잭션의 깊은 원리는 잘 이해하지 못하고 @Transactional만 써줬던 것 같습니다.
트랜잭션 이란?
트랜잭션은 Db의 상태를 변경시키기 위해 수행하는 작업 단위인데, 정의는 DB에서 하나의 거래를 안전하게 처리하도록 보장해 주는 것입니다.
사실, @Transactional만 붙여주면 알아서 커밋과 롤백을 스프링 부트가 해주기 때문에 그냥 써도 되는구나만 생각했었던 것 같습니다.
배운 점, 어떤 인사이트를 얻었나요 ?
트랜잭션은 ACID를 보장해줘야 한다.
Atomicity(원자성): 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하거나 모두 실패해야 합니다.
Consistency(일관성): 모든 트랜잭션은 일관성이 있는 데이터베이스 상태를 유지해야 합니다.
Isolation(격리성): 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리해야 합니다.
Durability(지속성): 트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 합니다.
트랜잭션은 원자성, 일관성, 지속성을 보장해 주지만, 트랜잭션 간에 격리성을 완벽히 보장해 주려면 거의 순서대로 실행해야 합니다.
이렇게 하면 동시 처리 성능이 매우 떨어지게 되는데, ANSI 표준은 트랜잭션의 격리 수준을 4단계로 정리해 주었습니다.
실제 트랜잭션 동작 예제 또한 김영한 님 강의를 통해 JDBC에서 트랜잭션을 적용하는 방법을 배웠는데 많은 문제점이 있었습니다.
우선 트랜잭션 동작 원리는 데이터 변경 쿼리를 실행하고 데이터베이스에 그 결과를 반영하려면, commit 명령어를 호출하고, 반영하고 싶지 않으면 롤백 명령어인 rollback을 호출하면 됩니다.
따라서 커밋을 호출하기 전까지는 임시로 데이터를 저장하는 것이었고 해당 트랜잭션을 시작한 세션에게만 변경 데이터가 보이고, 다른 세션에게는 변경 데이터가 보이지 않습니다.
DB락의 개념은 세션 1이 트랜잭션을 시작하고 데이터를 수정하는 동안에 아직 커밋을 수정하지 않았는데, 세션 2에서 동시에 같은 데이터를 수정하게 되면 트랜잭션의 원자성이 깨지게 됩니다.
따라서 이러한 문제를 방지하려면 세션이 한 트랜잭션을 시작하고 데이터를 수정하는 동안에는 커밋이나 롤백 전까지 다른 세션에서 해당 데이터를 수정할 수 없게 막아줘야 합니다.
JDBC는 이렇게 깊은 과정을 모두 try, catch, finally 반복하며 구현하는데 JPA에서 @Transactional을 사용하면 스프링이 AOP를 사용해서 트랜잭션을 편리하게 처리해 줍니다.
김영한 님 강의를 통해서 개념부터 이해하고, JDBC로 실제 하나하나 적용해 주는 걸 공부하다 보니 @Transactional 이 애노테이션 하나의 역할이 정말 컸고, 편하게 사용할 수 있었으며, 트랜잭션에 대해 깊은 이해를 할 수 있었습니다.
향후 행동 앞으로 무엇을 해야 할까요 ?
구름톤을 통해 김영한 님의 강의를 보면서 최신 기술을 사용할 줄 아는 게 중요한 것이 아니라, 동작 방식을 다 알고 쓰는 것이 중요하다는 것을 많이 꺠닫게 되었습니다.
예전 코드들을 한 번 더 복습하며 정리하는 시간을 가지면서 완벽히 이해하는 시간을 가져야 될 것 같습니다.
Reference
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/dashboard
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-2/dashboard
'구름톤 트레이닝 풀스택 회고' 카테고리의 다른 글
⛅️[구름톤 트레이닝 풀스택 6회차] - 12주 차 회고⛅️ (0) | 2024.03.25 |
---|---|
⛅️[구름톤 트레이닝 풀스택 6회차] - 11주 차 회고⛅️ (0) | 2024.03.16 |
⛅️[구름톤 트레이닝 풀스택 6회차] - 9주 차 회고⛅️ (0) | 2024.03.02 |
⛅️[구름톤 트레이닝 풀스택 6회차] - 8주 차 회고⛅️ (0) | 2024.02.24 |
⛅️[구름톤 트레이닝 풀스택 6회차] - 7주 차 회고⛅️ (0) | 2024.02.16 |