USER Flow
Issue
이 과정에서 기본 정보를 입력받아서 INSERT하는 POST API를 개발하면서 서비스 로직을 @Transactional
로 묶었습니다. 하지만, 해당 정보를 바탕으로 외부 프로그램을 돌리는 것은 새로운 @Transactional
로 묶어야한다고 생각하여 트랜잭션 전파를 시도했습니다.
트랜잭션 전파를 통해 비동기적으로 프로세스를 관리해 내/외부 프로그램을 안전하게 분리했습니다.
Requires_New는 첫 트랜잭션과 두번째 트랜잭션을 완전히 분리해서 바라보기 때문에, 각자가 커밋과 롤백에 영향을 미치지 않습니다.
또한 Requires_New는 Default인 Required와 달리 무조건 새로운 트랜잭션으로 처리하기 때문에 외부 프로그램 (syft)를 새로운 트랜잭션에 담아 비동기적으로 프로세스를 처리할 수 있었습니다.
@Transactional
public void createScanTargetInfo(scanTargetInfoRequest scanTargetInfoRequest){
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void updateSbomHistoryBySyft(long sbomInfoId, String path) {
try {
} catch() {
}
}