더북(TheBook)

원자적 집계

원자적 집계Atomic Aggregate는 함께 갱신되거나 전혀 갱신되지 말아야 할 값을 모두 포함한다. 기억을 더듬어보자. 관계형 데이터베이스는 ACID 속성을 지원하며 ACID에서 A는 원자성을 의미한다고 했었다. 관계형 데이터베이스와 일부 키-값 데이터베이스는 여러 문장이 실행될 때 모두 성공적으로 완료되거나 모두 완료되지 않아야 하는 트랜잭션을 지원하고 있다.

Tip 트랜잭션을 지원하지 않는 키-값 데이터베이스를 사용하고 있다면 트랜잭션 대신 원자적 집계 패턴을 사용하는 것이 좋다.

원자적 집계 패턴은 단일 할당 문장을 사용해 값을 여러 개 저장한다. 예를 들어 콘서트 티켓 애플리케이션에서 경기장 티켓이 팔릴 때마다 그 기록을 남긴다면 일자, 위치, 좌석 정보를 저장해야만 할 것이다. 예를 들어 보자.


ConcertApp[ticketLog:9888] = {'conDate':15-Mar-2015, 'locDescr':
'Springfield Civic Center', 'assgnSeat': 'J38'}

이렇게 처리하면 세 가지 값이 모두 저장되거나 전혀 저장되지 않을 것이다. 각 속성을 독립적으로 저장한다면 일부 값은 저장되지만 일부는 저장되지 않을 위험이 있다.

위에 있는 원자적 집계 문장 대신 다음과 같은 문장 3개를 사용한다고 해보자.


ConcertApp[ticketLog:9888:conDate] = 15-Mar-2015
ConcertApp[ticketLog:9888:locDescr] = 'Springfield Civic Center'
ConcertApp[ticketLog:9888:assgnSeat] = 'J38'

만약 서버가 디스크에 locDescr 속성값을 쓴 후 assgnSeat 속성값을 쓰다가 오류가 발생했다면 중요한 데이터 일부를 잃어버리게 될 것이다. 원자적 집계 패턴은 트랜잭션 기능을 완전히 대체하지는 못하지만 한 무리의 속성값 중 일부만 저장되는 문제를 피할 때는 도움이 된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.