서버를 여러 대 사용한다고 해도, 그중 한 대는 언제든 고장 날 수 있다.
예를 들어:
- 전원이 꺼지거나
- CPU나 RAM에 문제가 생기거나
- 프로그램이 멈추거나
- 업데이트 중에 재부팅될 수도 있다
그렇다면 서버가 3대 있을 때, 그중 한 대가 갑자기 멈추면 어떻게 될까?
만약 아무런 준비가 없다면, 사람들은 계속 고장 난 서버로 접속하게 된다. 그러면 웹사이트가 안 열리거나, 오류 화면이 뜰 수 있다.
하지만 실제 서비스는 보통 그렇게 되지 않는다. 왜냐하면 앞에 있는 로드밸런서가 자동으로 고장 난 서버를 빼주기 때문이다.

로드밸런서는 서버가 살아 있는지 계속 확인한다
로드밸런서는 단순히 사람을 나눠주는 역할만 하는 것이 아니다. 뒤에 있는 서버들이 제대로 작동하는지도 계속 확인한다.
이것을 헬스 체크(Health Check)라고 부른다.
로드밸런서는 몇 초마다 서버에 이렇게 물어본다.
- “아직 켜져 있니?”
- “웹사이트가 정상적으로 열리니?”
- “응답 속도가 너무 느리지는 않니?”
예를 들어 서버 A, B, C가 있을 때:
- 서버 A → 정상
- 서버 B → 갑자기 응답 없음
- 서버 C → 정상
이라면, 로드밸런서는 서버 B를 고장 난 것으로 판단한다.
고장 난 서버는 자동으로 목록에서 빠진다
로드밸런서는 서버 B가 고장 났다는 것을 알게 되면, 더 이상 사람을 서버 B로 보내지 않는다.
대신:
- 기존에 서버 B로 가던 사람도
- 새로 접속하는 사람도
모두 서버 A와 C로 보내준다.
그래서 서버 한 대가 갑자기 멈추더라도, 사이트 전체가 완전히 꺼지지는 않는다.
예를 들어 쇼핑몰 서버 3대 중 한 대가 꺼졌더라도, 사용자는 그냥 조금 느려졌다고 느낄 뿐, 대부분은 사이트가 계속 열린다.
나도 처음에는 “서버 한 대가 고장 나면 사이트도 바로 끝나는 거 아닌가?”라고 생각했다. 그런데 실제 구조를 보니, 큰 서비스는 아예 처음부터 “한 대쯤은 고장 날 수 있다”는 전제로 만들어져 있었다.
이런 구조를 장애 대응 또는 Failover라고 부른다
서버 한 대가 멈췄을 때, 다른 서버가 대신 일을 이어받는 구조를 보통 장애 대응(Failover)이라고 부른다.
쉽게 말하면:
- 원래 일하던 서버가 멈추면
- 다른 서버가 대신 일한다
는 뜻이다.
예를 들어 은행 앱이나 게임 서버처럼 절대 멈추면 안 되는 서비스는 이런 장애 대응 구조를 꼭 사용한다.
그래서 실제로는 서버가 고장 나더라도, 사용자들은 거의 눈치채지 못하는 경우가 많다.
하지만 서버가 너무 적으면 결국 느려질 수 있다
문제는 남은 서버가 너무 적으면, 결국 그 서버들에게 사람이 몰린다는 점이다.
예를 들어 원래 서버 3대가 100명씩 나눠서 처리하고 있었는데, 한 대가 고장 나면 남은 2대가 150명씩 처리해야 한다.
그래서:
- 사이트가 조금 느려지거나
- 응답이 늦어질 수 있다
하지만 그래도 아예 사이트가 멈추는 것보다는 훨씬 낫다.
그래서 큰 서비스는 처음부터 여유 있게 서버를 더 많이 준비해두는 경우가 많다.
로드밸런서도 고장 날 수 있지 않을까
맞다.
로드밸런서도 결국 하나의 컴퓨터나 프로그램이기 때문에, 로드밸런서 자체도 고장 날 수 있다.
만약 로드밸런서가 하나뿐인데 그게 멈추면, 뒤에 서버가 아무리 많아도 사람들이 접속할 수 없다.
그래서 큰 서비스는 로드밸런서도 보통 2개 이상 둔다.
예를 들어:
- 로드밸런서 1번
- 로드밸런서 2번
을 같이 두고, 하나가 고장 나면 다른 하나가 대신 작동하게 만든다.
즉, 큰 서비스는 서버뿐 아니라 로드밸런서까지 “고장 나도 괜찮게” 만들어둔다.
집에서 만드는 서버에도 이런 기능이 필요할까
대부분은 아니다.
집에서 노트북 한 대로 Ubuntu 서버를 연습하거나, 작은 웹사이트를 만드는 정도라면 서버가 잠깐 꺼져도 큰 문제가 되지 않는다.
하지만:
- 친구들과 함께 쓰는 서버를 만들거나
- 게임 서버를 운영하거나
- 서버를 두 대 이상으로 늘리게 되면
그때는 간단한 장애 대응 구조를 연습해볼 수 있다.
예를 들어 집에 있는 컴퓨터 두 대를 준비하고, Nginx로 로드밸런서를 만든 뒤 한 대를 일부러 꺼보면 된다.
그러면 로드밸런서가 자동으로 남은 서버만 사용하게 되는 것을 직접 볼 수 있다.
실제로 한 번 해보면 “왜 서버를 여러 대 쓰는지”를 훨씬 쉽게 이해하게 된다.
Nginx에서는 어떻게 설정할까
Nginx에서는 서버를 여러 대 적어두면, 응답하지 않는 서버는 자동으로 잠시 빼주는 기능이 있다.
upstream myserver {
server 192.168.0.10 max_fails=3 fail_timeout=30s;
server 192.168.0.11 max_fails=3 fail_timeout=30s;
}
이 설정은:
- 3번 연속 실패하면
- 30초 동안 그 서버를 사용하지 않는다
는 뜻이다.
그래서 서버 한 대가 고장 나더라도, 자동으로 다른 서버로 접속을 돌릴 수 있다.
한 줄로 정리하면
로드밸런서는 서버가 고장 났는지 계속 확인하고, 문제가 생긴 서버는 자동으로 빼준다. 그래서 서버 한 대가 멈추더라도, 다른 서버가 대신 일을 하면서 서비스가 계속 유지된다.