스케일 아웃

서버의 수를 늘려 부하를 여러 서버에 분산시키는 수평 확장 방식입니다.

동작 방식

스케일 아웃 (Scale Out) = 수평 확장

Before
[서버1 (한계치 도달)]

After
          [로드밸런서]
         /     |      \
    [서버1] [서버2] [서버3]  ← 부하 분산

로드밸런서와 함께 사용

클라이언트 요청
      ↓
[로드밸런서] ← 트래픽 분배
  /   |   \
[s1] [s2] [s3]

분배 방식
- Round Robin  : 순서대로 번갈아 배분
- Least Connection : 연결 수 가장 적은 서버로
- IP Hash      : 같은 IP는 항상 같은 서버로

스케일 아웃의 핵심 문제

1. 세션 불일치

사용자가 서버1에 로그인
      ↓
다음 요청이 서버2로 라우팅
      ↓
서버2는 로그인 정보 없음 X

해결책: 세션을 Redis에 중앙 저장
[서버1]  [서버2]  [서버3]
   \        |       /
      [Redis]  ← 세션 공유 O
// Spring - Redis 세션 공유
@EnableRedisHttpSession
public class SessionConfig { }

// application.yml
spring:
  session:
    store-type: redis

2. 데이터 동기화

서버1에서 파일 업로드
      ↓
서버2에서 해당 파일 조회 불가 X

해결책: 파일을 S3 등 외부 스토리지에 저장
[서버1]  [서버2]  [서버3]
   \        |       /
      [S3]  ← 파일 공유 O

3. 코드 배포

서버가 늘어날수록 배포 복잡도 증가

해결책: CI/CD + 컨테이너(Docker + k8s)
→ 여러 서버에 동시 배포 자동화

스케일 업 vs 스케일 아웃

항목스케일 업스케일 아웃
방법서버 사양 업그레이드서버 대수 증가
비용고사양일수록 급증상대적으로 저렴
한계물리적 한계 존재거의 무한 확장
구현 난이도낮음높음
다운타임교체 시 발생없음
장애 대응단일 장애점일부 서버 장애 무관

스케일 아웃에 유리한 기술

O Stateless 설계 (REST API)
   → 서버가 상태를 갖지 않아 어느 서버로 가도 동일 처리

O NoSQL (MongoDB, Redis, Cassandra)
   → 분산 저장 설계에 최적화

O 마이크로서비스 (MSA)
   → 서비스별로 독립적인 스케일 아웃 가능

X RDB
   → 분산 환경에서 정합성 유지 어려움
   → 스케일 업이 더 적합

스케일 아웃의 핵심은 "서버를 Stateless하게 설계하는 것" 입니다. 서버가 상태를 갖지 않아야 어느 서버로 요청이 가도 동일하게 처리할 수 있습니다.

CSLOG에서 보기