[TIL #35] 데드락에 죽다 살다
·
Camp/T.I.L.
현재 진행 중인 프로젝트는 레이드 컨텐츠 입장을 위해 큐를 사용한다.최초로 개발하며 개념 검증 시엔 원시적인 큐만 사용했고, 이는 동시성 문제어 이어질 수 있었다.따라서 Bull을 도입하게 됐다. 하지만 Bull만 도입한다고 되는 것은 아니었다.Bull 자체의 ``Job``에 대해선 원자적 처리를 보장하지만 그 이외의 부분에 대해선 원자적 처리가 보장되지 않는 상황이다.각각의 필요한 모든 부분에 대해 명시적으로 락을 걸어 완전한 원자적 처리를 보장해야 했다.이러한 처리를 위해 async-lock을 도입했다. // pendingGroups 접근을 안전하게 하기 위한 헬퍼 메서드async withPendingGroupsLock(fn) { return this.pendingGroupsLock.acquire..