본문 바로가기

전체 글

(100)
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..
Tomcat의 일부 Thread가 놀고 있다?! TransactionSynchronizationManager(이하 TSM)를 통한 트랜잭션 동기화를 진행한 코드를 작성하는 중에다수의 요청을 보낼 시 connection이 어떻게 이뤄지는지, 멀티스레드를 통한 병렬처리가 가능한지 궁금해서 동시에 요청을 보내는 법을 알아보았다. postman의 collection에서 다음과 같이 여러개의 요청을 한번에 보내는 것이 가능했다.   문제는 16개의 요청을 동시에 보내는데, 보낼때마다 아래의 그림처럼 10개의 스레드만 형성이 되어서 사용이 되었다. 나머지 6개의 요청은 10개의 스레드중 먼저 작업이 끝난 스레드를 통해서 작업이 이루어졌다.왜 10개인가를 주목해서 봐야할 것 같아서 처음에 문제라고 생각한 부분은 tomcat 서버의 스레드풀 개수였다.  1. Tom..
Aspect Oriented Programming 요즘 DB와 Transaction에 대한 공부를 하면서 AOP라는 흥미로운 개념에 대해 배우게 됐다.방식 자체도 특이하지만 기존에 배웠던 Lombok과 유사한 것처럼 보여서 해당 개념을 설명하고 어떤 부분이 다른지를 설명하고자 한다.  1. Aspect Oriented Programming "In computing, aspect-oriented programming (AOP) is a programming paradigm that aims to increase modularity by allowing the separation of cross-cutting concerns. It does so by adding behavior to existing code (an advice) without modify..
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..
MSA의 분산 트랜잭션, Saga 패턴 1. MSA(Microservice Architecture) Microservice Architecture 는 Monolithic Architecture와 달리,여러 개의 서비스로 나누어서 API 서비스의 책임분리를 한 아키텍쳐 이다.한 서비스의 장애가 다른 서비스에 영향을 주는 현상을 SPOF(Single Point Of Failure)라 하는데,MSA는 서비스가 독립적으로 실행되기에 특정 서비스가 다른 서비스에 주는 영향이 적다. 그렇지만, 이 서비스를 사용하기 위해서는 필연적으로 여러 서버를 유지해야 함과 동시에이를 중앙화할 API GW라는 추가적인 인스턴스의 사용도 필요하다.  2. 분산 트랜잭션 한편, 각 서비스에 대한 DB 운영 방식 또한 어떻게 해야할 지를 생각해봐야 한다.Monolithic..