[서버] Scale - up 과 Scale - out 그리고 로드 밸런서란?

최동근·2023년 2월 21일
1

서버

목록 보기
4/5
post-custom-banner

안녕하세요 오늘은 효율적인 서버 구축 에 있어 핵심적인 개념들을 배워보겠습니다 👨‍💻

백엔드 개발자인 길동이는 서비스를 제작하고, 성공적으로 배포까지 마쳤습니다.
운 좋게도 서비스는 입소문을 타 점점 많은 유저가 유입되기 시작했고, 수많은 유저가 동시에 접속하는 서비스가 되었습니다.

그러나 길동이는 기쁘지 않았습니다. 왜냐하면 갑작스러운 유저의 증가로 기존에 사용하던 서버가 한계에 도달했기 때문입니다. 
따라서 길동이는 `서버 인프라`를 확장해야 할 필요성을 느끼게 되었습니다.

서버 인프라 를 확장하는 데에는 다양한 방법이 존재합니다. 이번 포스팅에서는 서버 인프라 확장 방법에 대해 알아보겠습니다 💪

💻 스케일 업(Scale-Up)

스케일 업(Scale-up) 은 쉽게 말하면 기존의 서버를 보다 높은 사양으로 업그레이드 하는 것을 말합니다.
하드웨어적으로 서버에 디스크를 추가하거나 CPU나 RAM 을 업그레이드하는 것을 말합니다.
또한 소프트웨어적인 예시로 AWS 의 EC2 인스턴스 사양을 높이는 것을 말합니다.

이처럼 하나의 서버 의 능력을 증강하기 때문에 수직 스케일링(Vertical Scaling) 이라고 합니다 👨‍💻

💻 스케일 아웃(Scale - Out)

스케일 아웃(Scale-Out) 은 장비를 추가해서 확장하는 방식을 말합니다.

기존 서버만으로 용량이나 성능의 한계에 도달했을 때, 비슷한 사양의 서버를 추가로 연결해 처리할 수 있는 데이터 용량이 증가할 뿐만 아니라 기존 서버의 부하를 분담해 성능 향상의 효과를 기대할 수 있습니다 👨‍💻

서버를 추가로 확장하기 때문에 수평 스케일링(Horizontal Scaling) 이라고 합니다.

💻 스케일 업과 스케일 아웃의 장단점

스케일 업

스케일 업 아키텍터는 기존의 서버 한대의 성능을 향상시키는 방법이기 때문에 다른 서버와의 네트워크 연결 없이 용량을 증강할 수 있습니다 👍

다만 서버 한대의 성능을 향상시키는 것이기에 성능 향상에 한계가 존재하며, 성능 향상 대비 비용 부담이 큽니다.
또한 만약 예상할 수 없었던 자연재해나 사고로 서버 한대에 문제가 생기면 어떤 기능도 할 수 없기에 큰 타격을 입게 됩니다.

또한 만약 기존의 서버를 교체함으로써 성능을 올릴 때에는 서비스를 이용하지 못하므로 다운 타임 이 불가피합니다.

스케일 아웃

스케일 아웃 아키텍처는 확장성 측면에서 큰 강점을 가집니다.

스케일 업 시스템을 구축한 상황에서 향후 확장 가능성을 고려해 서버를 현재 필요한 만큼보다 더 많은 용량이나 성능을 확보해놓는 경우가 많습니다.
그러나 예상과는 다르게 유저 사용의 감소 및 여러가지 악재로 인해 확장의 필요가 없어졌을 경우 추가로 확보해놓은 서버는 손해가 될 수 있습니다 😢

그러나 스케일 아웃 방식으로 시스템을 구축한 상황에서는 서버를 필요한 만큼만 도입해 놓고, 장기적인 용량 증가 추이를 예측할 필요 없이 그때 그때 마다 필요한 서버를 추가해 예상치 못한 손해를 막을 수 있습니다 💪

이렇게 보았을때 스케일 아웃 이 스케일 업보다 훨씬 뛰어난 것처럼 보입니다 ❗️
하지만 스케일 아웃 아키텍처에도 단점이 존재합니다.

