본문 바로가기

카테고리 없음

'BEGIN NOT ATOMIC' 사용하는 이유

Atomicity 원자성

트랜잭션 ACID 성질 중 A에 해당하는 Atomicity 원자성. 이는 하나의 트랜잭션의 연산들이 모두 성공하거나 반대로 전부 실패되는 성질을 말합니다. Atomic transaction은 종종 느린 경우를 볼 수 있는데 이는 시스템이 모든 작업이 성공하거나 아무것도 성공하지 않도록 보장해야 하기 때문입니다. 여기에는 리소스 잠금, 데이터 일관성 보장, 실패 시 롤백 처리가 포함됩니다.

 


 

BEGIN NOT ATOMIC 을 사용하는 이유

이를 토대로 생각해보았을 때 BEGIN NOT ATOMIC 구문을 사용하는 것은 이 원자성이 충족되지 않아도 된다는 의미입니다. BEGIN NOT ATOMIC 을 사용하는 이유들로는 다음과 같은 내용이 있을 수 있습니다. 

 

부분적 성공을 허용시키는 것이 바람직한 경우

예를 들어, 일괄 처리에서 데이터의 일부는 성공하고 다른 일부는 실패할 수 있으며, 시스템은 전체 트랜잭션을 되돌릴 필요 없이 처리할 수 있는 것을 처리하도록 설계될 수 있습니다. 이는 시스템의 한 부분에서 오류가 발생해도 나머지 작업이 중단되지 않아야 하는 상황에서 일반적입니다.

 

어떤 시나리오에서는 실패한 작업을 롤백하는 것이 중요하지 않거나, 단순히 트랜잭션의 일부를 성공시키고 실패를 별도로 처리하는 것보다 비용이 더 많이 듭니다. 예를 들어, 로깅이나 분석에서 전체 트랜잭션이 실패하더라도 일부 데이터는 가치가 있을 수 있으므로 원자적, 전부 아니면 전무의 접근 방식이 필요하지 않습니다.


 

"BEGIN NOT ATOMIC" 가 사용될 수 있는 예시

ETL(추출, 변환, 로드) 프로세스

: 데이터가 변환되어 여러 시스템으로 이동하는 데이터 처리 파이프라인. 이러한 경우 파이프라인의 일부는 다른 파이프라인이 실패하더라도 성공할 수 있습니다.

 

마이크로서비스

: 서비스가 비동기적으로 통신하고 한 서비스가 실패해도 다른 서비스가 계속되는 것을 막을 수 없는 시스템입니다.

 

분산 데이터베이스

: 일부 NoSQL 또는 분산 데이터베이스 시스템은 네트워크 파티션의 경우 부분 업데이트를 허용할 수 있으며, 모든 단계에서 엄격한 원자성이 필요하지 않고도 결국 일관성을 달성할 수 있습니다.