https://velog.io/@dubu4050/Project-Nyang-Typeorm을-이용한-Transaction-설정
https://cherrypick.co.kr/typeorm-basic-transaction/
@transactional() 데코레이터를 사용하면 간단하게 되지만 TEST에서 mocking시 에러를 발생한다.
이에 대한 대안으로 추가적인 라이브러리가 있긴한데
너무 라이브러리에 의존적이 될 것 같고 nestJS 공식 문서에도 수동으로 제어하길 권장하고 있어서 수동적인 방식으로 사용했다.
https://docs.nestjs.kr/techniques/database#transactions
트랜잭션 적용한 부분
- save나 update가 하나만 있으면 트랜잭션 처리 안해줌
- 그 이유는 어차피 전 후에 같이 사용되는 쿼리가 없기 때문에 롤백이고 뭐고 할 이유가 없음
- 굳이 자원을 더 사용할 필요가 있나?
- save나 update가 안되면 에러가 뜰 것
- find도 안해줌
- 그 이유는 어차피 await으로 기다리고 if문으로 애플리케이션 단에서 에러처리를 해주기 때문에 굳이 할 필요가 없음
- update, save, delete 등 여러 개가 한 로직에 실행될 때 그 부분을 트랜잭션으로 감싸줌
save, update, delete 시 await??
- 실행 이후에 사용하지 않는다면 await을 걸어주지 않아도 된다 라고 생각했는데 그럼 에러로 인해 실행이 제데로 안되었다면???
- 이 때 await을 안하면 못잡지 않나?? → 실제로는 저장이 안되었지만 클라에는 성공했다고 응답이 갈 수 있음
- 그래서 난 await를 달아주었다.