카카오뱅크는 어떻게 MySQL로 데이터 유실을 막았을까

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

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

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

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

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

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

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

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

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

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

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

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

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

카카오뱅크는 MySQL을 사용하면서 이 문제를 해결했다. 슬레이브가 마스터의 데이터를 비동기 방식으로 복제해도 데이터가 유실될 가능성을 막았다는 것이다.

성동찬 카카오뱅크 DBA는 16일 네이버의 개발자 컨퍼런스 ‘데뷰(DEVIEW) 2017’에서 카카오뱅크가 어떻게 이런 일을 했는지 비법을 공개했다.

결론적으로 말하자면 로스리스 리플리케이션(Lossless Replication)이라는 기능과 MHA(Master High Availability)라는 기능을 조합해 데이터 무손실이라는 목표를 달성했다고 그는 설명했다.

로스리스 리플리케이션은 마스터에 변경이 생기면 ‘릴레이 로그’라는 것을 슬레이브에 남긴다. 슬레이브가 마스터를 복제하기 전에도 릴레이 로그가 남는다. 이는 마스터가 슬레이브에 데이터를 넘기기 전에 셧다운 된다고 해도, 슬레이브에 남아있는 릴레이 로그를 활용해서 마스터와 똑같은 데이터를 생성할 수 있다는 것이다. MHA는 이를 기반으로 재빨리 복구하는 역할을 한다.

성동찬 DBA는 “마스터와 슬레이브의 데이터가 꼭 일치하지 않아도 장애가 발생했을 때 데이터가 유실되지 않으면 된다”면서 “슬레이브 어딘가에 마스터 변경 기록이 있고, 이를 이용하면 데이터 유실을 막을 수 있다”고 말했다.

카카오뱅크의 오픈소스 DB 사용은 엄청난 도전이다. 오라클 DB를 쓴다고 누가 뭐라고 할 사람은 없었다. 오라클 DB를 썼다면 데이터 비동기 복제 때문에 고민할 필요도 없었다. 자칫 MySQL이 멈춘다면 은행 업무 전체가 중단된다. 시중은행으로 비교하자면 전국의 은행지점이 동시에 문을 닫는 것과 마찬가지다.

카카오뱅크는 엄청난 위험부담을 스스로 껴안고 혁신, 한국에서는 아무도 가지 않았던 길에 도전한 셈이다.

성 DBA는 “레퍼런스(참조할 사례)가 없다는 것이 이렇게 힘든 일인줄 몰랐다”며 “이제는 스스로 레퍼런스가 되는 것이 목표”라고 말했다.

글. 바이라인네트워크
<심재석 기자>shimsky@byline.network

 

3 댓글

  1. “레퍼런스(참조할 사례)가 없다는 것이 이렇게 힘든 일인줄 몰랐다”며 “이제는 스스로 레퍼런스가 되는 것이 목표”
    이거 개멋있지않냐.

  2. 미국이나 유럽에선 저런 마인드로 일하는 사람이 흔하겠지만
    우리나라에서 저런생각하는 사람은 드물지
    무슨 과제가 떨어지면 누가 먼저 한거 없나만 찾는 대한민국 IT계에서
    스스로 레퍼런스가 되는게 목표라니 이 거지같은 IT라는 일을 진지하게 접근하는 멋진분이구먼…

  3. 이건 너무 개발자적 시점인 거 같아요. 그냥 오라클 쓰고 주가나 복구해주세요. 저도 개발자지만 이런 게 중요한 게 아닌데,,

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다