인기 많은 서비스는 사용자가 한꺼번에 몰려도 잘 버텨야겠죠? 그 비결이 되는 네트워크 구조랑 로드밸런싱을 오늘 편하게 풀어볼게요.
3티어 구조 — 가장 기본이 되는 뼈대
서비스를 만들 때 가장 기본이 되는 구조가 **3티어(3-tier)**예요.
Frontend — Backend — DB
WEB — WAS — DB
- WEB 서버: 정적 리소스를 가지고 있는 서버
- WAS(Web Application Server): 실제 로직을 처리하는 서버
- DB: 데이터가 저장되는 곳
정적 리소스가 뭐냐면요
정적 리소스는 변하지 않는 리소스를 말해요. HTML, JavaScript, CSS, 이미지나 영상 같은 것들이 여기 해당돼요. WEB 서버에서 이런 정적 리소스를 내려받아 화면에 표시하는 과정을 우리는 렌더링이라고 부르죠.
Load Balancer — 부하를 나눠주는 교통정리 담당
**Load Balancer(부하 분배기)**는 말 그대로 **Workload(부하)**를 여러 서버에 나눠주는 역할을 해요. 하드웨어로도, 소프트웨어로도 구현할 수 있어요.
소프트웨어 Load Balancer
WEB 서버를 통해서 WAS 서버들을 연결할 때 주로 사용돼요. 대표적인 웹서버 소프트웨어인 Nginx의 대표 기능 중 하나가 바로 이 로드밸런싱이에요.
하드웨어 Load Balancer 종류
- L2, L4: 각각 2대, 4대를 대상으로 로드밸런싱하는 용도예요.
- L7: OSI 7레이어를 다루는 하드웨어 LB인데, 특이하게 프로그래밍까지 가능해요.
LB 분배 방식 3가지
- Random 방식: 말 그대로 랜덤하게 분배해요.
- Round Robin 방식: 처음부터 순서대로 돌아가면서 부하를 나눠 받아요.
- Least Connection 방식: 클라이언트 IP를 기반으로 분배해요. 동일한 IP는 항상 동일한 서버로 연결돼요.
참고로 아키텍트는 이런 시스템 구조에 "선을 긋는 사람"이라고 표현할 수 있어요. 어떤 서버가 어떤 서버랑 연결될지, 어떻게 나눌지 설계하는 사람인 거죠.
Fail Over — 서버 한 대가 죽어도 문제없게
Fail Over는 서버 한 대가 죽었을 때, 살아있는 다른 서버로 요청을 넘겨주는 걸 말해요. 로드밸런서가 있으면 이런 장애 대응도 훨씬 매끄러워져요.
DMZ — 외부에 노출된 구역
DMZ는 외부에 노출되어 있는 네트워크 영역이에요. 외부에서 오는 요청을 직접 받는 곳이라고 보면 돼요. 내부 시스템을 안전하게 보호하기 위해, 외부와 맞닿는 부분만 따로 구역을 나눠놓는 개념이에요.
DNS — 주소와 IP를 이어주는 통역사
**DNS(Domain Name Server)**는 우리가 입력하는 주소(도메인)를 IP로, 반대로 IP를 주소로 변환해주는 서버예요. 이 DNS가 있어야 우리가 www.example.com 같은 걸 입력했을 때 실제 서버를 찾아갈 수 있어요.
CDN — 전 세계에 흩어진 배달원들
**CDN(Contents Delivery Network)**은 전 세계 곳곳에 흩어진 서버들이 정적 리소스를 대신 전송해주는 서비스예요. 사용자랑 가장 가까운 서버에서 콘텐츠를 받아올 수 있으니까 훨씬 빠르죠. 대표적인 서비스 회사로 Akamai 같은 곳이 있어요.
정리해볼게요
서비스 하나가 안정적으로 돌아가려면, 그냥 서버 한 대만 잘 만든다고 되는 게 아니에요.
- **3티어(WEB-WAS-DB)**로 역할을 나누고
- Load Balancer로 트래픽을 여러 서버에 골고루 분산시키고
- Fail Over로 서버 하나가 죽어도 문제없게 대비하고
- DNS로 주소랑 IP를 이어주고
- CDN으로 전 세계 어디서든 빠르게 콘텐츠를 받을 수 있게 하기
이런 요소들이 다 같이 맞물려 돌아가야 트래픽이 몰려도 끄떡없는 서비스가 완성돼요.