카카오뱅크, 마이SQL 잘 쓰는 비결

DB엔지니어 성동찬·성세웅 씨

컴퓨팅입력 :2017/09/17 09:54    수정: 2017/09/18 09:23

IBM, HP, 오라클의 유닉스 서버와 데이터베이스(DB) 조합이 국내 금융권 전산시스템 주류다. 대다수 시중은행은 x86 서버와 오픈소스SW를 '검증되지 않은 솔루션'으로 치부해 왔다. 비용 절감과 서비스 혁신을 위한 대안으로 여기지 않았다. 검증된 안정성을 우선시하는 업계 인식 때문이다.

지난 7월말 개업한 인터넷은행 카카오뱅크는 이런 업계 불문율을 깼다. 전산시스템을 x86 기반 리눅스 서버로 구성했고, 오라클DB의 전유물이었던 핵심업무 관련 DB인프라 상당부분을 '퍼코나(Percona)'의 마이SQL(MySQL) 계열 오픈소스DB로 대신하기로 했다.

오리지널 마이SQL은 개인용 홈페이지를 위한 웹서버에 흔히 쓰일 정도로 대중적이다. 그만큼 안정성보다는 접근성에 초점이 맞춰져 있다는 시선을 받아 왔다. 보수적인 세계에서 카카오뱅크의 대규모 오픈소스DB 인프라는 엄청난 모험 또는 무모한 시도로 비치기 십상이다.

하지만 카카오뱅크는 영업 5일만에 100만 계좌를 돌파할만큼 많은 접속을 별 탈 없이 소화했고 1개월 넘게 '무장애' 운영 기록을 세웠다. 이런 카카오뱅크의 오픈소스DB 활용은 저비용으로도 금융권 전산시스템에 요구되는 고안정성을 충족할 수 있다는 메시지로 비친다.

카카오뱅크의 오픈소스DB 인프라를 맡고 있는 두 명의 DB엔지니어, 성동찬 씨와 성세웅 씨의 생각이 그랬다. 이들은 금융업에 걸맞는 안정성을 오픈소스 기술로 달성하기 위해 고군분투해 온 인물들이다. 지난 13일 경기도 판교 사업장에서 두 사람을 만나 그 경험을 들어봤다.

성동찬 씨는 2008년 SW개발자에서 DB이슈 해결을 위해 관심을 갖고 커리어를 쌓다가 카카오 DB관리자(DBA)가 됐고, 1년 전 카카오뱅크 서비스 준비 기간부터 오픈소스DB 인프라를 준비해 왔다. 성세웅 씨는 2000년초 DB보안 엔지니어로 일하기 시작해 티맥스소프트, 다음을 거쳐 카카오의 오라클DB 담당 DBA로 일하다가 지난 3월부터 성동찬 씨와 오픈소스DB 인프라 준비 업무를 나눠 수행하게 됐다.

카카오뱅크 DBA 성동찬 씨(왼쪽)와 성세웅 씨

이들이 카카오뱅크 금융서비스에 마이SQL을 활용한 경험과 노하우가 확산되면 향후 국내 금융권 전산시스템 구축 및 활용 방식에 일정부분 변화를 불러일으킬 것으로 기대된다. 두 카카오뱅크 DB엔지니어와의 인터뷰를 아래 1문1답으로 재구성했다.

■ 30일 무장애, DB CPU 점유율 5% 미만 기록

- 어떤 업무를 맡고 있는지, 카카오뱅크 영업 시작 전후 차이가 있는지

성동찬: 지난해에는 갖춰진 게 없는 상황에서 (금융업무에 필요한 DB인프라를) 만들려다보니 '구축' 위주였다. 이제 서비스가 시작돼 다양해졌다. 무장애, 성능 측정 및 유지, 자동화, 운영, 문제대응, (애플리케이션) 개발자 수요 파악 및 예측, 새로운 기술 적용시 테스트까지 한다.

성세웅: 올 3월쯤부터 성동찬 씨와 함께 일한다. 사람이 부족한 조직에서 어떻게든 은행업무가 가능한 인프라를 만들어내기 위해 마이SQL 담당팀에 합류하게 됐다. 성동찬 씨가 이전까지 혼자서 인프라 구축, 자동화를 수행하면서 많은 일을 해냈다. 혼자선 버거운 일이기도 하고, 나도 이 분야에 도전해보고 싶다는 측면도 있었다.

-타 금융권에서는 여러 부서나 담당자로 나뉜 업무를 2명이 하나

