DBA가 하는 일부터 먼저 살펴보는게 순서일 것 같다.
DBA란 DBMS를 관리하는 사람을 뜻한다.
처음 접했을 땐 DB를 관리하는 사람이라 생각했다. DB는 데이터를 모아 놓은 일련의 논리적 공간이다. DBMS는 데이터를 모아 놓은 일련의 물리적 공간이다. DBMS를 관리한다는 것은 무엇을 의미할까? 아래를 예시로 들 수 있겠다.
- DBMS 백업/복구 정책 설정
- DBMS Version 관리(EOS)를 위한 upgrade(patch)
- DBMS 보안 이슈 해결(정보보안팀과 연계되어 있겠지만 기능적인 부분은 DBA가 챙겨야 할 것이다)
- DBMS 성능 문제 해결
- Data 정합성 문제 해결(DBMS적인 관점에서)
DBMS 자체가 Data랑 관계가 아주 깊다. 어느 부분에서는 서로 간에 경계가 없는 듯하다. 예를 들어 데이터의 정합성이 안맞는다면? 데이터 관리자에게 책임이 있겠지만 DBA 또한 관여를 해야 할 것이다. 혹은 데이터 소유자(Data Governer)도 회의에 같이 들어가야할 수도 있다.
서론이 길었다. 필자가 보기에 DBA에게 가장 중요한 덕목은, 아래와 같다.
DBA는 고가용성을 제공해줄 수 있어야 한다.
가용성이란 말 그대로 사용자가 필요로 할 때마다 바로 데이터를 사용할 수 있게 해주는 성질을 의미한다. 냉장고에 비유를 해보자. 냉장고에 어제 넣어둔 사과가 있다. 아래와 같은 문제점이 발생할 수 있을 것이다.
- 어제 넣어둔 사과가 없어졌다.
- 어제 넣어둔 사과가 갑자기 상해 있었다.
- 사과가 두 개가 되어버렸다.
- 사과는 없고 배가 놓여져 있다.
- 냉장고 문이 열리지 않는다.
- 냉장 기능이 약화되었다.
- 냉장고에 사과가 저절로 다른 칸으로 이동해져 있다.
DBA는 냉장고를 관리하는 사람이다. 어제 넣어둔 사과는 누가 가져가지 않는 한, 그 자리에 신선한 상태로 보관되어져야 한다. 그리고 사과를 넣어둔 사람은 당연하다는 듯이 필요할 때에 사과를 꺼낼 수 있어야 한다. 여기까지가 가용성을 유지하는 것이다.
그렇다면 고가용성은 무엇일까? 문자 그대로 해석하자면 높은 가용성을 의미한다. 가용성이 높을 수도 있고 낮을 수도 있다는 얘기인데 무엇을 의미하는 것일까? AWS의 s3를 사용해본 분이라면 아래와 같은 내용을 접해봤을 것이다.
S3 Glacier Deep Archive에 저장된 모든 객체는 최소 3개의 지리적으로 분산된 가용 영역에 걸쳐 복제되고 저장되며, 99.999999999%의 내구성으로 보호되고 12시간 이내에 복원할 수 있습니다.
100%의 내구성을 보장하지 않는다는 내용이다. 카카오톡을 이용해본 사람이라면 데이터센터에 화재가 발생하여 장시간 이용에 어려움을 겪었던 기억이 있을 것이다. 모 회사에서는 1년에 한번 아주 큰 규모의 이벤트가 발생하는데, 피크 타임에 1시간만 DBMS 장애 발생으로 서비스가 중단될 경우 수천만원의 손실이 발생한다고 한다. 기존 고객을 잃어버리거나 브랜드 이미지가 악화되는 등 무형자산까지 합친다면 피해액은 더 클것이다.
무엇을 얘기하고 싶은지 감이 왔는가? 서비스는 100% 유지될 수가 없다. 그게 인적장애든, 애플리케이션장애든, 자연재해든 말이다. 하지만 그 모든 것에 대비하여 빠르게 서비스를 복구하는 것이 가장 중요하다고 생각한다. 이와 관련된 키워드로는 SLA(SLA란 무엇인가요? - 서비스 수준 계약 설명 - AWS (amazon.com))를 들 수가 있겠다.
고가용성은 어떻게 실현되는걸까? 고가용성의 구성요소로는 무엇이 있을까? 회사의 규모나 인프라적인 요소 등에 따라 다를 것이다. DBMS마다 이중화가 다르고, 백업/복구 정책이 다르고, 소산백업까지 할 수 있는 자금적 여유가 있는 회사가 있을 것이다. DBA가 개발단, 네트워크단까지 볼 줄 알아서 다양한 관계자와 빠르게 의사소통하여 장애를 극복하는 사례도 있을 것이다. 논리 데이터모델링에서 좀 더 넓은 미래까지 내다보고 높은 확장성(유연성, 추상화)을 설계했을 수도 있다. 일주일에 한번 주기적으로 2초 이상의 슬로우 쿼리를 모두 수집하여 쿼리 튜닝을 지속적으로 하고 있을 수도 있다.
이 글을 보고 있는 독자는 이미 DBA로 현업에서 활동중이거나, DBA를 꿈꾸는 학생 혹은 개발자분일지도 모르겠다. 여러분에게 고가용성은 어떤 의미일지 이 글을 통해 한번 쯤 되짚어봤으면 좋겠다.