Architecture(1) - 시스템 설계 과정



1. 문제 이해 및 설계 범위 확정

엔지니어가 가져야 할 기술 중 하나는 바로 ‘올바른 질문을 던지는 것’이다.
시스템 설계에서 완벽한 초기 설계란 없다.
적절한 가정을 세우고, 시스템 구축에 필요한 핵심 정보를 수집하며 모호함을 제거하는 것이 1단계의 핵심이다.

  • 구체적으로 어떤 기능들을 만들어야 하는가?
  • 제품 사용자 수(트래픽 규모)는 얼마나 되는가?
  • 주로 사용하는 기술 스택은 무엇인가?
  • 설계를 단순화하기 위해 활용할 수 있는 사내 기존 서비스나 오픈소스가 있는가?

뉴스 피드 시스템 요구사항 도출하기

  • Q. 지원해야 하는 플랫폼은 무엇인가?
    • A. 모바일 앱과 웹 앱 둘 다 지원
  • Q. 가장 중요한 핵심 기능은 무엇인가?
    • A. 사용자가 새로운 포스트를 올리고, 다른 친구의 뉴스 피드를 볼 수 있어야 함
  • Q. 뉴스 피드의 정렬 기준은 무엇인가?(예: 시간 역순, 알고리즘 기반 가중치 부여 등)
    • 의도: 친한 친구의 포스트를 상단에 노출하는 등의 특별한 알고리즘이 필요한 지 파악
    • A. 단순 시간 역순 정렬
  • Q. 한 사용자는 최대 몇 명의 사용자와 친구를 맺을 수 있는가?
    • A. 최대 5,000명
  • Q. 시스템의 트래픽 규모는 어느 정도인가?
    • A. DAU 기준 1,000만 명
  • Q. 피드 포스트에 텍스트 외에 이미지나 비디오도 올라올 수 있는가?
    • A. 그렇다. 미디어 파일도 포함될 수 있다.

2. 개략적 설계안 제시 및 동의 구하기

요구사항이 명확해졌다면, 이제 시스템 전체적인 설계안을 만들 차례이다.
이 단계에서는 완벽한 설계도를 그리기 보다, 개략적인 청사진을 제시하고 동료의 동의를 구하는 것에 초점을 맞춘다.

  • 핵심 컴포넌트 다이어그램 시각화: 종이나 화이트보드에 시스템을 구성하는 핵심 컴포넌트들을 배치
    • 클라이언트 및 네트워크: 클라이언트(웹/앱), API GW, 웹 서버
    • 데이터 관리: 주 데이터베이스(RDBMS/NoSQL), 캐시
    • 미디어 처리: 미디어 파일 저장을 위한 객체 스토리지 및 컨텐츠 전송 네트워크(CDN)
    • 비동기 처리: 메시지 큐를 활용한 비동기 작업 아키텍처

최초 설계안이 1단계에서 파악한 트래픽 규모와 제약사항을 만족할 수 있는지 개략적으로 계산해보자.
이 과정에서 병목 현상이 발생할 수 있는 지점을 미리 파악할 수 있다.

설계한 아키텍처 위에서 주요 사용 사례를 따라가본다.
이는 개략적 설계안의 논리적 흐름을 잡아줄 뿐만 아니라, 미처 생각지 못한 에지 케이스를 발견하는데 도움이 된다.

실무에서는 메시지 큐, CDN, 캐시 등을 직접 인프라에 구축하기보다 AWS SQS, AWS CloudFront, ElastiCache 같은 완전 관리형 클라우드 서비스를 적극 활용하여 인프라 관리 복잡성을 낮추는 방식을 선호한다.


3. 상세 설계

이 단계에 왔다면, 당신은 아래 조건들은 성공적으로 달성한 상태이다.

  • 시스템 전반의 목표와 기능 범위 확정
  • 전체 시스템 아키텍처의 개략적 청사진 완성
  • 해당 청사진에 대한 동료의 동의 확보

이제 설계안에서 가장 중요하거나 병목이 될 것이라고 예상되는 영역을 선택하여 깊이 파고들어야 한다.
예를 들어 뉴스 피드 시스템이라면 ‘수백만 명의 팔로워를 가진 유명인의 포스트를 처리할 때 발생하는 팬아웃(Fan-out) 문제를 어떻게 해결할 것인가?’ 와 같은 핵심 기술적 과제에 집중하여 상세한 해결책을 제시한다.


4. 마무리

시스템이 ‘정상적으로 동작할 때’뿐만 아니라 ‘장애가 발생했을 때’ 어떻게 대처할 것인지까지 고민해야 한다.

  • 장애 대응
    • 네트워크 단절, 특정 서버 다운, DB 데드락 등 예기치 못한 오류가 발생했을 때 시스템은 어떻게 복구되는가?
    • 예) 다중화, Circuit Breaker 도입 등
  • 운영 이슈 및 가시성
    • 트래픽 및 시스템 메트릭은 어떻게 수집할 것인가?
    • 분산 환경에서 로그 추적은 어떻게 할 것인가?
    • 무중단 배포 전략은 어떻게 가져갈 것인가?
  • 규모 확장성
    • 현재 DAU 1,000만 명을 넘어 1억 명으로 트래픽이 폭증한다면 데이터베이스 샤딩이나 캐시 레이어를 어떻게 확장할 것인가?

가시성과 자동화

단순 모니터링을 넘어 가시성이 핵심 화두이다.
프로메테우스와 그라파나(Grafana)를 통하나 메트릭 수집, Datadog 또는 ELK 스택을 통한 중앙집중형 로그 분석, 그리고 CI/CD 파이프라인(GitHub Actions, ArgoCD 등)을 통한 자동화된 배포 파이프라인 구축이 필요하다.


정리하며…

대규모 시스템 설계는 정해진 단 하나의 정답을 찾는 퀴즈가 아니다.

1) 집요한 질문을 통해 문제를 정의하고 2) 협업을 통해 개략적인 뼈대를 세우며, 3) 핵심 기술 과제에 깊이 파고든 후, 4) 예외 상황과 운영까지 대비하는 종합적인 문제 해결 과정이다.


참고 사이트 & 함께 보면 좋은 사이트

본 포스트는 알렉스 쉬 저자의 가상 면접 사례로 배우는 대규모 시스템 설계 기초를 기반으로 스터디하며 정리한 내용들입니다.






© 2020.08. by assu10

Powered by assu10