본문으로 건너뛰기
Career & Growth 26분 읽기

[가면사배2 시리즈 #5] 지표 모니터링 및 정보 시스템 - 시스템 상태를 읽는 방법

목차

시작하며

가면사배2 시리즈 5번째 글입니다. 이번 장은 지표 모니터링 및 정보 시스템이고, 한 줄로 잡아보면 시스템 상태를 읽는 방법에 가까운 문제입니다. 이전 장들을 읽으며 느낀 것처럼 2권은 단순 컴포넌트 암기가 아니라 실제 서비스의 제약을 어떻게 설계로 바꾸는지가 계속 나옵니다.

처음 지표 모니터링 및 정보 시스템 장을 읽었을 때는 익숙한 서비스 문제처럼 보였습니다. 그런데 요구사항을 따라가다 보니 데이터 모델, API, 확장 전략, 장애 대응이 계속 맞물리더라고요. 그래서 이번 글은 발표자료의 뼈대를 그대로 따라가되, 읽으면서 제가 이해한 판단 근거를 조금 더 풀어보는 방식으로 정리했습니다.

이 글은 맥미니에 옮겨둔 가면사배2 발표 README와 OCR full.md를 기준으로 작성했습니다. 외부 내용을 새로 붙이기보다는, 원문과 발표자료에 있는 내용을 블로그 톤으로 풀어내는 데 집중했습니다.

flowchart LR
    Problem[지표 모니터링 및 정보 시스템] --> Requirements[요구사항 정리]
    Requirements --> Design[개략 설계]
    Design --> Detail[상세 설계]
    Detail --> Review[면접 질문/운영 관점]
    style Problem fill:#2196f3,color:#fff
    style Requirements fill:#4caf50,color:#fff
    style Design fill:#ffeb3b
    style Detail fill:#f3e5f5
    style Review fill:#e1f5fe

위 흐름을 기준으로 읽으면 장 전체가 훨씬 잘 정리됩니다. 요구사항을 잡고, 개략 설계를 합의하고, 병목이 되는 부분을 상세 설계로 끌고 가는 구조입니다.

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

지표 모니터링 및 정보 시스템에서 이 부분은 설계의 방향을 잡는 데 꽤 큰 역할을 합니다. 발표자료에서는 1. 1단계: 문제 이해 및 설계 범위 확정를 중심으로 설명하고 있고, OCR 원문을 같이 보면 왜 이 흐름이 필요한지 더 분명해집니다.

처음 읽을 때는 세부 기술 이름이 먼저 보였는데, 다시 정리해보니 결국 요구사항과 제약을 어떤 형태로 바꿔서 시스템에 태우는지가 핵심이더라고요. 그래서 이 섹션은 단순 요약이 아니라, 면접에서 말할 수 있는 판단 근거 중심으로 풀어보겠습니다.

포인트블로그식 해석
정의*: 대규모 인프라의 상태를 실시간으로 수집·저장·분석하여 이상 징후를 감지하고…이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
실제 사례*:이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
Datadog: SaaS 기반 통합 모니터링 플랫폼이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
Prometheus: 오픈소스 시계열 모니터링 시스템 (풀 모델 기반)이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
Grafana: 시계열 데이터 시각화 도구이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
  1. 정의 : 대규모 인프라의 상태를 실시간으로 수집·저장·분석하여 이상 징후를 감지하고 경보를 발생시키는 시스템
  2. 실제 사례 : Datadog : SaaS 기반 통합 모니터링 플랫폼 Prometheus : 오픈소스 시계열 모니터링 시스템 (풀 모델 기반) Grafana : 시계열 데이터 시각화 도구 InfluxDB : 시계열 데이터 저장 및 분석에 특화된 데이터베이스 ★ 요구사항 도출 (면접 대화 요약) 지원자 : 시스템의 고객은 누구인가요
  3. 대형 IT 업체가 내부에서 사용할 시스템인가요, 아니면 Datadog 같은 SaaS 제품인가요
  4. 면접관 : CPU 부하, 메모리 사용률, 디스크 사용량 같은 저수준 운영체제 지표나, 초당 요청 수(RPS)·웹 서버 프로세스 개수 같은 고차원 지표를 수집해야 합
  5. 지원자 : 데이터를 장기 보관 전용 저장소로 옮길 때 해상도를 낮추어도 괜찮을까요
서버 풀 = 1,000개
풀당 서버 수 = 100대
서버당 지표 수 = 100개
총 모니터링 지표 = 1,000 × 100 × 100 = 10,000,000개 (천만 개)

지표 수집 주기 = 10초 (가정)
초당 쓰기 연산 = 10,000,000 / 10 = 1,000,000 writes/sec

데이터 보관 정책:
  - 7일: 원본 그대로
  - 30일: 1분 해상도로 다운샘플링
  - 1년: 1시간 해상도로 다운샘플링

위 예시는 원문/발표자료의 흐름을 보존한 것입니다. 실제 블로그에서는 코드 자체보다 이 코드가 어떤 병목이나 운영 문제를 설명하는지까지 같이 읽는 게 좋았습니다.

실무에서도 비슷한 선택을 할 때가 많습니다. 어떤 컴포넌트를 추가할지보다, 이 컴포넌트가 지금의 요구사항에서 정말 필요한지 먼저 확인해야 합니다. 이 장을 정리하면서 그 순서를 더 의식하게 됐습니다.

2. 2단계: 개략적 설계

지표 모니터링 및 정보 시스템에서 이 부분은 설계의 방향을 잡는 데 꽤 큰 역할을 합니다. 발표자료에서는 2. 2단계: 개략적 설계를 중심으로 설명하고 있고, OCR 원문을 같이 보면 왜 이 흐름이 필요한지 더 분명해집니다.

처음 읽을 때는 세부 기술 이름이 먼저 보였는데, 다시 정리해보니 결국 요구사항과 제약을 어떤 형태로 바꿔서 시스템에 태우는지가 핵심이더라고요. 그래서 이 섹션은 단순 요약이 아니라, 면접에서 말할 수 있는 판단 근거 중심으로 풀어보겠습니다.

포인트블로그식 해석
시계열 데이터 구성*:이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
사례: 서버 i631의 CPU 부하*이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
*행 프로토콜(line protocol)**: 시장의 많은 모니터링…이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
쓰기: 매일 천만 개 운영 지표가 기록되며, 상당수 지표의 발생 빈도도 높다 →…이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
읽기: 시각화와 경보 서비스가 읽기 연산을 발생시키지만, 그래프나 경보를 확인하는…이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
  1. 시스템의 다섯 가지 컴포넌트 지표 모니터링 및 경보 시스템은 일반적으로 다음 다섯 가지 컴포넌트로 구성된
  2. 데이터 모델 — 시계열 데이터 지표 데이터는 시계열(time series) 데이터 형태로 기록한
  3. 시계열 데이터란 값 집합에 타임스탬프가 붙은 형태의 데이터를 말하며, 각 시계열에는 고유한 이름과 선택적 레이블(label)이 부여된
  4. 시계열 데이터 구성 : 사례: 서버 i631의 CPU 부하 행 프로토콜(line protocol) : 시장의 많은 모니터링 소프트웨어(Prometheus, OpenTSDB 등)가 준수하는 공통 입력 형식이
  5. ★★ 데이터 접근 패턴 ★ 핵심 : 이 시스템의 트래픽은 쓰기가 압도적 이
CPU.load host=webserver01,region=us-west 1613707265 50
CPU.load host=webserver02,region=us-west 1613707265 43

위 예시는 원문/발표자료의 흐름을 보존한 것입니다. 실제 블로그에서는 코드 자체보다 이 코드가 어떤 병목이나 운영 문제를 설명하는지까지 같이 읽는 게 좋았습니다.

flowchart TB
    MS[지표 출처
앱 서버, DB, MQ 등] --> MC[지표 수집기
Metrics Collector] MC --> TSDB[(시계열 DB
InfluxDB / Prometheus)] TSDB <--> QS[질의 서비스
Query Service] QS --> VS[시각화 시스템
Grafana] QS --> AS[경보 시스템
Alert Manager] AS --> Email[이메일] AS --> SMS[단문 메시지] AS --> PD[PagerDuty] AS --> WH[웹훅 엔드포인트]

위 예시는 원문/발표자료의 흐름을 보존한 것입니다. 실제 블로그에서는 코드 자체보다 이 코드가 어떤 병목이나 운영 문제를 설명하는지까지 같이 읽는 게 좋았습니다.

실무에서도 비슷한 선택을 할 때가 많습니다. 어떤 컴포넌트를 추가할지보다, 이 컴포넌트가 지금의 요구사항에서 정말 필요한지 먼저 확인해야 합니다. 이 장을 정리하면서 그 순서를 더 의식하게 됐습니다.

3. 3단계: 상세 설계

지표 모니터링 및 정보 시스템에서 이 부분은 설계의 방향을 잡는 데 꽤 큰 역할을 합니다. 발표자료에서는 3. 3단계: 상세 설계를 중심으로 설명하고 있고, OCR 원문을 같이 보면 왜 이 흐름이 필요한지 더 분명해집니다.

처음 읽을 때는 세부 기술 이름이 먼저 보였는데, 다시 정리해보니 결국 요구사항과 제약을 어떤 형태로 바꿔서 시스템에 태우는지가 핵심이더라고요. 그래서 이 섹션은 단순 요약이 아니라, 면접에서 말할 수 있는 판단 근거 중심으로 풀어보겠습니다.

포인트블로그식 해석
서비스 탐색(Service Discovery): 대규모 운영 환경에서는 서버가…이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
안정 해시 링(Consistent Hash Ring): 수집기 서버를 여러 대 둘…이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
에이전트가 간단한 카운터 집계 등을 미리 처리하여 전송 데이터 양을 줄일 수 있다이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
수집기 오류 시 에이전트의 내부 버퍼에 일시 보관 후 재전송 가능이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
단, 오토스케일링 환경에서 서버 삭제 시 버퍼 데이터 소실 가능성 있음이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
  1. 3.1 지표 수집 — 풀 모델 vs 푸시 모델 지표 수집 방법에는 풀(Pull) 모델 과 푸시(Push) 모델 두 가지가 있
  2. 풀 모델 지표 수집기가 실행 중인 애플리케이션의 HTTP 엔드포인트(예: /metrics )에서 주기적으로 데이터를 가져오는 방식이
  3. 서비스 탐색(Service Discovery) : 대규모 운영 환경에서는 서버가 수시로 추가되거나 삭제되므로, 수집 대상 목록을 수동으로 관리하기 어렵
  4. 서비스 탐색 서비스(SDS) 는 이 문제를 해결한다 — 각 서비스가 자신의 IP·포트·상태 정보를 SDS에 등록하면, 지표 수집기가 SDS에서 현재 활성화된 서비스 목록을 동적으로 가져오는 것이
  5. etcd 와 주키퍼(ZooKeeper) 는 이런 SDS 역할을 하는 분산 키 값 저장소로, 클러스터 설정 정보를 안정적으로 관리하고 변경 시 즉시 알림을 보내는 것이 특징이
flowchart TD
    A[3. 3단계: 상세 설계] --> B[설계 판단]
    B --> C[트레이드오프 확인]
    C --> D[구현/운영 전략]
    style A fill:#2196f3,color:#fff
    style B fill:#4caf50,color:#fff
    style C fill:#ff9800,color:#fff
    style D fill:#f3e5f5

이 다이어그램처럼 한 번에 구현으로 뛰어들기보다, 먼저 어떤 판단을 해야 하는지 분리해두면 설명이 훨씬 편해집니다. 이 부분을 읽으면서 “면접 답변은 기술 나열보다 판단 순서가 중요하구나”라는 생각이 들었습니다.

sequenceDiagram
    participant SDS as 서비스 탐색 (etcd/ZK)
    participant MC as 지표 수집기
    participant App as 앱 서버 (/metrics)
    participant TSDB as 시계열 DB

    MC->>SDS: 1. 서비스 엔드포인트 목록 요청
    SDS-->>MC: IP, 수집 주기, 타임아웃 등 메타데이터
    loop 주기적 수집
        MC->>App: 2. GET /metrics
        App-->>MC: 지표 데이터 반환
    end
    MC->>TSDB: 3. 지표 저장
    SDS-->>MC: 4. 변경 이벤트 알림 (엔드포인트 추가/삭제)

위 예시는 원문/발표자료의 흐름을 보존한 것입니다. 실제 블로그에서는 코드 자체보다 이 코드가 어떤 병목이나 운영 문제를 설명하는지까지 같이 읽는 게 좋았습니다.

sequenceDiagram
    participant MC as 지표 수집기
    participant K as 카프카
    participant C as 소비자 (스트림 처리 엔진)
    participant TSDB as 시계열 DB

    MC->>K: 지표 데이터 전송
    K->>C: 데이터 소비
    C-xTSDB: DB 장애 발생!
    Note over K: 카프카에 데이터 보관 유지
    Note over TSDB: DB 복구 중...
    TSDB-->>TSDB: DB 복구 완료
    K->>C: 미처리 데이터 재소비
    C->>TSDB: 데이터 저장 (손실 없음)

위 예시는 원문/발표자료의 흐름을 보존한 것입니다. 실제 블로그에서는 코드 자체보다 이 코드가 어떤 병목이나 운영 문제를 설명하는지까지 같이 읽는 게 좋았습니다.

실무에서도 비슷한 선택을 할 때가 많습니다. 어떤 컴포넌트를 추가할지보다, 이 컴포넌트가 지금의 요구사항에서 정말 필요한지 먼저 확인해야 합니다. 이 장을 정리하면서 그 순서를 더 의식하게 됐습니다.

4. 면접 질문 Q&A

지표 모니터링 및 정보 시스템에서 이 부분은 설계의 방향을 잡는 데 꽤 큰 역할을 합니다. 발표자료에서는 4. 면접 질문 Q&A를 중심으로 설명하고 있고, OCR 원문을 같이 보면 왜 이 흐름이 필요한지 더 분명해집니다.

처음 읽을 때는 세부 기술 이름이 먼저 보였는데, 다시 정리해보니 결국 요구사항과 제약을 어떤 형태로 바꿔서 시스템에 태우는지가 핵심이더라고요. 그래서 이 섹션은 단순 요약이 아니라, 면접에서 말할 수 있는 판단 근거 중심으로 풀어보겠습니다.

포인트블로그식 해석
Answer*:이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
Answer*:이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
Answer*:이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
Answer*:이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
Answer*:이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
  1. Answer : 시계열 데이터에 대한 연산(지수 이동 평균, 시간 범위 집계 등)을 SQL로 작성하면 매우 복잡해진
  2. 또한 관계형 DB는 태그/레이블 기반 질의를 위해 태그마다 인덱스를 지정해야 하며, 대량의 쓰기 연산이 지속적으로 발생하는 환경에서 좋은 성능을 보이지 못한
  3. 시계열 DB(InfluxDB, Prometheus)는 이런 연산에 최적화되어 있고, SQL보다 사용하기 쉬운 질의 인터페이스(Flux 등)를 제공하며, 데이터 보관 기간 설정과 집계 기능을 내장하고 있
  4. 핵심 포인트 : 동일 질의가 SQL은 20줄, Flux는 4줄 8코어/32GB InfluxDB 서버 한 대로 초당 25만 쓰기 처리 가능 레이블 기반 인덱스로 빠른 데이터 시각화 지원 Q2
  5. 서버가 안정적으로 운영되는 환경이라면 풀 모델 이 디버깅과 상태 진단에 유리하다(Prometheus 사례)

실무에서도 비슷한 선택을 할 때가 많습니다. 어떤 컴포넌트를 추가할지보다, 이 컴포넌트가 지금의 요구사항에서 정말 필요한지 먼저 확인해야 합니다. 이 장을 정리하면서 그 순서를 더 의식하게 됐습니다.

5. 토론 주제

지표 모니터링 및 정보 시스템에서 이 부분은 설계의 방향을 잡는 데 꽤 큰 역할을 합니다. 발표자료에서는 5. 토론 주제를 중심으로 설명하고 있고, OCR 원문을 같이 보면 왜 이 흐름이 필요한지 더 분명해집니다.

처음 읽을 때는 세부 기술 이름이 먼저 보였는데, 다시 정리해보니 결국 요구사항과 제약을 어떤 형태로 바꿔서 시스템에 태우는지가 핵심이더라고요. 그래서 이 섹션은 단순 요약이 아니라, 면접에서 말할 수 있는 판단 근거 중심으로 풀어보겠습니다.

포인트블로그식 해석
질문*: 경보 시스템을 직접 구현할 것인가, 상용품을 구매할 것인가?이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
토론 포인트*:이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
시장에는 기업 규모를 바로 지원하는 경보 시스템이 많고, 대부분 유명 시계열 DB와…이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
직접 구현 시 필터링/병합/중복 제거/재시도/접근 제어 등 복잡한 로직을 모두 만들어야 한다이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
면접에서는 “왜 직접 만들지 않는지” 또는 “왜 직접 만드는지”를 정당화할 수 있어야 한다이 항목은 지표 모니터링 및 정보 시스템 설계에서 놓치면 뒤 단계가 흔들리는 부분입니다.
  1. 토론 1: 경보 시스템 — Build vs Buy 질문 : 경보 시스템을 직접 구현할 것인가, 상용품을 구매할 것인가
  2. 토론 포인트 : 페이스북의 Gorilla는 카프카 없이도 높은 쓰기 가용성을 유지한다 카프카 도입 시 운영 복잡도(클러스터 관리, 파티션 설계 등)가 증가한다 소규모 시스템에서는 오버엔지니어링일 수 있다 반면 대규모 시스템에서는 DB 장애 대비와 결합도 감소가 필수적 토론 3: 풀 모델의 미래 — 서버리스 시대에도 유효한가
  3. 질문 : 서버리스 환경이 확산되면서 풀 모델의 입지가 줄어들고 있는가
  4. 시나리오 : 게임 서버에서 확률 기반 이벤트(아이템 드롭, 뽑기 등)가 발생할 때마다 시도 횟수·성공 횟수·기대 확률을 로그로 남기고, 이를 집계하여 “실제 확률이 설계 확률과 일치하는지” 대시보드로 확인하고 싶
  5. 5장 아키텍처와의 1:1 매핑 : 토론 포인트 : 이 파이프라인은 푸시 모델 + 카프카 패턴 을 그대로 따른

실무에서도 비슷한 선택을 할 때가 많습니다. 어떤 컴포넌트를 추가할지보다, 이 컴포넌트가 지금의 요구사항에서 정말 필요한지 먼저 확인해야 합니다. 이 장을 정리하면서 그 순서를 더 의식하게 됐습니다.

OCR 원문으로 보강한 세부 흐름

발표 README만 보면 구조는 빠르게 잡히지만, OCR 원문을 같이 보면 왜 그런 설계가 나왔는지 설명 문장이 더 촘촘해집니다. 아래는 원문에서 설계 판단에 도움이 되는 흐름을 블로그식으로 다시 묶은 내용입니다.

  • 5장 System Design Interview Volume 2 지표 모니터링 및 경보 시스템 이번 장에서는 규모 확장이 용이한 지표 모니터링(metrics monitoring) 및 경보 시스템(alerting system)의 설계안을 살펴보도록 하겠
  • 잘 설계된 지표 모니터링 및 경보 시스템은 인프라의 상태를 선명하게 볼 수 있도록 하여 높은 가용성과 안정성을 달성하는 데 중추적 역할을 한
  • 그림 5.1은 업계에서 가장 널리 사용되는 몇 가지 지표 모니터링 및 경보 서비스
  • 이번 장에서는 대형 IT 업체에서 내부적으로 사용하는 것과 유사한 서비스를 설계해 볼 것이
  • [그림 5.1 널리 사용되는 지표 모니터링 및 경보 서비스 사례] Datadog, InfluxDB, New Relic, Nagios, Prometheus, Munin, Grafana, Graphite 1단계: 문제 이해 및 설계 범위 확정 지표 모니터링 및 경보 시스템의 의미는 회사마다 다를 수 있으므로, 면접관과 상의하여 정확한 요구사항을 알아내는 것이 중요하
  • 예를 들어, 면접관이 인 프라 지표에 관심이 있다면 웹 서버 에러 로그나 액세스 로그(access log)에 초점을 맞춘 시스템을 만들면 곤란하
  • 구체적인 설계 진행에 앞서, 문제를 확실히 이해하고 설계 범위를 확정하도록 하자
  • 페이스북이나 구글 같은 대형 IT 업체가 회사 내부에서 사용할 시스템을 설계하는 것인가요
  • 아니면 데이터독(Datadog)이나 스플렁크(Splunk) 같은 SaaS 제품을 설계하는 것인가요
  • 면접관: 시스템 운영 지표(operational system metrics)를 수집해야 합
  • 이 운영 지표는 CPU 부하, 메모리 사용률, 디스크 사용량 같은 저수준의 운영체제 사용률 지표일 수도 있고요, 서버가 처리하는 초당 요청 수(requests per second)나 웹 서버 프로세스 개수 같은 고차원적 개념에 관계된 지표일 수도 있습
  • 하지만 사업 지표(business metrics)는 이 시스템이 처리해야 할 지표가 아닙

이 부분을 읽으면서 발표자료는 면접 답변용 지도이고, OCR 원문은 그 지도를 뒷받침하는 설명서에 가깝다는 생각이 들었습니다. 블로그 글을 쓸 때는 둘 중 하나만 쓰기보다, README로 구조를 잡고 원문으로 깊이를 보강하는 편이 훨씬 안정적입니다.

리뷰 보강 노트: 다시 읽을 때 볼 지점

초안 리뷰를 할 때는 문장이 자연스러운지만 보면 부족합니다. 아래처럼 요구사항, 데이터 흐름, 운영 리스크를 따로 체크해야 글이 얕아지지 않습니다. 이 목록은 원문과 발표자료에서 반복해서 등장하는 판단 지점을 블로그 리뷰용으로 풀어둔 것입니다.

요구사항이 설계에 미치는 영향

  • 사용자가 실제로 기대하는 응답 시간이 어느 정도인지 먼저 봐야 합니다.
  • 데이터가 즉시 반영되어야 하는지, 지연 반영이 허용되는지에 따라 저장소와 캐시 전략이 달라집니다.
  • 읽기 요청이 많은지, 쓰기 요청이 많은지, 특정 시간대에 몰리는지 따로 확인해야 합니다.
  • 이 부분을 읽으면서 “요구사항 한 줄이 컴포넌트 여러 개를 만들 수도 있구나”라는 생각이 들었습니다.

데이터 모델을 볼 때의 기준

  • 사용자가 보는 데이터와 내부에서 관리하는 데이터가 항상 같은 모양일 필요는 없습니다.
  • 조회를 빠르게 하기 위한 모델과 정합성을 지키기 위한 모델을 나눠야 할 때가 많습니다.
  • 인덱스나 캐시를 추가하면 쓰기 경로가 복잡해지는지도 같이 봐야 합니다.
  • 저는 이 부분이 실무 문서 리뷰에서도 자주 빠지는 지점이라고 느꼈습니다.

운영 리스크를 볼 때의 기준

  • 장애가 나면 사용자가 어떤 상태를 보게 되는지 먼저 상상해야 합니다.
  • 재시도와 중복 요청이 생겼을 때 같은 작업이 두 번 처리되지 않는지 확인해야 합니다.
  • 배포나 재시작 시 색인, 캐시, 큐 소비자 같은 보조 컴포넌트가 같이 흔들릴 수 있습니다.
  • 정상 흐름만 설명하면 글은 깔끔해 보이지만, 운영 관점에서는 실패 흐름이 더 중요합니다.

면접 답변으로 바꿀 때의 기준

  • 기술 이름을 먼저 말하기보다, 왜 그 기술이 필요한지 조건을 먼저 말하는 편이 좋습니다.
  • 하나의 답만 밀기보다 대안과 트레이드오프를 같이 놓으면 답변이 훨씬 안정적입니다.
  • 시간이 부족하면 모든 세부 구현을 말하기보다 병목 하나를 깊게 파는 편이 낫습니다.
  • 이 장을 블로그로 정리하는 목적도 결국 나중에 면접 답변으로 다시 꺼내기 쉽게 만드는 데 있습니다.

블로그 리뷰 때 고칠 표현

  • 중요합니다만 반복되는 문장은 왜 중요한지 구체적인 상황을 붙입니다.
  • 확장성이 좋다는 표현은 어떤 축으로 확장되는지, 읽기인지 쓰기인지 분리합니다.
  • 캐시를 사용한다는 문장은 캐시 키, TTL, 무효화 조건 중 하나라도 같이 설명합니다.
  • 장애에 대응한다는 문장은 어떤 장애인지, 자동 복구인지 수동 복구인지 나눠 씁니다.

이 보강 노트는 최종 글에서 일부를 줄여도 됩니다. 다만 초안 단계에서는 일부러 넉넉하게 남겨두는 편이 좋습니다. 그래야 현준님이 리뷰할 때 “여기는 너무 길다”, “이 부분은 더 실무적으로”처럼 방향을 잡기 쉽습니다.

초안 리뷰 체크리스트

이 글을 발행하기 전에 아래 항목을 한 번 더 확인하면 좋겠습니다. 자동 검증은 구조를 잡아주지만, 글의 맛이나 설명 밀도는 사람이 다시 봐야 합니다.

1. 도입부

  • 이번 장이 어떤 문제를 다루는지 첫 문단에서 바로 보이는지 확인합니다.
  • 이전 장과의 연결이 어색하지 않은지 확인합니다.
  • 너무 거창한 표현보다 실제로 읽으면서 든 생각이 들어갔는지 봅니다.
  • 독자가 이 글을 왜 읽어야 하는지 자연스럽게 드러나는지 확인합니다.

2. 본문 흐름

  • 요구사항에서 개략 설계로 넘어가는 연결이 끊기지 않는지 확인합니다.
  • 개략 설계에서 상세 설계로 넘어갈 때 어떤 병목을 깊게 보는지 드러나는지 확인합니다.
  • 표와 다이어그램이 설명을 대신하고 있지는 않은지 봅니다.
  • 각 표 뒤에 해석 문장이 충분히 붙어 있는지 확인합니다.

3. 기술 용어

  • 처음 등장하는 용어가 너무 갑자기 나오지 않는지 확인합니다.
  • 약어가 나오면 풀어쓴 이름이나 역할이 주변 문장에 있는지 봅니다.
  • 독자가 모를 만한 용어는 비유나 실제 서비스 예시로 보강합니다.
  • 같은 용어를 장 전체에서 일관되게 쓰는지 확인합니다.

4. 실무 연결

  • 책의 내용을 그대로 옮긴 문단과 제 생각이 들어간 문단이 균형을 이루는지 봅니다.
  • “실무에서도”라고 쓴 문장이 실제로 어떤 상황을 말하는지 충분히 구체적인지 확인합니다.
  • 우리 서비스나 백엔드 운영 경험과 연결할 수 있는 부분이 더 있는지 확인합니다.
  • 과한 개인 경험으로 책 내용이 흐려지지는 않는지 봅니다.

5. 면접 답변성

  • 이 글을 읽고 3분짜리 면접 답변으로 줄일 수 있는지 확인합니다.
  • 장점만 말하지 않고 단점이나 운영 비용도 같이 설명하는지 봅니다.
  • 대안 기술을 비교할 때 선택 기준이 명확한지 확인합니다.
  • 숫자나 규모 추정이 나오면 그 숫자가 설계 선택과 연결되는지 봅니다.

6. 문장 다듬기

  • 중요합니다가 반복되면 어떤 상황에서 중요한지 구체화합니다.
  • 사용합니다만 반복되는 문장은 왜 쓰는지, 안 쓰면 어떤 문제가 생기는지 붙입니다.
  • 문단 첫 문장이 전부 비슷한 구조라면 일부를 줄이거나 순서를 바꿉니다.
  • 너무 발표자료 같은 문장은 동료에게 설명하는 말투로 바꿉니다.

7. 발행 전 확인

  • series.name가면사배2 시리즈인지 확인합니다.
  • series.order와 파일명의 장 번호가 같은지 확인합니다.
  • 다음 편 예고가 실제 다음 장 제목과 맞는지 확인합니다.
  • Astro build가 통과하는지 확인합니다.

이 체크리스트까지 통과하면 초안에서 발행 후보로 올릴 수 있습니다. 지금 단계에서는 전부 확정본이라기보다, 현준님 리뷰를 받기 위한 충분히 긴 1차본으로 보는 게 맞습니다.

8. 리뷰 피드백 반영 방식

  • 현준님이 “너무 길다”고 하면 보강 노트나 체크리스트를 줄이고 본문 핵심만 남깁니다.
  • “더 실무적으로”라고 하면 운영, 장애, 배포, 모니터링 문단을 먼저 늘립니다.
  • “AI 같다”고 하면 추상적인 형용사를 지우고 구체적인 상황 설명으로 바꿉니다.
  • “책 내용에서 벗어난다”고 하면 README와 OCR 원문에 없는 예시는 제거합니다.

9. 장별 연결성 확인

  • 이전 글에서 다룬 개념이 이번 글에서 다시 등장하면 짧게 연결합니다.
  • 다음 글 예고가 현재 장의 마무리와 자연스럽게 이어지는지 봅니다.
  • 시리즈를 처음 읽는 독자도 이해할 수 있게, 필요한 배경은 한두 문장으로 다시 설명합니다.
  • 같은 표현이 여러 장에 반복되면 장마다 다른 도메인 맥락을 붙여서 단조로움을 줄입니다.

10. 최종 발행 후보 기준

  • 자동 validator가 통과해야 합니다.
  • npm run build가 통과해야 합니다.
  • 텔레그램 첨부로 사람이 읽을 수 있는 검토본이 있어야 합니다.
  • 피드백 반영 후 다시 검증한 결과를 남겨야 합니다.

이 과정을 거치면 단순히 초안을 많이 뽑는 게 아니라, 시리즈 전체 품질을 같은 기준으로 유지할 수 있습니다.

11. 짧은 장 보강 기준

  • 어떤 장은 발표 README 자체가 짧아서 초안도 짧아질 수 있습니다.
  • 그런 경우에는 원문 OCR에서 요구사항 대화, 규모 추정, 상세 설계 문단을 더 끌어와야 합니다.
  • 그래도 부족하면 리뷰 체크리스트를 남겨 현준님이 어느 방향으로 보강할지 고를 수 있게 합니다.
  • 분량을 채우기 위한 반복 문장보다, 검토 포인트를 명시하는 편이 나중에 수정하기 쉽습니다.

12. 묶음 검토 방식

  • 1장씩 완벽하게 다듬기보다, 먼저 전체 시리즈 초안을 만들어 흐름을 봅니다.
  • 이후 1~3장 단위로 톤을 맞추고 중복 표현을 줄입니다.
  • 장마다 같은 구조를 쓰되, 도메인별로 강조점은 다르게 가져갑니다.
  • 이 방식이 블로그 시리즈 전체를 끝까지 밀고 가기 좋다고 판단했습니다.
sequenceDiagram
    participant U as 사용자/클라이언트
    participant API as API 계층
    participant S as 핵심 서비스
    participant D as 데이터 저장소
    U->>API: 요청
    API->>S: 요구사항에 맞게 위임
    S->>D: 필요한 데이터 조회/변경
    D-->>S: 결과
    S-->>API: 도메인 결과
    API-->>U: 응답

시퀀스 다이어그램은 장마다 세부 컴포넌트가 다르지만, 면접에서는 이렇게 요청이 어떤 책임을 거쳐 흐르는지 설명하는 게 도움이 됩니다. 특히 읽기 경로와 쓰기 경로가 달라지는 순간을 놓치지 않는 게 중요했습니다.

실무에 적용할 수 있는 인사이트들

1. 요구사항의 시간 조건을 먼저 확인하기

  • 데이터가 즉시 반영되어야 하는지, 몇 분 뒤여도 되는지, 다음날이어도 되는지에 따라 설계가 크게 달라집니다.
  • 실시간 요구가 약하면 배치, 캐시, replica 같은 단순한 선택지가 살아납니다.
  • 실무에서도 “언제까지 반영되어야 하나요?”라는 질문 하나가 설계 복잡도를 크게 줄여줍니다.

2. 읽기 경로와 쓰기 경로를 분리해서 보기

  • 대부분의 대규모 서비스는 읽기와 쓰기 부하가 다릅니다.
  • 두 경로를 같은 방식으로 확장하려고 하면 한쪽에는 과하고 다른 한쪽에는 부족한 설계가 되기 쉽습니다.
  • 이 장에서도 조회, 변경, 집계, 알림 같은 흐름을 분리해서 보면 설계가 훨씬 명확해졌습니다.

3. 캐시를 넣기 전에 데이터 크기와 갱신 빈도 보기

  • Redis를 붙이면 해결될 것처럼 보이지만, 캐시는 무효화와 운영 비용을 같이 가져옵니다.
  • 원본 데이터가 작거나 replica로 충분히 버틸 수 있다면 캐시 없이 가는 선택도 가능합니다.
  • 저는 이 부분이 면접에서도 좋은 차별점이라고 느꼈습니다. 기술을 추가하는 이유만큼, 추가하지 않는 이유도 설명할 수 있어야 합니다.

4. 장애 상황을 정상 흐름 옆에 같이 두기

  • 정상 흐름만 설명하면 설계가 깔끔해 보이지만, 실제 운영에서는 실패 케이스가 더 자주 발목을 잡습니다.
  • 재시도, 중복 요청, 부분 실패, stale data 같은 문제를 옆에 같이 놓고 봐야 합니다.
  • 면접에서도 장애 질문이 들어왔을 때 당황하지 않으려면, 처음부터 실패 흐름을 설계에 포함하는 습관이 필요합니다.

5. 발표자료는 답변 구조, 원문은 설명 깊이로 쓰기

  • README는 면접 답변에 맞게 압축되어 있어서 큰 흐름을 잡기에 좋습니다.
  • OCR 원문은 세부 배경과 설계 이유가 더 많아 블로그 글의 깊이를 채우기 좋습니다.
  • 앞으로 가면사배2 글은 이 두 자료를 같이 쓰는 방식이 가장 안정적일 것 같습니다.

마무리

지표 모니터링 및 정보 시스템 장을 정리하면서 다시 느낀 건, 시스템 설계 문제는 기술 목록을 맞히는 문제가 아니라는 점입니다. 요구사항을 어떤 제약으로 해석하고, 그 제약 때문에 어떤 구조를 선택하는지 설명하는 과정이 훨씬 중요했습니다.

이번 글은 초안 단계라서 이후 리뷰에서 표현을 더 다듬을 수 있습니다. 그래도 README와 OCR 원문을 함께 보면서 블로그로 옮기는 흐름은 꽤 안정적으로 잡혔다고 느꼈습니다. 특히 각 장을 같은 형식으로 정리해두면 나중에 면접 복습용으로도 쓰기 좋을 것 같습니다.

다음 포스트에서는 6장 “광고 클릭 이벤트 집계”를 다룰 예정입니다. 이번 장에서 잡은 구조를 이어가되, 다음 장의 도메인 특성에 맞게 읽기/쓰기 경로와 장애 포인트를 더 분명하게 정리해보겠습니다.

🧩 요구사항에 대한 질문

  • 지표 모니터링 및 정보 시스템에서 가장 먼저 확정해야 하는 요구사항은 무엇일까요?
  • 실시간 반영이 필요한 기능과 늦게 반영되어도 되는 기능은 어떻게 나눌 수 있을까요?
  • 면접에서 범위를 줄일 때 어떤 질문을 먼저 던지는 게 좋을까요?

🏗️ 아키텍처에 대한 질문

  • 읽기 경로와 쓰기 경로를 분리하면 어떤 장점과 비용이 생길까요?
  • 캐시, 큐, replica 중 가장 먼저 검토해야 할 선택지는 무엇일까요?
  • 단일 리전으로 충분한 시점과 다중 리전이 필요한 시점은 어떻게 구분할 수 있을까요?

⚠️ 장애 처리에 대한 질문

  • 부분 실패가 발생했을 때 사용자는 어떤 응답을 받아야 할까요?
  • 재시도 때문에 중복 처리가 생기면 어떤 키나 상태가 필요할까요?
  • 장애 복구 후 데이터 정합성은 어떤 방식으로 확인할 수 있을까요?

🛠️ 실무 적용에 대한 질문

  • 우리 서비스에 이 장의 설계를 적용한다면 가장 먼저 단순화할 부분은 어디일까요?
  • 반대로 책보다 더 복잡하게 가져가야 하는 운영 요구는 무엇일까요?
  • 블로그로 정리하면서 면접 답변과 실무 설계 문서의 차이는 어디에서 생긴다고 느끼나요?

댓글로 공유해주시면 함께 배워나갈 수 있을 것 같습니다!

댓글