코드스테이츠_국비교육/[Section3]

52.02_[Spring MVC] 트랜잭션(Transaction)_트랜잭션 처리_22.11.04

생각없이 해도 생각보다 좋다. 2022. 11. 8. 22:53

Spring FrameWork에서의 트랜젝션 처리

 

트랜잭션의 구분
-로컬 트랜젝션
-분산 트랜젝션

Spring에서 사용되는 트랜젝션 방식
-선언형 트랜젝션 방식
: 두가지로 나뉜다. 비즈니스 로직에 애너테이션 추가하는 방법과 AOP 방식을 이용한 방법
-프로그래밍 코드 베이스 트랜잭션 방식
: 트랜젝션은 핵심 기능보다는 부가적인 기능에 가깝다. 때문에 코드 베이스로 트랜잭션을 구현하여 적용하는 것은 객체지향적인 관점에서 적절치 않다.

Spring Boot에서의 트랜젝션 설정
-Datasource
-JpaTransactionManager
//Spring boot의 내부 처리

애너테이션을 이용한 트랜젝션 적용(클래스 레벨)
-@Transactional 적용
-JPA 로그 레벨 설정
: jpa 로그 레벨 설정 후 콘솔 로그로 확인
-트랜젝션 커밋 동작 확인
-트랜젝션 롤백 동작 확인
-추가 정보
>EntityManager 클래스
: JPA의 영속성 컨텍스트를 관리하는 클래스
: EntityManagerFactory의 createEntityManager() 메서드를 통해 생성가능함. 따라서 EntityManagerFactory 객체를 DI하는 것을 우선함.
: EntityManager 클래스의 객체를 통해서 JPA의 API 메서드를 사용할 수 있음(persist, find 등 repository 처럼)
>Checked exception과 rollback

애너테이션을 이용한 트랜젝션 적용(메서드 레벨)
-(readOnly = true) 속성값
-클래스 레벨과 메서드 레벨의 트랜잭션 적용 순서

트랜잭션 관계 연결
-(propagation = Propagation.REQUIRED) 속성값
: 현재 진행 중인 트랜잭션이 있고 그곳에서 위 속성값이 붙은 영역을 호출하면 해당 트랜잭션에 참여
: 현재 진행 중인 트랜잭션이 없으면 새 트랜잭션 생성
-기타 트랜잭션 전파
: propagation 의 속성값으로 조절함.
-Isolation 속성값
: 트랜잭션의 ACID 원칙 중 Isolation 을 지키기 위한 속성값

AOP 방식의 트랜잭션 적용
-애너테이션이 아닌 방법으로 트랜잭션 적용
: AOP 방식으로 트랜잭션을 적용할 수 있는 클래스를 생성
: 클래스 내부에 트랜잭션과 옵션들은 구현한 후, 포인트컷을 지정하여 어떤 클래스에 트랜잭션 클래스를 적용할 지 정함.
-장단점
: 애너테이션을 사용하지 않아 코드를 더 깔끔하게 볼 수 있다.
: 좀 더 기능이 잘 분리된 객체지향 프로그래밍 성격을 띈다고 볼 수 있다.
: 단점은 좀 불편하다. 포인트컷 표현식도 알아야하고, 일일이 클래스를 지정하고 원하는 트랜잭션 기능도 구현해야한다.