일반적으로 단일 서버로 운영하거나 아니면 데이터베이스 서버를 분리하여 사용하는 경우가 많습니다. 그렇다면 이 둘의 차이점은 무엇이고 언제 그리고 왜 이렇게 사용하는지 알아보려고 하니다.



# 서버 구축시 단일 서버와 데이터베이스 서버 분리 방법의 차이는?
일반적으로 단일 서버를 사용하는 경우... 즉 WAS 서버와 Database서버를 하나의 머신에 사용할 경우 여러가지 이유에서 사용하지 않을 것을 권장합니다. 그리고 분리하면 더 많은 동시 접속이 가능하다고 알려져 있습니다. 그렇다면 무조건 분리하는 것이 나은 선택일까요? 아니면 두 방식의 장단점이 있을까요?


먼저 이 둘의 차이점(단일 서버에서 데이터베이스 서버를 분리한 경우)은 물리적으로 아래와 같습니다.

@ 단일 서버 구성
웹 클라이언트 => 연결 <=  웹서버 WAS + 데이터베이스 서버

@ WAS와 데이터베이스 서버를 분리 구성
웹 클라이언트 => 연결 <= 웹서버 WAS => 연결 <= 데이터베이스 서버

아래는 언제 분리하여 사용하는 것이 좋을지 알아봅니다.


! WAS와 데이터베이스 서버 분리는 언제 필요한가?
DB서버를 분리하는 가장 큰 이유는 WAS(Web Application Server)에서 처리할 부분이 DB서버에 비해 상대적으로 많은 경우 분리하여 사용하게됩니다. 즉 데이터베이스와 달리 이미지나 영상 등 정적 리소스를 많이 요구하는 웹사이트를 생각해볼 수 있습니다. 예를들어 쇼핑몰 등에서 사진 및 영상이 많을 수 있으므로 상대적으로 데이터베이스의 사양보다는 WAS 쪽 사양을 높이는 방법이 필요하겠습니다.

하지만 동일 서버로 구현된 경우 WAS의 성능만 높이기 어려우므로 당연히 데이터베이스 서버를 함께 올릴 수 밖에 없습니다. 이런 이유로 가격과 성능을 고려할 경우 비효율적인 측면이 증가하게 되겠죠.

또한 메모리에 대한 의존도만 생각해봐도 WAS보다는 데이터베이스가 월등히 높습니다. WAS와 달리 Database는 다른 하드웨어보다 메모리에 영향을 많이 받습니다. 즉 성능을 높이기 위한 기술적 방법이 각기 다르게 적용되야 하는데 하나의 단일 서버 구현은 한계가 있으므로 분리하는 방법이 필요한 것입니다.

종합해 말하면 하나의 웹서버가 견딜 수 있는 능력치가 정해져 있으므로 좀 더 효과적으로 운영하기 위해서는 WAS와 데이터베이스를 분리하여 운영하면 구현 수준에 따라 Max에 가까운 성능을 발휘할 수 있는 것입니다.


! 데이터베이스 서버 분리시 장점은?

DB 서버 분리의 가장 큰 장점은 무엇일까요?

1. 확장성
성능을 높이기 위한 확장성입니다. 앞서 말한 것처럼  단일 머신의 스펙을 높이기 위해 병렬 구조의 Scale out 방식의 서버 증설이 필요한 경우 DB 서버 분리는 반드시 필요한 과정 중 하나입니다. 이렇게 해야 자원을 WAS 서버와 공유하지 않고 독점적으로 사용하므로 더 높은 성능을 기대할 수 있습니다.

2. 보안성
더 높은 보안을 위해서 나누는 것이 좋습니다. 만약 WAS 서버에 해킹이 발생한 경우 예를들어 봅니다. 해킹에 의해 루트 권한 모두가 넘어갈 수도 있고 이 경우 데이터에 심각한 문제가 발생할 수 있습니다. 하지만 별도로 데이터베이스 서버로 분리하여 제한적인 권한을 부여한 경우 심각한 문제로부터 상당 부분 보호할 수 있게됩니다.

3. 기타 백업 등등
형상 관리 툴을 사용하는 경우 당연히 소스 등은 히스토리와 백업에 안전할 수 있습니다. 하지만 데이터베이스의 경우 별도의 백업하고 주기적으로 백업을 수행할 경우 그 크기도 작지 않으므로 분리했을 때 백업 방법의 선택의 폭이 넓다 하겠습니다.

최근에는 대용량 트래픽 부하를 막기 위해 로드 밸런싱(Load Balancing)의 방법이 필요합니다. 중간에 로드밸런서를 두고 여러개의 웹서버를 분산하여 사용하려면 WAS와 데이터베이스 서버를 각각 다르게 운영해야 합니다. 그래야 WAS와 Database의 Scale Out을 각각 다르게 설정 사용할 수 있습니다.


! WAS와 데이터베이스 서버 분리시 주의할 점
만약 기존에 사용하던 단일 서버 방식을 분리 방식으로 변경할 경우 주의할 점은 무엇일까요?


하나. 동일한 리전을 사용할 것
단일 서버의 장점이기도 한데 동일 사양의 머신인 경우 하나의 머신을 사용하는 것이 분리 방법보다 더 빠릅니다. 그 크기는 WAS와 데이터베이스의 네트워크 통신 부하에 따라 결정됩니다. 특히 WAS에서 데이터베이스 서버의 리전을 잘 못 설정할 수도 있습니다. 이런 경우를 방지하려면 ping을 사용하여 지연시간을 측정하는 것도 방법입니다.



# 마치면서
WAS가 멈추면 정상적인 WAS만 사용하여 데이터베이스 서버에 연결해 정상적인 서비스 구현이 가능해야합니다. 하지만 단일 서버에서는 이런 문제를 근본적으로 해결하기 어렵습니다. 또한 git 등 배포를 하거나 사용중인 툴, 어플리케이션의 업데이트, 설치 시 웹서버 재시작시 반드시 필요한 경우가 발생할 수 있죠. 즉 DB에 의존성이 발생할 수 있으므로 이런 문제를 제거할 필요가 있습니다.


소프트웨어를 사용한 WAS와 데이터베이스 분리 방법
컴퓨터 자원을 하나의 머신에서 분리하기 위해서 반드시 하드웨어 분리만 사용하는 것은 아닙니다. 잘 알려진 도커(Docker)를 사용할 수도 있고 가상화 서버를 사용하는 것도 가능합니다. 다만 보안성을 위해서라면 다른 머신으로 구분하는 것이 좋을 것입니다.