본문 바로가기

dev/스프링

use try-with-resources or close "DefaultTransaction" in a "finally" clause 버그 수정

얼마 전에 시큐어 코딩하다가 다음과 같은 버그를 발견하게 되었습니다.

 

버그 화면

 

이런 버그는 처음 접해서 구글링해 본 결과

 

트랜잭션을 커밋하다가 예외가 발생했을 경우 처리하는 경우가 없어서 발생한 버그였습니다.

 

예를 들면 데이터베이스에 작업하다가 에러가 발생한 경우 지금까지 작업한 내용을 반영(commit) 하지 않고

 

작업하기 이전 상태로 롤백하는 경우라고 생각하시면 될 거 같습니다.

(현재 작업 중인 트랜잭션 취소)

 

before 소스

 

회사 소스 코드라 모자이크 처리한 거 이해해주시기 바랍니다.

 

after 소스

 

위의 소스를 보게 되면 finally 안에 "transaction.close();"가 추가된 것을 볼 수 있습니다.

 

트랜잭션 작업 중간에 예외가 발생하거나 발생하지 않아도 트랜잭션이 해제되도록 수정했습니다.

 

앞으로 트랜잭션 관련 작업을 할 때 유의하면 좋을 거 같습니다.