caffeine-library/Domain-Driven-Design

[additional] DynamoDB를 사용하는 프로젝트에서 트랜잭션과 롤백을 사용하지 않고 있다면 그 이유는?

Closed this issue · 2 comments

연관 챕터

#30

조사 내용

저희 팀은 DynamoDB를 사용하고 있는데
DynamoDB가 제공하는 트랜잭션과 롤백 기능을 사용하지 않고
자체적인 복구 메커니즘을 직접 구현해 복구를 수행하고 있습니다.

그렇게 하는 이유가 궁금해서 ChatGPT에게 물어보았고 그럴 듯한 답변을 준 것 같습니다.

Q. DynamoDB는 트랜잭션과 롤백 기능을 지원해주나요?
A.

예, Amazon DynamoDB는 트랜잭션과 롤백 기능을 지원합니다.

DynamoDB는 ACID 원칙 중 일부를 충족시키는 트랜잭션을 제공합니다. 이를 통해 여러 개의 항목을 묶어서 하나의 원자적인 작업으로 수행할 수 있으며, 성공하거나 실패할 경우 모든 작업이 롤백됩니다.

DynamoDB에서 트랜잭션은 TransactWriteItems API를 사용하여 수행할 수 있으며, 모든 쓰기 작업 (PutItem, UpdateItem, DeleteItem) 및 일부 작업 (ConditionCheck, Lock)을 포함할 수 있습니다.

따라서 DynamoDB를 사용하면 안전하고 일관성있는 데이터 작업을 수행할 수 있습니다.

Q. 굳이 그 기능을 쓰지 않고 자체적인 복구 메커니즘을 사용하는 팀이 있다면 그 이유가 뭘까요?
A.

DynamoDB의 트랜잭션과 롤백 기능은 데이터 무결성과 일관성을 유지하는 데 중요한 역할을 합니다. 그러나 이러한 기능을 사용하지 않는 팀이 있는 경우에는 다음과 같은 이유가 있을 수 있습니다.

1. 성능: 트랜잭션은 여러 작업을 하나의 원자적인 단위로 수행하므로 일반적으로 단일 작업에 비해 더 많은 리소스를 사용합니다. 또한 롤백 기능은 작업을 완료하고 나서도 일부 리소스를 유지해야 하므로 성능에 영향을 미칠 수 있습니다. 팀은 자체적인 복구 메커니즘을 사용하여 데이터 일관성과 무결성을 유지하면서도 성능을 개선할 수 있습니다.

2. 비용: DynamoDB에서 트랜잭션과 롤백 기능을 사용하려면 데이터베이스 용량과 처리량에 따라 추가 비용이 발생합니다. 팀이 이러한 기능을 사용하지 않으면 비용을 절감할 수 있습니다.

3. 복잡성: 트랜잭션과 롤백 기능은 구현하기가 복잡할 수 있습니다. 이러한 기능을 사용하는 경우에는 코드가 복잡해질 가능성이 높아집니다. 따라서 팀은 자체적인 복구 메커니즘을 사용하여 코드를 단순화할 수 있습니다.

4. 기술적 제약: 일부 애플리케이션에서는 DynamoDB의 트랜잭션과 롤백 기능을 사용할 수 없는 경우가 있습니다. 예를 들어, 트랜잭션의 범위가 제한되어 있거나 DynamoDB의 일부 기능과 호환되지 않는 경우입니다. 이러한 경우에는 팀이 자체적인 복구 메커니즘을 구현해야 할 수 있습니다.

따라서 이러한 이유로 인해 일부 팀은 DynamoDB의 트랜잭션과 롤백 기능을 사용하지 않을 수 있습니다.

여러분 팀에서는 어떻게 트랜잭션과 롤백을 처리하고 있는지, 그 이유는 무엇인지 나누어보고 싶습니다.

  • 어떤 DB 종류를 사용하는지
  • 해당 DB가 제공하는 기능 중 어떤 기능을 사용하는지
  • Locking의 Level을 어느 정도 수준으로 관리하고 있는지
  • DB가 제공하는 기능이 아닌 자체적으로 트랜잭션/롤백 관련 기능 구현한 것이 있는지
  • 등등

과거에 나누어보았던 '격리 수준' 관련 이슈를 리뷰하면서 답변하면 더 좋을 것 같습니다.

[관련 이슈]

본 책 6장은 도메인 모델의 생명주기와 관련하여
MODEL-DRIVEN-DESIGN을 효과적으로 구현하고 관리하기 위한 보조적 수단으로 FACTORYREPOSITORY가 있다고 했는데요

Entity가 사용하는 Value Object 등을 메모리 상에 캐싱하는 것 또한 중요한 보조적 수단이라고 생각이 듭니다
여러분 팀에서는 캐싱을 어떻게 관리하고 계신지
해당 도메인의 특성과 요구사항과 연관 지어 나누어보면 좋을 것 같습니다.

  • Redis, 로컬 캐싱 등 다양한 캐싱 기법들 중 어느 것을 사용하는지
  • 해당 캐싱 기법을 사용하는 이유가 무엇인지
  • 캐싱 관련 옵션(TTL 등)은 어떻게 주고 있는지
  • 등등

[관련 이슈]