스케일 아웃 방식으로 서버를 구축 및 확장하는 경우 여러 서버를 연결해야 함으로 스케일 업 방식에 비해 높은 이해도를 요구합니다.
또한 서버가 늘어날수록 관리 및 보수에도 많은 수고와 노력이 필요가되어집니다.
또한 뒤에서 알아볼 로드 밸런서(Load Balancer) 가 필요하며, 노드를 확장할수록 문제 발생의 잠재 원인 또한 추가한 만큼 증가할 수 밖에 없습니다.

💻 로드 밸런서

길동이는 고민 끝에 스케일 아웃 방식으로 서버를 확장하기로 결심했습니다.
하지만 그 사이 유저의 수가 급격하게 늘어 1000만명의 유저가 길동이의 서비스를 이용하게 되었습니다 👨‍💻
길동이는 또 다시 고민을 합니다 "아무리 성능이 뛰어난 서버라고 해도 1000만명의 유저를 가지는 서비스의 트래픽을 견디긴 힘들꺼야.."

이렇게 고민하던 길동이를 지나가던 길동이의 선배 개발자 현우는 한가지 해결방법을 길동이에게 알려줍니다.
"길동아 수많은 트래픽을 서버에게 효과적으로 분산하는 로드 밸런서를 사용해봐 ❗️"

현우 의 조언 에서 언급된 로드 밸런서 란 무엇일까요?

해당 이미지는 로드 밸런서 의 기능을 도식화한것입니다.

로드 밸런서 는 서버에 가해지는 부하를 분산해주는 장치 또는 기술을 통칭합니다.
클라이언트와 서버풀(Server Pool) 사이에 위치하며 , 한 대의 서버로 부하가 집중되지 않도록 트래픽을 균등하게 분산해주어 각각의 서버가 최적의 퍼포먼스를 보일 수 있도록 합니다.

즉 아무리 스케일 아웃 방식으로 서버가 설계되었다고 하더라도 하나의 서버에게만 부하가 집중되면 효율적이지 못한 서버 설계이기 때문에 서비스에 큰 타격을 줄 수 있습니다 🥲
이를 해결하기 위해 로드 밸런서 를 사용합니다.

💻 다양한 로드밸런싱 알고리즘

  • 라운드로빈 방식(Round Robin Method)
    서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식입니다.
    보통 서버 풀에 존재하는 여러 대의 서버가 비슷한 스펙을 갖고 있고, 서버와의 연결이 오래 지속되지 않는 경우 활용합니다.

  • 가중 라운드로빈 방식(Weighted Round Robin Method)
    각각의 서버마다 가중치를 매기고 가중치가 높은 서버에 클라이언트 요청을 우선적으로 배분합니다.
    주로 서버의 트래픽 처리 능력이 상이한 경우 사용되는 부하 분산 방식입니다.

  • IP 해시 방식(IP Hash Method)
    클라이언트의 IP 주소를 특정 서버로 매핑하여 요청을 처리하는 방식입니다.
    사용자의 IP 를 해싱해 로드를 분배하기에 사용자는 항상 동일한 서버로 연결되는 것을 보장합니다.

  • 최소 연결 방식(Least Connection Method)
    요청이 들어온 시점에 가장 적은 연결 상태를 보이는 서버에 우선적으로 트래픽을 배분합니다.
    자주 연결이 길어지거나, 서버에 분배된 트래픽들이 일정하지 않는 경우에 적합한 방식입니다.

  • 최소 리스폰타임(Least Response Time Method)
    서버의 현재 연결 상태와 응답시간을 모두 고려하여 트래픽을 배분합니다.
    가장 적은 연결 상태와 가장 짧은 응답시간을 보이는 서버에 우선적으로 로드를 배분하는 방식입니다.


    참고

    Scale-up과 Scale-out에 대해 알아보자!
    스케일 업(Scale-up)과 스케일 아웃(Scale-out)
    로드밸런서의 개념과 특징

profile
비즈니스가치를추구하는개발자
post-custom-banner

0개의 댓글