쿼리러너를 활용한 트랜잭션 적용하기
공식 문서에 나온 예시는 다음과 같다
이 트랜잭션을 내 프로젝트에 적용시켜야한다.
공식문서의 예시엔 dataSource를 임포트해서 써주지만 나는
queryRunner에 manage.connetion을 활용해서 DB연결과 트랜잭션을 관리했다
트랜잭션은 동시성을 처리하기 위한 기술요소인데 메서드를 하나씩 살펴 보겠다.
createQueryRunner()는 커넥션을 활용해 디비와 연결하는 설정 단계임
startTransaction()은 트랜잭션을 시작하겠다는 의미
즉, starttransaction을 걸면 오토 커밋을 안하겠다는 말임
그렇다면 DB에는 내가 수동적으로 commit 해줘야한다는 의미
이런식으로다가 commitTransaction() 으로 디비에 트랜잭션을 커밋해준다.
만약 에러가 발생하면 catch 블록에서 rollbackTransaction() 메서드를 호출해 트랜잭션을 롤백함
즉, 디비에 커밋을 하지 않고 실패하게끔 디비에 저장되지 않는거임
마지막 finally 블록에서는
release()를 호출하여 쿼리러너를 해제함
디비 연결을 끊고 메모리 누수를 방지한다는데
뭐 무튼 그럼
이런 트랜잭션 메서드를 통해서
디비의 일관성을 유지할 수 있고 동시성 처리가 가능하게됨.
Swagger도 사용해봤음
스웨거를 사용하려면
먼저 스웨거 셋업파일을 하나 만들어줘야함
그런다음 main.ts에 결합해주고
Swagger 메서드를 가지고 설명 적어주면됨
요런식으로다가
DTO에다가 Swagger 쓰면 이쁘게 example 만들기 가능