본문 바로가기

연재작/Database

(6)
Persistence Context의 Entity 상태 관리, Life-Cycle 영속성 컨텍스트(Persistence Context)는 JPA에서 Entity의 관리를 하기 위한 중요한 factor이다.이를 통해서 우리는 객체 지향적인 entity의 관리만으로도 DB의 조작이 가능해진다. 그렇다면 Entity는 영속성 컨텍스트에서 어떤 식으로 관리가 되는지에 대해서 써볼 것이다.또한, Spring Boot, Tomcat 서버에서 영속성 컨텍스트에서 entity를 관리하기 위한 EntityManager와 Transaction, Thread, Connection, 그리고 영속성 컨텍스트가 어떤 생명주기를 갖고 있는지이에 대해서 알아보도록 하겠다.  1. Entity의 4가지 상태 Transient : 비영속 상태DB에도, 영속성 컨텍스트에도 존재하지 않는 Entitynew 생성자를 통해..
Transaction Deep Dive (5) 이제 transaction 추상화의 최종장이라고 할 수 있는 부분까지 도달했다.지난번 까지의 글의 흐름에서는 아래와 같은 순서로 추상화를 진행해왔다.JDBC API를 사용한 Transaction의 구현 : Connection, Statement, ResultSetTransactionSynchronizationManager를 통한 Transaction 동기화의 추상화 + DataSourceUtils를 사용한 connection의 공유PlatformTransactionManager를 통한 Transaction 관리, connection등 resource의 추상화+ DataSourceUtils를 사용한 connection의 공유PlatformTransactionManager와 JdbcTemplate을 통한 최..
Transaction Deep Dive (4) 지난 번 글에서는 가장 저수준 방식인 JDBC API를 통해connection을 직접 다루면서 Transaction을 동기화 하는 작업을 소개했다. 지금부터는 이러한 작업을 토대로 추상화를 진행해 차차 고수준으로 올려갈 것이다.우선 첫 번째는 connection을 감추는 작업이다. connection을 감춘다기보다는, Transaction Synchronization을 위해서필수적으로 connection의 단위가 transaction의 단위가 동일시 되어야 하기 때문에 Transaction에 connection을 내재화 해서 추상화가 되도록 진행하는 방식이 된다.  1. 앞으로 사용할 용어의 정리 예시를 들때도 부모 Transaction, 자식 Transaction 이렇게 쓰는 것도 부정확해보이고,Ser..
Transaction Deep Dive (3) 이전 글에서 예고했듯, 앞으로의 글에서는Transaction과 Transaction Synchronization의 추상화 진행 과정을 살펴볼 것이다.그렇지만 그 전에 Connection과 Transaction이 어떻게 밀접한 연관을 가지고 있는지를 확인해야 한다.이에 대해서 자세히 풀어보도록 하겠다.  1. Connection과 Transaction Synchronization의 관계 결론부터 말하자면, 원하는 대로 Transaction Synchronization이 이뤄지도록 하려면Connection의 단위와 Synchronization의 단위가 같아져야 한다. 그래서 Connection의 생명주기와 Transaction의 생명주기가 같아지도록 하는 것이다. Connection은 트랜잭션에서 사용하는 ..
Transaction Deep Dive (2) 1. Transaction이란? 데이터 무결성 보장을 위해서 격리된 operation을 지원하는 기술.ACID라는 속성을 만족해야 하기에 기술의 근본 자체는 pessimistic하지만,현대의 RDBMS에서는 MVCC을 기반으로 고립성 수준에 따라 optimistic하면서도 pessimistic한 동시성 제어를 구현한다. 2. JDBC와 DB의 Connection 트랜잭션을 얘기하기 전에 우선 먼저 Java App에서 DB로의 연결을 어떻게 하는지 살펴봐야 한다.JPA를 쓰던, Spring data JPA를 쓰던 그 어떤 것을 쓰던지 DB와의 연결이 없다면 이러한 트랜잭션의 논의가 불가능하기 때문이다.공부를 하다보니 이 연결이 트랜잭션과도 관련이 있기 때문에 자세히 얘기해보고자 한다. Java Applic..
Transaction Deep Dive (1) 1. Pessimistic, Optimistic Concurrency Control(Lock) Pessimistic Concurrency Control : 요약하자면 Lock 체크 후 작업. 그렇기에 성능이 하락, 쓰기 비중이 높을 때 사용DB 빌트인 방식 : DB의 무결성, 일관성의 책임을 DB가 갖는다.단위 : Table 단위 / Row 단위 Lock이 있다.범주 : Shared Lock(s-lock, 읽기 잠금) : 다중 읽기 가능, 쓰기 작업 트랜잭션 불가 Exclusive Lock(x-lock, 쓰기 잠금) : 해당 잠금 중에는 모든 트랜잭션 접근 불가Optimistic Concurrency Control : 같은 방식으로 선 작업 후 버전 체크. 개발자가 DB 일관성의 책임을 가질 수 있다.읽..