Transactional 애노테이션 사용방법

728x90


transaction 효과 - 애노테이션 추가

한번에 실행해야 하는 다수개의 SQL문장작업이 필요할 때 사용
예시  : 게시글 저장과 첨부파일 정보 저장(서버), 첨부파일 정보 저장(DB)이 동시에 필요함
예시2 : A은행에서 B은행으로 계좌이체 -> 상호간의 은행 서버에서 데이터 증감이 동시에 일어나야 함. 즉 한 transaction에 의해 실행되어야 한다.

실제 사용예시
@Service 클래스에서 사용되고 코드는 아래와 같다.

꼭 Service에서 사용할 필요는 없지만 @Service에서 로직을 수행하기 때문에 Service에서 수행

@Transactional(rollbackFor={Exception.class})
public String saveBoard(Board board, MultipartFile[] files){
//만약 게시판에서 저장되어야할 파일이 있고 DB와 서버의 동시통신이 필요할 때 transaction을 사용하여 작업을 동시처리한다.

@Transactional(rollbackFor={Exception.class})
public String saveBoard(Board board, MultipartFile[] files){
	//만약 게시판에서 저장되어야할 파일이 있고 DB와 서버의 동시통신이 필요할 때 transaction을 사용하여 작업을 동시처리한다.
	this.saveBoard(board) //게시글 저장
	for(int i = 0; i<files.length; i++){
		this.saveFileInfo(files[i]); //개별의 파일 DB 저장	
		this.filesave(files[i]); //개별의 파일 서버 저장
	}	
}


위의 3개의 작업은 하나라도 오류가 생기면 큰 결함이 생긴다. 따라서 하나의 작업이 실패하면 모든 작업을 원상복구 시킬 수 있는 스프링이 제공하는 애노테이션을 transaction이라 하고 오류가 생기면 작업을 되돌릴 수 있게 rollbackFor={Exception.class}을 선언한다.

728x90