최근 노드 사용 중 이상한 에러가 발생하는 것을 확인했다.
에러의 이름은 DOMException [AbortError]
, 전에는 분명 생기지 않던 문제고 어디서 일어나는 에러인지 파악하기 힘들었다.
또 다른 분들에게는 일어나지 않는 문제인지(아마 AbortController
자체가 별로 잘 쓰이지 않는 탓일 거다.) 인터넷에서도 원인을 파악하기 쉽지 않았다.
원인은 간단하다. 노드의 기본 AbortController
클래스에서 변경점이 있었다.
이렇게 보니 정말 단순한데 이리저리 섞인 코드에서 이 부분을 추측하는 건 쉽지 않았다.
위의 그림과 같이 과거에는 abort()
호출시 signal
의 reason
은 undefined
로 세팅되었는데 17 버전부터는 위와 같이 DOMException [AbortError]
를 일으키도록 변경되었다.
아래 소스코드는 원인을 찾던 도중 발견한 nodejs의 lib 소스코드 링크이다.
node 17 버전에서의
lib/internal/abort_controller
https://github.com/nodejs/node/blob/v17.9.1/lib/internal/abort_controller.js#L320-L323
node 16 버전에서의
lib/internal/abort_controller
https://github.com/nodejs/node/blob/v16.15.1/lib/internal/abort_controller.js#L154-L156
--
이는 최근 node 17에서 DOMException을 global 접근 가능하도록 공개했는데 이 과정에서 API 변경점이 있었던 것 같다.
메이저 버전이 올라갔으니, 그럴 수도 있는데 솔직히 이런 사소한 것 같으면서도 중요한 차이점은 놓치기 쉬워서 문제를 찾기 힘들었다.
혹시 DOMException [AbortError]
관련 문제가 발생한다면 사용중인 외부 패키지에 AbortController
, AbortSignal
을 사용하고 있는지 확인해 보아라. 아마 이때문에 생겼을 가능성이 있다.