# 애그리게이트와 일관성 경계 {{tag>애그게이트, 일관성, 경계}} ## 불변조건, 제약, 일관성 - [[제약]] [[constraint]] - 모델이 취할 수 있는 상태의 수를 제한 - [[불변조건]] [[invariant]] - 항상 참이어야 하는 조건 - [[완화]] [[bend]] - 경우에 따라 규칙을 일시적으로 해제 - [[비즈니스 요구사항]] - 주문 라인은 한번에 한 배치에만 할당될 수 있다 - 주문 라인이 0 또는 1개의 배치에만 할당될 수 있고 2개 이상의 배치에 할당될 수 없음 - 코드에서 실수로 같은 라인에 대해 Batch.allocate()를 두 가지 다른 배치에 호출하는 일이 없어야 함 - 비즈니스 다른 요구사항 - 주문 라인 수량보다 더 작은 배치에 라인을 할당할 수는 없다. - [[제약조건]] : 배치에 있는 재고보다 많은 재고를 주문 라인에 할당할 수 없음 - [[불변조건]] : 가용 재고 수량이 0 이상이어야 함 - 시스템 상태를 업데이트할 때마다 코드는 이런 불변조건을 어기지 않는지 확인 필요 - [[동시성]] [[concurrency]] - 재고를 여러 주문 라인에 동시에 할당할 수 있게 되고, 배치를 변경하는 동시에 주문 라인을 할당할 수도 있음 - 보통 DB 테이블에 락(lock)을 적용해 이런 문제를 해결 ## Docs - [[애그리게이트]]