Replies: 1 comment
|
수고 하셨습니다! |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
트랜잭션 추상화
이유: jdbc 기술을 사용하다가 jpa 기술로 변경, 사용하려면 수정이 필요
트랜잭션 추상화와 의존관계
-서비스는 특정 트랜잭션 기술에 직접의존 하는게 하니라 추상화된 인터페이스에 의존
-원하는 기술(jdbc, jap) TxManager를 넣어서 사용해 주면 됨
스프링의 트랜잭션 추상화
-스프링 제공 주소: org.springframework.transaction.PlatformTransactionManager
-스프링 5.3 이후 jdbc 트랜잭션을 관리할 때 DataSourceTransactionManager를 상속받아 기능 확장한 JdbcTransactionManager 제공
DataSourceUtils.getConnection()
-트랜잭션 동기화 매니저가 관리하는 커넥션이 있음, 해당 커넥션 반환 없는 경우 새로운 커넥션 생성 반환
DataSourceUtils.releaseConnection()
-커넥션을 con.close() 사용 닫으면 커넥션이 유지되지 않는 문제 발생, 트랜잭션을 종료 커밋, 롤백 할 때 까지 있어야 함(트랜잭션 작업이 끝날 때 까지 있어야 함)
트랜잭션 문제 해결 – 트랜잭션 템플릿 패턴 반복에 따른 귀찮음 해결
-다른 서비스에서 트랜잭션 시작하려면 try, catch, finally를 포함 성공시 커밋, 실패시 롤백 코드 반복, 달라지는 것은 비즈니스 로직 뿐
-이런 경우, 템플릿 콜백 패턴을 활용하면 문제 해결 가능
TransactionTemplate
-스프링에서 제공하는 템플릿 클래스
-execute(): 응답 값이 있을 때 사용
-executeWithoutResult(): 응답 값 없을 때 사용
MemberServiceV3_1, V3_2 변경 부분
-트랜잭션 템플릿 덕분에, 반복 코드 제거 함 하지만 비즈니스 로직과 트랜잭션 처리하는 기술 로직이 한 곳에 있어 유지보수 어려움, 트랜잭션 기술을 사용하려면 어쩔 수 없이 트랜잭션 코드가 나와야 하니 이 문제를 해결을 위해
트랜잭션 문제 해결 – 트랜잭션 AOP 이해
-순수한 비즈니스 로직만 남기기
프록시(가상 서버)를 통한 문제 해결
-프록시 도입후에 트랜잭션을 시작, 순수한 비즈니즈 로직만 남길 수 있음
스프링이 제공하는 트랜잭션 AOP
-@transactional 애노테이션을 붙여주면 됨, 스프링의 트랜잭션 AOP는 이 애노테이션 인식 프록시 적용해줌
-아래 코드는 순수 비즈니스 로직만 남기고, 트랜잭션 코드 제거
-@transactional 애노테이션 메서드에 붙여도 되고, 클래스에 붙여도 됨, 클래스에 붙이면 외부에서 호출 가능한 public 메서드가 AOP 적용 대상이 됨
트랜잭션 AOP 정리
-선언적 트랜잭션 관리: @transactional 애노테이션 하나만 선언, 해당 로직에 트랜잭션을 적용하겠다라고 선언
-프로그래밍 방식의 트랜잭션 관리: 트랜잭션 매니저 또는 트랜잭션 템플릿을 사용, 트랜잭션 관련 코드를 직접 작성하는 것
application.properties
spring.datasource.url=jdbc:h2:tcp://localhost/~/test spring.datasource.username=sa spring.datasource.password=-스프링 부트가 기본으로 생성하는 데이터소스는 커넥션풀 제공하는 HikariDataSource
-커넥션풀과 관련된 설정도 application.properties 통해 지정
**커넥션 풀: DB의 연결을 재사용할 수 있도록 관리되는 디비 연결 캐시
결론
All reactions