본문 바로가기

Spring/DB 2편11

스프링 트랜잭션 전파2 - 활용 커밋, 롤백 @Transactional과 REQUIRED REQUIRED 는 기존 트랜잭션이 없으면 새로운 트랜잭션을 만들고, 기존 트랜잭션이 있으면 참여한다. @Transactional(propagation = Propagation.REQUIRED) == @Transactional 서비스 계층에 트랜잭션이 없을 때 - 롤백 이 경우 회원은 저장되지만, 회원 이력 로그는 롤백된다. 따라서 데이터 정합성에 문제가 발생 둘을 하나의 트랜잭션으로 묶어서 처리해보자. 단일 트랜잭션 각각 트랜잭션이 필요한 상황 Repository & Service 모두 트랜잭션이 필요한 경우 클라이언트 A : MemberService 에 트랜잭션을 남기고, MemberRepository , LogRepository 의 트랜잭션 .. 2023. 8. 12.
스프링 트랜잭션 전파1 - 기본 트랜잭션 두 번 사용 double_commit() @Test void double_commit() { log.info("트랜잭션1 시작"); TransactionStatus tx1 = txManager.getTransaction(new DefaultTransactionAttribute()); log.info("트랜잭션1 커밋"); txManager.commit(tx1); log.info("트랜잭션2 시작"); TransactionStatus tx2 = txManager.getTransaction(new DefaultTransactionAttribute()); log.info("트랜잭션2 커밋"); txManager.commit(tx2); } 트랜잭션1 트랜잭션1을 시작하고, 커넥션 풀에서 conn0 커넥.. 2023. 8. 11.
스프링 트랜잭션 이해 스프링은 트랜잭션을 추상화해서 제공한다. 개발자는 필요한 구현체를 스프링 빈으로 등록하고 주입 받아서 사용하면 된다. JdbcTemplate , MyBatis 를 사용하면 DataSourceTransactionManager(JdbcTransactionManager) 를 스프링 빈으로 등록하고, JPA를 사용하면 JpaTransactionManager 를 스프링 빈으로 등록해준다. PlatformTransactionManager 를 사용하는 방법 선언적 트랜잭션 관리 (Declarative Transaction Management) @Transactional 애노테이션 하나만 선언 프로그래밍 방식의 트랜잭션 관리 (Programmatic Transaction Management) 트랜잭션 매니저 또는 트랜.. 2023. 8. 11.
데이터 접근 기술 - 활용 방안 스프링 데이터 JPA 예제와 트레이드 오프 고민 구조를 맞추기 위해서, 중간에 어댑터가 들어가면서 전체 구조가 너무 복잡해지고 사용하는 클래스도 많아지는 단점이 생겼다. 실제 이 코드를 구현해야하는 개발자 입장에서 보면 중간에 어댑터도 만들고, 실제 코드까지 만들어야 하는 불편함이 생긴다. DI, OCP 원칙을 지킬 수 있다는 좋은 점이 분명히 있다. 하지만 구조가 복잡해지면서 어댑터 코드와 실제 코드까지 함께 유지보수 해야 하는 어려움도 발생한다. 다른 선택 ItemService 코드를 일부 고쳐서 직접 스프링 데이터 JPA를 사용하는 방법이다. DI, OCP 원칙을 포기하는 대신에, 복잡한 어댑터를 제거하고, 구조를 단순하게 가져갈 수 있는 장점이 있다. 트레이드 오프 DI, OCP를 지키기 위해 어.. 2023. 8. 11.