언제 웹서버와 DB서버를 분리해야 하는가?
2017.03.15 23:25
언제 웹서버와 DB서버를 분리해야 하는가?
보통 서비스를 처음 세팅할 때 웹서버와 디비서버를 같은공간에 설치하곤 한다.
서버의 능력치를 1이라고 가정하자.
초기 서비스 운영시에는 웹 0.1, 디비 0.1 의 능력이 필요하기 때문에 한 서버 공간을 사용해도 서비스 운영에 지장이 없다. 최상의 성능을 발휘할 수 있는 것이다.
하지만 서비스의 사용자가 늘어나게 되면 이야기가 달라진다.
서비스의 부하량이 증가해서 예를들어 웹 0.7, 디비 0.7 의 능력을 사용하는 상황이 된다면, 서버의 능력치인 1이 넘어갔기 때문에(0.7 + 0.7 = 1.4) 과로(over work)를 하게 된다.
<그림 : uptime 명령어로 현재 서버의 총 CPU부하량을 볼 수 있다>
#cat /proc/cpuinfo | grep CPU | wc -l
이 명령어를 통해 CPU 부하량 제한을 알 수 있다. (정확히 말하자면 CPU코어 수를 알 수 있다.)
위의 스크린샷을 찍은 서버의 경우, 2코어 서버라서 CPU부하량이 2 까지는 정상동작됨을 알 수 있다.
현재 [1분간 CPU 평균 부하량]이 0.30 이기 때문에 서버는 아주 여유로운 상태이다.
따라서 이 상태라면 굳이 웹과 디비를 나눌 필요가 없는 것이다.
웹서버와 디비서버를 분리하게 되면 어떤 효과가 있을까?
당연히 서버 부하량이 분산된다.
다만 분리를 하게 되면 웹서버와 디비서버가 추가적으로 네트워크 통신을 해야하기 때문에 인증시간 및 네트워크 지연(Network Latency)시간이 발생한다.
네트워크 지연시간은 물리적 거리에 영향을 받기 때문에,
매우 많은 네트워크 지연시간을 발생시키는 - 웹서버는 한국에, 디비서버는 일본에 분리하는 등의 행위는 하지 말아야 할 것이다.
요즘 스타트업 회사의 서버나, 상용 신규 서비스 서버들을 보면 투자를 잘 받았거나 예산이 많아서 그런지 몰라도, 처음부터 너무 고스펙으로 작업하는 경향이 있던데, 이런 경우는 웹과 디비를 나눌 필요가 없다.
다음의 경우에는 서버의 부하량과 관계 없이, 처음부터 웹서버와 디비서버를 나누어야 합니다.
- 부하분산 환경을 구축하고자 할 때 : 웹서버와 디비서버를 나누지 않고서는 부하분산 환경을 만들 수 없습니다.
- 장애대응 서버 : 서버 자동 복제(Auto Scaling)이나, 장애 극복(Fail Over) 등의 환경을 구축하려면 먼저 각 서버들의 역할이 명확히 구분이 되어 있어야 한다.
대부분의 경우 웹서버와 디비서버를 분리하지 않는 것이 더 쉽고, 더 싸고, 더 빠르다.
만약 분리해야할 필요성이 생겼다면 스스로 환경을 구축하려 하지 말고 “클라우드 호스팅 인프라”를 이용하도록 하자. 물리 서버를 이용 중이라면 먼저 클라우드 서버로 이전하는 작업이 선행되어야 할 것이다.
월 운영예산에 맞추어서 구축하도록 하자.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.