우리나라 대표적인 어플인 배달의 민족이나 카카오톡 등 많은 사용자를 어떻게 다 받아낼 수 있을까?

현재 내가 만들고 있는 프로젝트가 성공해서, 내가 만들었던 프로젝트를 이용하는 사람들이 많아져서 현재 사용중 인 서버로 많은 사용자들을 감당하지 못하는 경우가 생기면 어떻게 될까?

그런 생각으로 찾아본 두가지 방법에 대해 이야기하려고 합니다.

Scale up(스케일 업) = 수직 스케일

현재 사용중인 서버 자체의 성능을 증가시키는 방법을 말합니다.

즉, 서버에 CPU나 RAM등을 추가하거나 고성능의 부품으로 서버를 교환하는 방법을 통해 서버의 성능을 증가시키는 방법입니다.

이 방법은 어떤 점에서 좋고 어떤 점이 좋지 않을까요?

장점
구축 설계가 쉬운 편입니다.
(하드웨어를 추가하거나 교체하는 작업이기 때문에 어렵지 않습니다)
서버가 하나이기 때문에 서버가 여러 개 있을 때 생기는 데이터 일관성이 깨지는 문제가 발생하지 않습니다.
컨트롤러나 네트워크 비용이 별도로 발생하지 않습니다.

단점
서버 한 대에 모든 부하가 집중되어서 장애 시 영향을 크게 받을 수 있습니다.
성능 확장에 한계가 있습니다. (하드웨어 장비의 허용범위 내에서만 사용할 수 있기 때문입니다.)
하드웨어 장비를 업그레이드해야 해서 비용이 많이 듭니다.
이런 점이 있는 데, 그러면 어떤 경우에 scale up을 사용하는 것이 적절할까요?

빈번히 데이터의 갱신이 발생하는 경우( 정합성이 어려운 경우)
OLTP(온라인 트랜잭션 처리)
데이터베이스 서버

이런 경우에 scale up을 사용합니다

그렇다면, scale out은 무엇일까요?

Scale out(스케일 아웃) = 수평 스케일

비슷한 사양의 서버를 여러 대 추가하여 서버를 확장하는 방식을 말합니다.

서버가 한 대에서 여러 대가 되기 때문에 각 서버에 걸리는 부하를 균등하게 해주는 '로드밸런싱'이 동반되어야 합니다.
(단일 서버에 작업이 쌓여 멈춰 있는 병목현상을 줄일 수 있습니다)

장점
하나의 서버가 장애로 인해 다운되어도 다른 서버로 서비스를 제공할 수 있습니다. 즉, 장애 가능성이 적어진다는 것입니다.
지속적인 확장이 가능합니다.
비용이 상대적으로 저렴합니다.

단점
관리할 서버가 늘어나서 추가적인 소프트웨어 라이선스 비용이 듭니다.
설계가 힘듭니다.
모든 서버에서 데이터 일관성을 유지할 수 있게 해야 합니다.
로드밸런서가 필요합니다.

이런 점들이 있는 Scale out은 언제 사용하는 게 좋을까요?

모든 서버가 동일한 데이터를 가지고 있어야 해서 데이터 변화가 적은 웹서버




두 가지 방법의 장단점을 고려해서 자신에게 맞는 방법을 선택해서 서버를 확장시켜야 합니다. 내가 현재 만들고 있는 서비스의 특징을 생각해서 장단점을 비교해서 방법을 정했습니다. 많은 사람들이 나의 서비스를 이용한다고 했을 때, 생길 수 있는 문제를 정해 장단점을 비교했습니다.

첫 번째, 장애 가능성이 더 적은 방법은 무엇인가?

Scale up은 하나의 서버에서 부품을 교체하고 추가해서 서버를 늘리는 방법이고 Scale out은 여러 대의 서버를 두는 방법입니다.

이 경우에, 한 서버가 다운될 경우 Scale up은 대신할 서버가 없지만 Scale out은 대신할 수 있는 서버가 존재합니다. 그리고 서버에 가해지는 부하를 잘 분산시켜준다면 서버가 다운되는 일은 적어질 것입니다.

그래서 상대적으로 장애 가능성이 적은 방법은 Scale out입니다.

두 번째, 서비스가 성공해서 많은 사람들이 사용했을 때, 서버 확장의 한계는 없을까?

Scale up은 하드웨어의 허용범위 내에서 서버를 확장할 수 있다. 더 좋은 부품이 없다면 확장이 불가능합니다.

반면에 Scale out은 서버를 여러 대 두는 방법으로 확장이 계속 가능합니다.

이런 장단점을 비교해서 나는 내 프로젝트에 Scale out을 선택했습니다.

하지만 Scale out을 선택하면 생길 수 있는 문제를 해결해야 하는데, 그 문제를 해결하는 방법에 대한 내용은 다음 포스트에 정리할 예정입니다.

출처: https://suyeon97.tistory.com/4 [차근차근]

profile
백엔드 개발자 (ง •̀ω•́)ง✧

0개의 댓글