본문 바로가기
네이버클라우드/JAVA 웹 프로그래밍

JAVA 72일차 (2023-09-04) 자바 프로그래밍_71. 트랜잭션 제어 코드를 캡슐화하기: Spring의 TransactionTemplate 모방 구현_개인프로젝트 - 마트 관리 시스템

by prometedor 2023. 9. 4.
## 71. 트랜잭션 제어 코드를 캡슐화하기: Spring의 TransactionTemplate 모방 구현

- 트랜잭션 제어 코드를 캡슐화하여 반복적인 코드 작업을 줄이는 방법
- Spring의 TransactionTemplate 클래스를 모방하여 내부 메커니즘을 이해하기

 

=>

ㄴ bitcamp 에 util 이라는 이름의 새로운 패키지를 생성

=>

=>

ㄴ bitcamp.util 패키지에 TranscationTempalte 이라는 이름의 새로운 클래스 파일 생성

 

https://docs.spring.io/spring-framework/reference/data-access/transaction/programmatic.html

 

Programmatic Transaction Management :: Spring Framework

The TransactionTemplate adopts the same approach as other Spring templates, such as the JdbcTemplate. It uses a callback approach (to free application code from having to do the boilerplate acquisition and release transactional resources) and results in co

docs.spring.io

 

ㄴ 참고하기

=>

util/TransactionTemplate.java

=>

=>

ㄴ bitcamp.util 패키지에 TranscationCallback 이라는 이름의 새로운 인터페이스 파일 생성

=>

util/TransactionCallback.java

 

 

util/TranscationTemplate.java

=>
DefaultBoardService.java

ㄴ 해당 코드 복사

=>

util/TransactionTemplate.java

ㄴ 복사한 코드 붙여넣기

=>

util/TransactionTemplate.java

=>

util/TransactionTemplate.java

ㄴ 해당 코드 제거

=>

util/TransactionTemplate.java

ㄴ rv 를 리턴하도록 함

=>

service/DefaultBoardService.java

ㄴ 트랜잭션 처리는 TransactionTemplate 에서 처리하므로 PlatformTransactionManager -> TransactionTemplat 으로 변경

=>

service/DefaultBoardService.java

ㄴ 생성자에서 해당 코드 추가

=>

service/DefaultBoardService.java

ㄴ 트랜잭션 처리는 TransactionTemplate 에서 처리하므로 해당 코드 제거

=>

service/DefaultBoardService.java

ㄴ add 메서드 안에 Mywork 라는 클래스 추가하기

=>
service/DefaultBoardService.java

ㄴ 트랜잭션 처리는 TransactionTemplate 에서 처리하므로 해당 코드 제거

=>

service/DefaultBoardService.java

ㄴ Mywork이라는 내부 클래스를 정의하여 TransactionCallback 인터페이스를 구현

ㄴ 이 내부 클래스의 doInTransaction 메서드에서 게시판 추가와 파일 추가 작업을 트랜잭션 내에서 처리
ㄴ txTemplate.execute(new Mywork())를 호출하여 트랜잭션 내에서 Mywork 콜백을 실행하도록 함
ㄴ 트랜잭션 내에서 작업을 실행하고 결과를 반환하도록 함

 

 

util/TransactionCallback.java

ㄴ T 타입으로 변경해주도록 함

=>
util/TransactionTemplate.java

ㄴ T 타입으로 변경해주도록 함

=>

service/DefaultBoardService.java

=>
service/DefaultBoardService.java

=>
service/DefaultBoardService.java

=>

service/DefaultBoardService.java

ㄴ 해당 코드 제거

=>
service/DefaultBoardService.java

ㄴ 해당 코드 제거

=>

service/DefaultBoardService.java

=>
service/DefaultBoardService.java

ㄴ 파라미터 타입 제거

=>

service/DefaultBoardService.java

ㄴ 해당 코드 제거

=>
service/DefaultBoardService.java

ㄴ 해당 코드 제거

=>

service/DefaultBoardService.java

=>

service/DefaultBoardService.java

=>

service/DefaultBoardService.java

ㄴ 해당 코드 제거

=>
service/DefaultBoardService.java

ㄴ 해당 코드 제거

=>

service/DefaultBoardService.java

=>

service/DefaultBoardService.java

=>

service/DefaultBoardService.java

=>

service/DefaultBoardService.java

ㄴ 해당 코드 제거

=>

service/DefaultBoardService.java

ㄴ 해당 코드 제거

=>
service/DefaultBoardService.java

 

 

 

service/DefaultMemberService.java

ㄴ PlatformTransactionManager -> TransactionTemplate 으로 변경

=>

service/DefaultMemberService.java

ㄴ 생성자 변경

=>
service/DefaultMemberService.java

=>
service/DefaultMemberService.java

ㄴ 해당 코드 제거

=>

service/DefaultMemberService.java

=>

service/DefaultMemberService.java

ㄴ 문장 하나이므로 중괄호 제거

=>

service/DefaultMemberService.java

=>

ㄴ 문장 하나이므로 return, 세미콜론(;) 제거

=>
service/DefaultMemberService.java

 간결하게 정리

=>
service/DefaultMemberService.java

ㄴ 해당 코드 제거

=>

service/DefaultMemberService.java

=>

service/DefaultMemberService.java

=>

service/DefaultMemberService.java

ㄴ 한 문장으로 만들기

=>

service/DefaultMemberService.java

ㄴ 해당 코드 제거

=>

service/DefaultMemberService.java

=>

service/DefaultMemberService.java

=>
service/DefaultMemberService.java

ㄴ 한 줄로 만들기

 

 

 

service/DefaultBoardService.java

ㄴ 한 줄로 만들기

=>

service/DefaultBoardService.java

ㄴ count 변수 제거하고 return 문에 직접 넣기

=>

service/DefaultBoardService.java

ㄴ 다른 메서드 처럼 rv -> count 로 변경

=>

ㄴ App 실행

=>

=>

=>

=>

=>

=>

=>

=>

=>

=>

=>

전체적으로 테스트 정상적으로 실행됨을 확인