성동찬: 개발에 더해 안정성 확보가 중요한 일이 됐다. 사실 업무영역 측면에서 DBA는 애매한 위치에 있다. 개발자도 아니고 시스템관리자도 아니다. 하지만 개발업무가 어떤식으로 흘러가는지 흐름을 알고 있어야 한다. 서버 시스템에서 돌아가는 서비스가 내 DB인프라의 클라이언트니까, 그만큼 서버 시스템도 알아야 한다. 다만 우리 2명이 도저히 소화 불가능한 만큼의 과중한 업무를 하고 있는 건 아니다. 많은 부분은 자동화돼 있다. 전적으로 그렇게 되도록 시스템을 구축해 놨다.

성세웅: 지적한대로 기존 은행에서는 역할이 나뉘어 있다. 인프라를 만들어가는 사람들이나 DBA가 여러 명이다. 이유가 있겠지만, 그 환경에 뭔가 기존 시스템을 바꿔서 (새로운 기술이나 아이디어를) 적용하는 게 쉽지 않다. 여기선 2명이 하는데 좋은 점으로 작용한다. 여러 데이터 흐름을 보면서, 다른 담당자의 운영과 개발을 돕는 역할을 많이 할 수 있다. 새로운 오픈소스 기술을 다루면서 이 기능보다는 저런 기능이 좋겠다든가. 우리는 그런 것을 같이 연구할 수 있다.

성동찬: 문제가 생기면 해결해야 하는 입장이다보니 데이터를 매일 들여다보면서 시간이 지나면 발생할 거라고 예측할 수 있는 문제를 인지해 놓게 된다. 지속적으로 DB에 들어가 인덱스와 데이터를 보면서, 튜닝할 요소가 있는지, 최적화할 게 있는지 보게 된다. 잠재적인 리스크를 당장 해결하지는 못해도 어떤 문제가 생길지 파악해 놓는 식이다.

성세웅: 사실 떨리긴 한다. 뭘 하나 하려고 해도 조심스럽고. (DB인프라 변경 적용시) 이게 맞는지, 테스트를 한 번 씩 더 한다든지. 그런데 2명이서 그렇게 일을 하려면 시간이 충분하진 않다. 테스트가 안 되면 (안정적인) 은행업이 안 되니까, 기존 노하우를 쏟아붓지 않을 수 없다. 그런 걸 논의하는 게 많다.

-고객이 계좌를 조회하고 돈을 맡기거나 찾을 때 들어가는 요청을 전달하는, 꽤 중요한 인프라에 오픈소스DB를 적용했는데, 누가 제안하고, 어떤 효과를 기대하고 그런 결정을 내린 건지

성동찬: 정확히 말하면 오픈소스 전문업체인 퍼코나에서 만든 마이SQL 커스텀 버전의 공개된 소스코드를 사용하면서, 퍼코나의 유료 서비스를 사용하고 있다. 제공된 코드상의 문제가 발생했을 때 그걸 만든 사람들의 기술력으로 도움을 받을 수 있는 비용이다. 이점은 천문학적인 오라클DB 엔터프라이즈 라이선스 대비 많이 저렴하다는 것. 비용절감에 큰 효과가 있다. 우리가 사용하자고 요청해 윗분이 결정했다.

성세웅: 오픈소스DB를 위해 개발된 다양한 툴과 기능을 활용할 수 있어 이점이다. 활용을 논의했던 기능 중 하나가 '토쿠DB(TokuDB)'였다. 데이터 단편화를 줄이고 압축률을 높여 주는 기능이다. 플러그인 형태로 쓸 수 있다. 테스트를 해 봤더니 우리가 원하는 성능을 보여 줬다. 퍼코나가 이런 기능을 적용시에도 지원해 준다는 점도 좋았다.

카카오뱅크 인프라에 적용된 마이SQL DB의 역할을 도식화한 이미지. [자료=성동찬 씨 브런치]

성동찬: 사용자로서 요청시 빠른 커뮤니케이션을 기대할 수 있어 좋았다. 함께 쓰는 'PT온라인스키마체인지' 툴의 데이터 주소지 변경 처리 결과에 버그가 있었는데 바로 수정됐다. 그리고 퍼코나의 마이SQL 커스텀 버전은 오라클의 마이SQL 커뮤니티버전 소스코드를 기반으로 개발된다. 향후 오라클의 마이SQL 개발 방향이 바뀌어도, 퍼코나 쪽에서 그걸 잘 따라갈 것이라 기대하며 걱정하지 않고 쓸 수 있다.

또 상용DB 대비 오픈소스DB의 인프라에서 문제점 중 적절한 툴을 쓸 수 없는 백업 업무가 있었다. 과거 토쿠DB같은 오픈소스DB를 운영하면 스냅샷을 만들어서 이미지 백업을 하는 식으로 관리했다. 운영리소스가 많이 들어가는 단점이 있었다. 토쿠DB 개발업체가 작년엔가 퍼코나에 인수돼서, 그 상용 백업툴 '토쿠백업(Tokubackup)'이 제공내역에 포함됐다.

