반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 자바스크립트틱택토
- 콜백함수
- 인프런인강
- c#
- 인프런자바스크립트
- 고차함수
- 자바스크립트함수
- 비주얼스튜디오
- 자바스크립트
- 자바스크립트객체리터럴
- 이벤트리스너
- NPM
- 코딩
- 인프런강의
- 자바스크립트recude
- 객체리터럴
- 객체의비교
- 인프런
- HTTP
- EntityFramework
- 인프런무료강좌
- Blazor
- 인프런강좌
- .NET
- sort
- slice
- 자바스크립트파라미터
- 인터넷프로토콜
- 틱택토구현
- 제로초
Archives
- Today
- Total
샐님은 개발중
트랜잭션 문제 해결 - 트랜잭션 템플릿 본문
728x90
반응형
MemberService.java
public void accountTransfer(String fromId, String toId, int money) throws SQLException {
// 트랜잭션 시작
TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
try{
// 비지니스 로직
bizLogic(fromId, toId, money);
transactionManager.commit(status);
}catch (Exception e){
transactionManager.rollback(status);
throw new IllegalStateException(e);
}
}
서비스단에서 try {...}catch{..} 구문이 반복적으로 발생되고 있는 것을 확인할 수 있다.
- > 템플릿 콜백 패턴을 활용해서 해결 가능 현재로서는 템플릿 콜백 패턴을 자세히 이해하지 않아도 되고 'TransactionTempate' 이라는 편리한 기능을 제공하는 정도로 이해하자.
트랜잭션 템플릿
public MemberServiceV3_2(PlatformTransactionManager transactionManager, MemberRepositoryV3 memberRepository) {
this.txTemplate = new TransactionTemplate(transactionManager);
this.memberRepository = memberRepository;
}
public void accountTransfer(String fromId, String toId, int money) throws SQLException {
txTemplate.executeWithoutResult((status) ->{ // 메소드안에서 예외 발생시 롤백처리, 정상 작동시 커밋처리한다.
try{
// 비지니스 로직
bizLogic(fromId, toId, money);
}catch (Exception e){
throw new IllegalStateException(e);
} }
);
}
트랜잭션 템플릿 사용으로 커밋/롤백 코드가 제거됨.
해당 람다에서는 체크 예외를 던질 수 없어서 언체크 예외로 바꾸어 던지도록 함. (언체크 공부필요!)
결과
코드는 줄였지만 아직도 서비스 로직에서 트랜잭션 처리 기술을 사용하고 있으므로 향후 유지보수의 어려움이 있다.
서비스 로직은 가급적 핵심 비지니스 로직만 있어야한다.
이문제를 해결하기 위해 스프링 AOP 를 통해 프록시를 도입해서 해결할 수 있다.
728x90
반응형
'스프링 DB 1편 - 데이터 접근 핵심 원리' 카테고리의 다른 글
ItemController 에서 save 로직 리팩토링 (0) | 2023.07.24 |
---|---|
JPA - Map 데이터를 List로 변환 해서 데이터 저장 (0) | 2023.07.24 |
스프링과 문제 해결 - 트랜잭션 - 트랜잭션 매니저 (0) | 2023.07.21 |
트랜잭션 이해 (0) | 2023.07.20 |
커넥션 풀과 데이터 소스 이해 (0) | 2023.07.20 |