더북(TheBook)

마스터 없는 복제를 통한 확장성 확보

마스터-슬레이브 복제 모델에서 단일 서버가 쓰기 요청을 처리하게 구성되어 있는 경우 쓰기 작업이 많아지면 제대로 동작하지 않게 된다. 롤링 스톤스Rolling Stones 그룹이 세계 투어를 하기로 했다고 가정해보자. 전 세계의 팬들이 콘서트 티켓을 사려고 벌떼처럼 모여들 것이다. 팬들은 콘서트가 열리는 도시를 찾으려고 대량의 읽기 작업을 만들어 낼 텐데, 일단 자신의 위치와 인접한 한두 개의 도시를 찾고 나면 티켓을 구입할 준비가 되었다고 볼 수 있다.

이같은 콘서트 티켓 프로그램을 설계하는 소프트웨어 공학자가 있다면 이 사람이 고려해야 할 내용은 제법 많다. 이를 정리하면 다음과 같다.

콘서트 장소와 날짜 저장

콘서트 장소 가용 좌석

구역별 좌석 가격

고객 1인당 구입할 수 있는 최대 티켓 수

고객은 잔여 좌석을 확인한 후 티켓을 구입하는 경향이 있다. 따라서 고객이 티켓을 구입하려고 좌석을 선택할 때 잔여 좌석을 보여줘야 한다.

이 외에도 더 많은 요구 사항이 있을 수 있지만, 이 소프트웨어 공학자가 직면한 과제에 대한 기본적인 고려사항은 이 정도로도 충분하다.

많은 고객이 한꺼번에 몰려 데이터베이스에 쓰기 작업을 요청할 가능성이 있으므로 확장성 측면에서 볼 때 단일 서버를 운용하는 것은 한계가 있다. 이런 애플리케이션에 더 적합한 모델은 마스터 없는 복제 모델로, 노드에 있는 서버가 모든 읽기와 쓰기 작업 요청을 받아 처리한다. 하지만 이런 식으로 처리한다면 다음과 같은 의문이 들 것이다. 쓰기 작업을 어떻게 처리해야 둘 이상의 서버가 같은 좌석을 여러 고객에게 판매하는 오류를 방지할 수 있을까(그림 3-9)?

▲ 그림 3-9 최악의 상황 - 여러 팬이 같은 좌석 티켓을 구입하는 경우

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