그리고 카카오뱅크 영업 시작 전에 은행업무에 쓰려던 신기능에 문제가 생긴 케이스도 있었는데, 오라클 마이SQL 커뮤니티버전 소스코드 이슈였다. 오라클에 직접 얘기하지 못한 상태에서 일단 퍼코나에 요청해 핫픽스를 받았고, 이후 오라클에 정식판(GA) 수정 반영을 요청할 때 퍼코나가 '푸시'해주기도 했다. 물론 간단한 문제는 우리가 검토해 수정하기도 한다.

■오픈소스DB, 금융서비스에 어디까지 쓸 수 있을까

-정말 오픈소스DB로 안정적으로 운영할 수 있는 건가

성동찬: 영업 시작 이래 (9월 13일 현재까지) 무장애 상태를 유지하고 있다. 30일 무장애 기록 당시(8월말)에는 적지 않은 트래픽이 집중되는 상황에서도 DB시스템의 CPU 리소스 점유율도 5% 미만으로 유지하고 있었다. 속으로는 예상보다 많은 트래픽이 들어와 '흠칫'했지만 장애 없이 다 받아냈다. 여유가 있었지만 훨씬 더 들어올 가능성에 대비해서 추가 분산(샤딩)을 진행했다. 우리가 처음 생각하고 계획한 게 크게 틀리지 않았구나 생각했다.

성세웅: 샤딩은 동일 노드를 '찢어서' 여럿으로 만드는 거다. 애플리케이션이 돌아가는 중에 그걸 한다는 건, 애플리케이션이 처음부터 그렇게 구현돼 있거나, 도중에라도 개발자가 협업해 만들어줘야 가능하다. 단순한 기술이라기보다 그걸 수행하기 위해 데이터를 어떻게 분할하고 보여줄 것인지 연구가 필요하다. DB 자체 기능을 사용해 넓혀 가는 방식도 고려될 수 있었겠지만 (안 해본 방법으로) 아이디어와 기술을 활용하면서 서비스 중단이 없었다는 것, 그걸 전부 자체적으로 만들었다는 점에 의미가 크다.

성동찬: 오라클같은 상용DB에서 잘 돌던 시스템을 마이SQL에 맞게 변경했고. 무중단 분산으로 노드 추가를 빠르게. 장비 준비부터 세팅, 분산, 로딩까지 하루 정도 걸렸다. 원래 테스트만으로 몇 주도 걸릴 수 있는 작업인데 실제 실행을 하루만에 한 건 잘했다고 생각한다. 외부에선 그냥 무중단 샤드 했다 이정도로만 알고있는데, 우리는 어떻게 코드를 짜야 다른 시스템 운영 환경에 영향이 적을지 고민하면서 했다. 말 그대로 솔루션이 없는 상황에서 그걸 만들어 쓸 수 있음을 보여 준 셈이다.

성세웅: 마이SQL이 오픈소스라서 좋은 점도 있겠지만, 기능적으로는 상용DB에 부족한 게 있다. 온라인 데이터구조 변경과 같은 작업시 퍼코나에서 제공하는 툴킷 가운데 온라인스키마체인지같은 것도 쓸 수는 있는데. 우리가 대응한 방식을 다 얘기할 수는 없지만 … 금융 인프라에 걸맞는 안정적인 구조를 갖춰야 한다. 전송 방식같은 측면도 고려해서. 그 때에도 리소스 점유율을 최소화하는 방법도 고민해야 했다.

성동찬: 우리가 결정만한다고 되는 것도 아니다. 애플리케이션이 그런식으로 구현돼야 한다. 개발(팀) 쪽에서 많이 도와 줘서 가능했다. 배짱도 있었다. 이만큼 테스트했는데 안 되겠느냐는 믿음도 있었고. 금융서비스는 인프라 장애에 책임을 안고 가야 한다. 문제가 생기면 나 때문이란 마음가짐으로 수없이 테스트하고 있다. 일반 소셜서비스에서도 이게 쉽지않다. 잠깐이라도 유입을 막든지 그런식으로 하곤한다.

-어려운 점도 많이 있을 텐데

성동찬: 과거엔 그냥 했을 일도 금융서비스니까 신중할 수밖에 없다. 외부에는 여유있게 말하지만 … 테스트를 많이 했어도 실제로는 처음인 시도가 많다. 장애 대응, 레퍼런스로 안정성도 갖고 새로운 금융서비스에 맞게 최적화하고 여러가지 연관성도 고려해야 한다.

성세웅: 심적 부담이 있다. 체크 로직을 개발하는 것이 많아진다. (변경 적용 전후) 어떤 게 달라졌는지 보고 싶어서 누가 개발해 놓은 걸 체크하고, 추가 확인하고, 금융에 맞게 대응해나가는게 조심스러운 부분이다.

