[혀로그래머 charsyam은 구라쟁이 #1] 샤딩은 쉬워요 샤딩하세요.

안녕하세요. 혀로그래머!!! charsyam 입니다.  민방위 훈련을 받다가, 나처럼 실력 없는 개발자는 스스로 갈궈야 한다라는 생각이 들어서, 스스로를 비판하고 까기 위한 글을 쓰기로 했습니다.

원래 제가 발표하는 주 대상이 주로 개발 경험이 많이 없는 학생, 주니어들을 대상으로 하다보니, 많은 구라를 포함하고 있습니다.(제가 발표때 마다 호구(?) 조사를 빙자해서 학력/경력을 물어보는 이유입니다.) 그 중에서 가장 대표적인 구라가 바로... 샤딩 쉬워요. 샤딩하세요 입니다.

사실 서비스가 성장해 나가다가 가장 문제가 되는 부분이 데이터의 폭발입니다. 서비스가 성장하는 데 API 서버가 문제라면 소위 Stateless 형태라면, 쉽게 확장이 가능합니다.(이런 얘기 할 때, 절대로, Stateless 하지 못한 경우는 언급하면 안됩니다. 구라가 깨집니다.) 그런데 데이터의 폭발로 인해서 DB서버가 늘어나야 한다고 하면, 뭔가 버거워 보입니다. 그래서 항상 서비스 시작 전에 이런 부분에 대해서 미리 고민하고 시작해라라고 말을 합니다.(딱, 여기까지만 얘기합니다.)

그러면서 화려하게 DB 샤딩 방법에는 Range, Module, Indexed 같은 방법이 있고, 각각의 특성이 있다고 하면서 섞어써도 된다는 말들을 화려하게 해줍니다. 이러면서 구라가 완성이 되는 거죠.

그런데..., 처음 서비스를 구축할 때 부터, 이런 부분을 고려하면 정말 좋은걸까요? 당연히 시간이 조금 더 걸립니다. 하지만, 뒤에는 좋긴 합니다. 처음부터 고려를 하고 시작한 서비스니깐요. 그리고 여기까지만 얘기하고 이제 조용히 종료를 해야죠.(구라는 언제나 진실과 함께 해야만  잘 먹혀듭니다.)

그런데, 이런 고민을 서비스를 시작할때만 할까요? 기존에 서비스를 쓰고 있던 업체들에게도 샤딩하세요 라고 얘기를 합니다.(실제로는 서비스하시는 분들은 제가 피해다닙니다. 구라가 걸릴까봐... 손목가지 날라갑니다.) 그런데 그게 그렇게 쉽게 가능할까요?

자, DB 한대, API 서버 한대로 운영중인 회사가 있다고 하겠습니다. 서비스가 성장하는게 보입니다. 이제 슬슬 DB 서버에 데이터가 꽉 찬거 처럼 보입니다. 그런데 지나가던 구라쟁이(?)가 샤딩하세요, 어렵지 않습니다. 이런 얘기를 합니다. 그걸 믿고, 이제 사장님은 개발자에게 샤딩을 하라고 시키시죠. 그거 쉽데, 이런 것들이 있고, 블라 블라 블라 하십니다.

아, 쉽겠구나 하면서, DB 로직을 살펴봅니다. 그런데... 어디서 join 문들이 보이기 시작하네요. 또 프로시저 같은것도 쓰고 있습니다. 슬슬 열불이 나기 시작합니다. 어떤 XX가 쉽다고 얘기했을까요?

잘 생각해보면 DB 서버 안에 테이블 여러개라면 join이 쉽게 가능합니다. 느리게 돌 수도 있지만, DB가 처리하는 것 만큼 효과적으로 짜기도 어렵습니다. 그런데... 샤딩을 하고 나니... 테이블이... 서로 다른 서버에 데이터를 나눠 가지고 있습니다. join 해야할 테이블도 분리되어 있습니다.

거기다가, 트랜잭션도 쓰고 있군요. 이제 부터 지옥이 펼쳐집니다. 사실 기술 세미나에서 이런 얘기를 쉽게 하지 않습니다. 사실 쉬운 방법도 없구요. 처음부터 시작하면서 이런걸 고민해도, 사실 쉽지 않을 수 있습니다. 다른 테이블 간의 트랜잭션도 없애야 하고, join도 다 로직단에서 처리를 해줘야 합니다. 처음 부터 그렇게 만들지 않았다면... 절대로 쉬운 일이 아닙니다. 이렇게 되면, 실제로 코드에 해당 실패에 대한 대응들이 다 들어가야 합니다. 일종의 보상 처리라고도 합니다만... 잘 짜도 실수의 여지는 항상 있습니다.(돈 많이 주고 오라클 쓰시는 방법도 있다고 합니다. 전 안써봐서 모릅니다.)

그럼 문제가 여기에만 있을까요? 아닙니다. 샤딩을 하면, 이제 장비가 추가되어야 할 때마다, 노력이 추가로 들어갑니다. 물론 어느정도 자동화가 가능합니다만, 꼭 모니터링이 필요한 일입니다. (이런 글을 참고하세요. http://gywn.net/2012/05/how_to_shard_big_data_in_tumblr/)

밑단의 데이터에서 뭔가 변경이 일어나는 것은 절대로 쉽지 않습니다. 다만 성장하다보면, 절대로 피해갈 수 없는 길이기도 합니다. 그리고 누가 샤딩이 쉽다라고 하면, 아 저 아재 구라쟁이구나 이렇게 보셔도 됩니다.(초천재일수도 있긴 합니다만...)

다음 편은, 캐시 멤캐시나 레디스 쓰세요. 쉬워요에 대한 구라를 파헤치도록 하겠습니다. 모두들 고운하루되세요.


Popit은 페이스북 댓글만 사용하고 있습니다. 페이스북 로그인 후 글을 보시면 댓글이 나타납니다.