https://byline.network/2017/10/17-6/

웨비나를 시청하신 분들께는 추첨을 통해 휴대용 살균기(5명), 피자 쿠폰(5명)을 드립니다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/ed29aa5e-395e-4d32-87bb-f74f6626d9c7/akamaiPage-ad.jpg

나는 내 은행계좌에 들어있는 돈의 실물을 본 적이 없다. 내가 가진 돈이라는 것은 은행 계좌에 숫자로 표현될 뿐이다. 월급을 받는다는 것도 회사 계좌 DB에 저장된 숫자에서 일정수를 빼고, 내 계좌 DB에 그만큼 더하기를 하는 것이다. 실제로 현금 뭉치가 오가지 않는다.

즉, 정보화 된 현대 사회에서 돈이라는 것은 숫자, 곧 데이터일 뿐이다. 아마 이는 자본주의 사회에서 가장 중요한 데이터일 것이다. 만약 월급날 회사 계좌에서는 빼기를 하고 내 계좌에 더하기를 안 한다거나, 반대로 내 계좌에서는 더하기를 하고 회사 계좌에서 빼기를 안한다면 어떻게 될까? 금융시스템, 나아가 자본주의 시스템이 무너질 것이다.

고객의 돈을 관리하는 은행의 일이라는 것은 결국 이런 데이터를 관리하는 일이며, 은행의 IT시스템은 이런 데이터를 오차 없이 잘 관리하기 위한 인프라다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c39d1c09-fd2f-4cab-bc5a-eef0d5ceb835/2017-10-17-12-35-49_Photo_46.jpg

거창하게 시작했지만 이 기사는 카카오뱅크의 DB에 대한 이야기다. 인터넷전문은행인 카카오뱅크는 MySQL이라는 오픈소스 DB를 은행의 주요 시스템에 적용해서 IT업계에서 화제가 된 바 있다.

대부분의 시중은행은 ‘오라클 DB’라는 제품을 이용해서 데이터, 즉 고객의 돈을 관리한다. 오라클 DB는 안정성과 성능 면에서 이미 검증된 제품이다. 은행들이 좌고우면하지 않고 오라클 DB를 선택하는 이유다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a637caf1-599d-4df5-a210-1bfc298be8b3/messageImage_1593407093615.jpg

그러나 오라클 DB는 매우 비싸다. 시중 은행들도 오라클 DB가 너무 비싸다고 생각한다. 그러나 고객의 돈을 지켜야 하기 때문에 ‘울며 겨자먹기’로 선택해왔다.

그런데 카카오뱅크는 채널계 시스템에 오라클 DB대신 MySQL이라는 오픈소스 DB를 사용했다. MySQL은 주로 인터넷 홈페이지 운영에 이용되는 DB였다. 카카오뱅크 DB관리자인 성동찬 씨의 표현에 따르면 “장난감 같은 DB”다.

카카오뱅크는 이런 “장난감 같은 DB”를 은행의 채널계 시스템에 도입했다. 채널계란 은행 내부시스템과 외부 시스템을 연계하는 기능을 하는 것으로, 은행의 핵심 시스템인 계정계 못지 않게 중요한 시스템으로 꼽힌다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/36ee1caf-4fad-488b-8283-a861a094d548/mysql-logo.jpg

카카오뱅크는 왜 그랬을까? 아마 가장 큰 이유는 비용절감일 것이고, 나아가 혁신을 추구하겠다는 생각이 강했을 것이다. 남들이 다 쓰는 오라클 DB를 쓰면서 차별화를 말하기는 어렵다. 고가의 오라클DB에 들어가는 비용을 절감하면 고객에게 더 많은 이익을 제공하거나 다른 혁신에 투자할 수도 있다.

그럼 어떻게 카카오뱅크는 오라클DB를 사용하지 않고 고객의 돈을 지킬 수 있을까?

시중은행들이 오라클 DB를 쓰는 가장 큰 이유는 RAC(Real application clusters)라는 기능 때문이다. RAC는 간단히 말하면 하나의 DB를 여러 서버가 공유하는 기술이다. 하나의 DB를 여러 서버가 공유하기 때문에 서버 하나가 장애가 나도 데이터 정합성이 유지된다. 데이터 정합성이 유지된다는 것은 서버 장애 때문에 고객의 돈이 사라지지 않는다는 의미다.

그러나 MySQL은 서버들이 DB를 공유하지 않는다. 서버마다 다른 DB가 있다. 이 때문에 MySQL은 마스터와 슬레이브라는 구조의 시스템을 운용한다. 마스터 서버로 시스템을 운용하면서 슬레이브 서버는 마스터 서버의 데이터를 특정 시점마다 복제한다. 마스터에 장애가 나도 복제된 데이터를 가지고 있는 슬레이브로 대체해서 운용하면 된다는 이론이다.

그러나 마스터와 슬레이브가 완전 동기화 되지 않는 것이 문제다. 마스터 서버에서 데이터가 발생한 후 슬레이브에 복제되기 전에 장애가 발생한다면 어떻게 될까? 그 데이터는 유실된다. 은행의 경우 데이터는 돈이기 때문에 고객의 돈이 사라진다. 은행이 MySQL과 같은 DB를 사용하지 않는 이유다.