트랜잭션 3

OSIV(OpenSessionInView)

OpenSessionInView (기본값 true)JPA에서는 EntityManager로 DB 커넥션을 유지하지만 JPA의 전신인 Hibernate에서는 Session으로 유지하기에 이름이 이렇게 붙었다.  True true인 경우, 최초의 DB 커넥션 시작 시점부터 API 응답이 끝날 때까지 영속성 컨텍스트와 DB 커넥션을 유지한다. 그래서 OSIV 설정을 따로 변경안했을 때 View Template이나 Controller에서 지연로딩이 가능했던 것이다(1차 캐시 유지). 하지만 현업에서는 이를 False로 막아놓는다. 이유가 뭘까? 그 이유는 API에 블록킹이나 연결이 길어지는 이슈가 생긴다면 DB 커넥션 리소스가 말라버리기 때문이다. 실시간 트래픽이 중요한 애플리케이션에서는 커넥션 리소스가 부족해질..

Java/JPA 2024.08.27

트랜잭션(@Transaction) (2) - 트랜잭션 옵션

트랜잭션 옵션value, transactionManager코드로 직접 트랜잭션을 적용할 경우 트랜잭션 매니저를 주입받아서 사용해야 했다. 어노테이션으로 트랜잭션을 적용할 때도 동일하게 지정해줘야 한다. 다만 이 값이 생략되었을 경우 기본으로 등록된 트랜잭션 매니저를 사용하기 때문에 대부분 생략하여 사용한다.트랜잭션 매니저를 별도로 지정해주는 경우는 사용하는 트랜잭션 매니저가 둘 이상이어서 구분할 때 보통 사용한다.public class TxService { @Transactional("memberTxManager") public void member() {...} @Transactional("orderTxManager") public void order() {...}}  rollbackFor예외 발..

Java/Spring 2024.08.07

트랜잭션(@Transaction) (1) - 트랜잭션의 개요 및 프록시 내부 호출 문제

트랜잭션이란?데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다. 메소드에 트랜잭션을 적용시키면 메소드가 수행하는 작업의 단위가 된다. 메소드 실행 중에 생기는 쿼리들은 프록시 객체에 저장되고 완료되면 기존 객체와 변화한 점을 확인 후 데이터베이스에 한꺼번에 커밋한다.   스프링 트랜잭션 사용 방식 선언적 트랜잭션 관리 vs 프로그래밍 방식의 트랜잭션 관리선언적 트랜잭션 관리 : @Transaction 어노테이션 하나만 선언해서 트랜잭션을 적용하는 것프로그래밍 방식의 트랜잭션 관리 : 트랜잭션 매니저 또는 트랜잭션 템플릿 등을 사용해서 트랜잭션 관련 코드를 직접 작성하는 것  프로그래밍 방식의 트랜잭션 관리를 사용하게 되면 애플리케이션 코드가 트랜잭션 코드와 강하게 결합된다.그리고 선언적..

Java/Spring 2024.08.06