NestJS + TypeORM 트랜잭션을 다룰 때 반드시 피해야 할 패턴
✍️ Today I Learned 현재 사내 프레임워크는 NestJS를 사용하고 있으며 클라이언트에게 요청을 받고 응답을 반환하는 Controller 클래스와 비즈니스 로직을 담당하는 Service 클래스 그리고 최종적으로 데이터베이스에 CRUD 작업을 담당하는 Repository 클래스를 사용하는 계층형 아키텍처로 구성하여 사용하고 있다. 단순한 단일 INSERT, UPDATE를 넘어서, “모든 작업이 성공해야만 커밋하고, 하나라도 실패하면 전부 롤백” 되어야 하는 비즈니스 구조는 빈번히 일어난다. (이러한 상황은 실무에서 꽤나 자주 마주친다. 🥲) 이런 경우 Service 클래스의 하나의 메서드 안에서 여러 개의 DB 작업을 처리해야 할 때 을 활용해서 트랜잭션을 사용하고 있다. 꼭 이렇게 사용해야만 한다는건 아니지만, 이 점은 꼭 주의해야할 패턴에 대해 느낀점이 있다. 오늘은 이를 간략하게 기록으로 남겨보려한다. 1. 트랜잭션이란? 사실, 우리가 흔히 말하는 트랜잭션(Trans…