해당 블로그는 KT UCloud의 지원을 받고 있습니다.
일반적으로 개발자들이 잘 아는 분야는 소프트웨어 개발입니다. 엄청나게 세분화되어 있는 세상에서, 네트웍 장비나, 서버의 특성등에 대해서 자세히 알기는 어렵습니다. 그래서 조그만 규모가 있는 회사들은 하드웨어 쪽을 관리하는 관리자들이 다 따로 있습니다. 어떤 분은 L4 스위치의 전문가이고, 어떤 분은 NAS 스토리지에 대해서 자세히 아시는 거죠. 그런데 이제 막 창업한 스타트업이나, 이미 어느 정도 시간이 지난 기업이라도, 이런 분야에 대해서 잘 아시는 분들을 다 고용하기는 어렵습니다.
그런데 사실 서비스를 운영하다보면, 실제 소프트웨어 장애도 많지만, 그것보다 하드웨어 장애를 더 많이 만나게 됩니다. 서버를 1000대 이상 운영하는 서비스를 보면, 하루에 최소 1~2대 이상 서버가 죽어나갑니다. 그런데 재미있는 것은 대부분의 어느정도 경험이 있는 개발자들은, 이렇게 서버가 장애나는 경우에 대해서 대비한 서비스 아키텍처를 설계하고 만들기 시작합니다. 그래서 서버 한 두대가 죽는 것 가지고는 실제로 서비스에 큰 문제가 일어나지 않도록 구성하는 것이지요.
일반적으로, 여기까지가 우리 개발자들의 생각의 범위입니다. 서버가 죽는 것은 개발자가 생각하는 스케일러블한 아키텍처 상의 고려 사항에 들어가는 거죠.(워낙 자주 경험하니까요.) 그런데 대부분 전체 서버가 한꺼번에 장애 나는 것에 대해서는 고려하지 않습니다. 어차피 그런일은 거의 발생하지도 않고, 비용대비 효과가 미비할 가능성이 큽니다. 특히 이제 서비스를 시작하는 스타트업이라면 비용대비 효과에 대한 고민이 더더욱 필요합니다.
그런데, 아주 쉽게, 이렇게 전체 서버가 죽는 경우를 경험하는 케이스가 생길 수 있습니다. 그게 바로 개발자들은 잘 신경쓰지 않는 네트웍 장비쪽의 장애입니다. 즉 라우터나, 메인 스위치가 고장이 나면, 거기에 연결된 모든 서버가 장애가 나게 됩니다. 그런데 서버쪽 경험이 없는 분들은 서버 코드는 짜더라도 이런 부분에 대해서는 쉽게 알지 못하시는 경우가 많습니다. 저도 그랬습니다. 쿨럭…
다시 처음으로 돌아가서 일반적으로 우리가 구성하는 초기 서비스는 다음과 같은 물리적 구성을 가질 것입니다.
일반적으로 개발자가 고민하는 범위는 서버의 장애 입니다. 보통 Switch 나 Route 따위는 신경쓰지 않습니다. 쿨럭, 그리고 서버 한대가 죽더라도 다른 서버가 FailOver 할 수 있도록 하는 것이 일반적입니다. 이제 막 시작하는 업체라면 이런 구성도 안할수도 있을 듯 하네요.
그런데 만약 Route나 Switch가 장애가 나면 어떻게 될까요? 서버는 잘 돌아가는데, 전혀 다른 서버들과 연결이 안되는 이슈가 벌어지거나, 서버에는 전혀 리퀘스트가 안오는데, 접속이 안된다는 글들만 트위터나 페북에 바글바글 할껍니다.(이 정도면 이미 성공한 건가요?)
그러면 어떻게 물리적으로 구성해야 안전할까요? 서버랑 마찬가지 입니다. Route 랑 Switch를 두 개 이상으로 늘리고, 교차 연결이 되도록 설정해 두면 됩니다. 물론 서버에도 랜 카드 하나씩 더 설치해서 처리해주면 됩니다.(랜카드를 추가하면, 랜카드 장애시에도 유용합니다.) 즉 다음과 같은 구성이 됩니다.
이런 구조로 구성을 해두면, Route나 Switch 에서 장애가 나더라도 서비스는 문제가 없습니다.
서버 호스팅을 이용해서 서비스를 하게 되면, 어찌되었든 하드웨어 장애와 부딪치게 되어있습니다. 클라우드, 클라우드를 외치는 이유중에 이런 부분에서 살짝 벗어날 수 있다라는 장점도 있긴 합니다. 하지만 일단 클라우드 보다 비용을 보면(인건비 제외 -_-) 서버 호스팅이 더 싸기 때문에 이렇게 시작하시는 분들도 많을 것이라고 생각합니다. 이런 부분에 대해서 알고 지나가시면 좋을듯 합니다.
* 혹시나 스타트업을 운영하시는 분들중에 자신의 소프트웨어 스택을 공개하고 싶은신 분은 저에게 연락 주시면 감사하겠습니다. charsyam@naver.com 이나 @charsyam 으로 멘션 주시면 됩니다. 감사합니다.