카카오뱅크 DBA 성동찬 씨(왼쪽)와 성세웅 씨

■"초반에 '장난감같은 DB를 왜 쓰냐'는 말을 많이 듣긴 했다"

-오라클같은 업체의 상용DB를 쓰는 금융권에선 어떻게 볼까

성동찬: (무중단 샤딩은) 스케일아웃을 하는 우리에게 필요하지만 그 환경에선 불필요한 개념이다. 일반적으로 오라클DB를 쓰는 곳은 DB인프라 안정성을 위해 성능 부족 상황에 '스케일업'으로 대응한다. 메모리, CPU 코어 등을 늘린다. 물론 약간의 '스케일아웃'을 하긴 하지만 우리처럼 같은 성격의 데이터를 쪼개서 샤딩을 하는 것과는 좀 다르다.

성세웅: 10년, 20년전 오픈소스 기술로는 금융권에서 요구하는 안정성과 성능을 볼 수 없었다. 그래서 당시 금융권은 검증됐다고 인식된 오라클 구축하는 경우가 많았다. 이후 오픈소스 기술의 성능이 엄청나게 성장했는데, 이후에도 은행은 오라클이라는 키워드 때문에 뭔가 변경하거나 바꾸는 게 어렵고, 마이SQL은 이것(금융서비스) 못해, 이러면서 계속 갔다. 우리는 업무성격에 따라 오라클DB로 하는 게 더 좋겠다 생각하면 오라클 쓰고, 바꿀 수 있으면 오픈소스로 쓰는 거고.

성동찬: 마이SQL만 고집하지 않는다. 은행에 맞는 성능, 안정성, 효율 따지려면 다양한 서비스 조합이 필요하다. DB 하나만 놓고 보면 데이터 복제(리플리케이션)기능이 있다. 장애 대응시 이것만으론 부족하다. 마이SQL 5.7 버전의 무손실복제와 '마이SQL 고가용성(MHA)', 둘을 조합해서 데이터 유실 없는 장애대응 및 서비스 방안을 찾고 이런 식이다. 퍼즐조각 맞추기, 새로운 레퍼런스 창조같은 재미가 있다.

-금융서비스 인프라에 오픈소스DB 쓰는 게 무모하다는 시선은 없나

성동찬: 초반에 '장난감같은 DB를 왜 쓰냐'는 말을 초반에 많이 듣긴 했다. 어떻게 (마이SQL을) '은행DB에 쓸 수 있느냐'고. 우리 나름대로는 쓸 수 있다는 걸 보여 줬다 생각한다. 꽤나 중요한 영역에 들어가있고. 계속해서 문제를 해결하고 있고. 새로운 레퍼런스로 공유도 하고. 그런식으로 하니까 자연스럽게 받아들여지지않을까. 업계에선 어느정도 받아들이고 있는 것 같다. 다만 바꿔야된다고 말한다고 될 일은 아니다. 개발 측면에서부터 다 같이 고민해야 오픈소스 기반으로 효율적으로 갈 수 있다. 조심스레 예상해 본다면, 자연스럽게 변할 것 같다.

성세웅: 눈을 돌려 금융권을 보면 이제야 메인프레임에서 유닉스로 이전하는 곳도 있다. 지금 우리는 오라클도 리눅스에 올렸다. 이렇게 리눅스에 오라클DB를 올려서 많이 운영하는 곳은 없다. 업계에서 공감하고 위기의식을 갖긴 할 거 같다. 조금 변화 속도는 덜 할 수 있겠지만, 금융권에서도 이런 흐름은 숙지하고 있으리라 생각한다.

성동찬: 중국 어느 은행은 수십억 유저 은행의 인프라 운영을 마이SQL에서 하기도 한다. 안정성보다는 지금 돌고 있는 레거시의 문제가 작용하는 것일 수도 있다. 변화는 상용DB와 함께 쓰는 것부터 자연스럽게 올 수 있다. 필요에 따라 오라클, 마이SQL 쓰면서. 또 필요하면 몽고DB, 캐시 등 다양한 오픈소스 기술 지식을 조합해서. 흐름이 그렇게 가지 않을까.

관련기사

-앞으로 계획은

성동찬: 기술측면에서는 외부 활동을 통해 최대한 공유해서 기술의 선순환 효과를 내고 싶다. 오픈소스 기술은 개방된 것이니만큼 나도 그걸 활용하고, 그 활용 지식을 또 개방해서 (다른 조직의 종사자들도) 이득이 됐으면 한다. (업무는) 뭘 더 추가로 하기보단 현재 하는대로, 안정적으로 잘 돌리는 게 목표다. 여긴 금융업 스타트업이라 생각한다. 때마다 새로운 서비스에 걸맞게 지원하려고 한다.