Skip to content
Eojink1m Blog
Go back

MongoDB 트랜잭션 재시도

Updated:

트랜잭션 실패

데이터베이스에서 트랜잭션을 사용하는 경우 여러 이유로 트랜잭션이 실패할 수 있다. 실패에는 여러 이유가 있겠지만, 일시적인 실패와 아닌 것을 구분하고 재시도하여 작업이 유실되는 것을 방지해야 한다.

예를 들어 MongoDB에서 다수의 트랜잭션이 같은 document를 수정하는 경우, MongoDB 트랜잭션은 낙관락이기 때문에 첫 트랜잭션만 성공한다. 나머지 트랜잭션은 WriteConflict로 실패하고 수정사항은 유실된다.

MongoDB 드라이버에서 지원하는 트랜잭션 사용 방식, 발생할 수 있는 에러들의 종류, 각 트랜잭션 방식 별 에러를 처리하는 방법에 대해서 알아보자.

트랜잭션을 사용하는 방법

일단 MongoDB드라이버에서 트랜잭션을 사용하는 방법은 두개가 있다.

  1. Callback API
  1. Core API

어떤 방식을 사용해야 할까?

트랜잭션 실패 핸들링을 커스텀하고 싶다면 Core API를 사용해야 한다. 반대로 별 다른 니즈가 없는 경우 자동으로 트랜잭션 실패에 대해 처리해주는 Callback API를 사용하는 것이 좋아보인다. 트랜잭션에서 어떤 오류가 발생할 수 있는지, 각 방식에서 오류들을 어떻게 처리하는지 알아본다.

트랜잭션 사용 중 발생할 수 있는 에러

트랜잭션 사용 중 아래 3가지 에러가 발생할 수 있다.

TransientTransactionError
UnknownTransactionCommitResult
TransactionTooLargeForCache

트랜잭션 방식 별 에러 처리 방식

pymongo 기준으로 알아보자. 다른 드라이버도 대부분 비슷할 것이다.

CallbackAPI 사용 시 에러 처리 방법

CoreAPI의 처리 방법

기본적으로 Callback API와 같은 방식으로 처리하면 되고, 필요에 따라 약간씩 커스텀하면 된다.

트랜잭션 사용 시 주의점

레퍼런스


Share this post: