더북(TheBook)

콘서트 티켓 애플리케이션으로 돌아가 보자. 두 대의 서버가 같은 도시, 같은 날 밤, 같은 콘서트 장소에 있는 같은 좌석 티켓을 두 사람 이상에게 팔지 못하도록 하는 것이 도전 과제였다. 마스터가 없는 구성 환경에서 운영되는 키-값 데이터베이스는 모든 서버에서 쓰기 작업을 할 수 있기 때문에 이런 실수가 발생할 가능성이 있다. 이에 대한 해결책은 같은 날 밤, 같은 도시, 같은 콘서트 장소에 있는 같은 좌석에 대한 티켓 요청을 같은 서버에 할당하는 것이다.

▲ 그림 3-12 링 형태로 구성된 서버 여덟 대에 할당된 계수


즉, 좌석, 콘서트 장소, 도시, 날짜에 기반해 키를 만들면 된다. 예를 들어 두 명의 팬이 7월 15일 밤 오리건 주, 포틀랜드에 있는 시민회관(Civic Center)의 A73좌석 티켓을 구매하고 싶어한다고 해보자. 좌석, 시민회관의 약자(ClvCen), 포틀랜드의 공항코드(PDX), 날짜를 표시하는 네 자리 숫자를 이용해 키를 만들 수 있는데 만들어진 키는 다음과 같다.

A73:CivCen:PDX:0715

같은 날 같은 좌석 티켓을 사려는 사람은 같은 키를 만들게 된다. 키는 나머지 연산을 사용해 서버와 매핑되므로 이 좌석과 위치, 날짜가 결합된 모든 요청은 같은 서버로 전송된다. 이 좌석 티켓을 다른 서버가 처리할 가능성은 없으므로 같은 티켓을 판매하기 위해 서버끼리 경쟁하는 문제는 피할 수 있다.

키-값 데이터베이스 이야기에서 키는 절반에 불과하다. 이제 값에 대해 논의할 때가 됐다.

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