# 대규모 시스템 설계의 지향점과 철학

# 1. 시스템 설계는 기술 문제가 아니라 구조의 문제다

시스템 설계를 이야기할 때 많은 사람이 먼저 떠올리는 것은 다음과 같다.

  • 어떤 언어를 쓸 것인가
  • 어떤 프레임워크가 좋은가
  • 클라우드냐 온프레미스냐
  • 마이크로서비스냐 모놀리스냐

하지만 대규모 시스템 설계에서 이런 질문은 대부분 2순위다.

진짜 중요한 질문은 이것이다.

이 시스템은 사람이 바뀌어도 동일하게 동작하는가?

시스템 설계의 본질은

“똑똑한 개발자를 뽑는 것”이 아니라 “똑똑하지 않아도 안전하게 운영되는 구조를 만드는 것”이다.


# 2. 시스템 설계의 궁극적 지향점

대규모 시스템 설계의 목표는 단순하다.

불확실성을 구조로 흡수하는 것

이를 조금 더 구체화하면 다음 세 가지로 수렴한다.

  1. 개인에게 의존하지 않는다
  2. 예측 가능하게 변화한다
  3. 실패해도 통제 가능하다

이 세 가지가 충족되지 않으면 시스템은 커질수록 리스크 증폭기가 된다.


# 3. 개인 의존 시스템의 전형적인 실패 패턴

대규모 장애의 원인을 추적해보면 기술적인 한계보다 다음 문제가 더 자주 등장한다.

  • 특정 사람이 아니면 구조를 모른다
  • 암묵적인 운영 규칙이 많다
  • 문서보다 기억이 신뢰된다
  • "그분이 원래 그렇게 하셨어요"라는 말이 나온다

이런 시스템은 규모가 커질수록 이렇게 변한다.

사람이 병목이 되고, 기억이 규칙이 되고, 실수가 장애가 된다.

시스템 설계의 첫 번째 목표는 이 의존성을 구조적으로 제거하는 것이다.


# 4. 소프트웨어 공학은 시스템 설계의 언어다

많은 사람이 묻는다.

“이건 소프트웨어 공학 영역인가요?”

정답은 그렇다다.

하지만 우리가 학교에서 배운 소프트웨어 공학은 종종 이렇게 축소된다.

  • 폭포수 vs 애자일
  • UML
  • 테스트 기법

대규모 시스템 설계에서의 소프트웨어 공학은 다음 질문에 대한 답이다.

  • 책임은 어디에 있는가?
  • 변경은 어디까지 전파되는가?
  • 실패는 어디서 차단되는가?
  • 규칙은 코드인가, 사람인가?

즉,

구조를 통해 인간의 한계를 보완하는 학문

이게 시스템 설계 관점의 소프트웨어 공학이다.


# 5. 개인에게 의존하지 않는 구조의 핵심 원칙

# 5.1 규칙은 사람의 판단이 아니라 시스템에 존재해야 한다

  • 접근 통제는 요청이 아니라 권한으로
  • 배포는 결심이 아니라 파이프라인으로
  • 장애 대응은 순발력이 아니라 절차로

사람이 판단할수록 편해지지만 시스템은 점점 예측 불가능해진다.


# 5.2 모든 흐름에는 통제 지점이 있어야 한다

대규모 시스템은 자유로운 구조가 아니다.

외부 요청
   ↓
[ 통제 지점 ]
   ↓
내부 시스템
1
2
3
4
5
  • API Gateway
  • Message Queue
  • 승인 프로세스
  • 배포 관문

통제 지점은 느리게 만드는 요소가 아니라 안전하게 만드는 요소다.


# 5.3 암묵적 지식은 반드시 제거해야 한다

  • "원래 이렇게 해요"
  • "보통 이 시간에 안 터져요"
  • "이건 거의 안 써요"

이런 문장은 시스템 설계 실패의 신호다.

좋은 시스템은 이렇게 말한다.

"몰라도 됩니다. 구조가 막고 있습니다."


# 6. 예측 가능한 개발이란 무엇인가

예측 가능한 개발이란

변경의 영향 범위를 사전에 알 수 있는 상태다.

이는 속도와 반대 개념이 아니다. 오히려 대규모 시스템에서는 속도의 전제 조건이다.


# 6.1 변경은 항상 국소적이어야 한다

  • 한 모듈 수정 → 전체 영향 ❌
  • 한 경계 수정 → 명확한 영향 ⭕

그래서 대규모 시스템은 항상 경계를 만든다.

  • 서비스 경계
  • 데이터 경계
  • 네트워크 경계
  • 책임 경계

# 6.2 실패는 정상 상태여야 한다

대규모 시스템에서는

실패하지 않는 시스템 ❌ 실패를 전제로 설계된 시스템 ⭕

그래서 등장하는 개념들이 있다.

  • Circuit Breaker
  • Retry 정책
  • Timeout
  • Bulkhead

이건 기술 패턴이 아니라 실패를 통제하는 사고 방식이다.


# 7. 대규모 시스템 설계의 철학 한 문장

대규모 시스템 설계의 철학은 다음 문장으로 요약할 수 있다.

사람이 실수해도 시스템은 무너지지 않아야 한다.

그리고 한 문장이 더 붙는다.

사람이 바뀌어도 시스템의 성격은 유지되어야 한다.


# 8. 좋은 아키텍처의 결과물

좋은 시스템 설계는 다음 결과를 만든다.

  • 새로운 사람이 와도 사고가 나지 않는다
  • 장애의 원인이 추적 가능하다
  • 변경이 두렵지 않다
  • 운영이 개인의 역량을 넘지 않는다

이는 기술 선택의 문제가 아니라 설계 철학의 문제다.


# 9. 마무리

시스템 설계의 지향점

예측이 빗나가도 시스템이 버틸 수 있도록 만드는 일이다.

대규모 시스템 설계는 똑똑한 개인을 전제로 하지 않는다.

대신,

평범한 사람들이 실수하면서도 안정적으로 운영할 수 있는 구조를 만든다.

Last Updated: 2/2/2026, 8:35:45 AM