연필로 그리는 신뢰성 기차 세트: 프로덕션 악몽을 종이 위에 재현하고 길들이는 법
저기술 연필·종이 ‘기차 세트’가 어떻게 복잡한 시스템을 모델링하고, 사고 대응을 리허설하며, 실제 사용자에게 장애가 닥치기 전에 신뢰성을 끌어올리는 데 도움을 줄 수 있는지 살펴봅니다.
소개
현대의 프로덕션 시스템은 서비스, 큐, 캐시, 네트워크, 그리고 사람들로 이루어진 거대한 보이지 않는 도시와 같습니다. 우리는 아키텍처 다이어그램을 그리고, 런북(runbook)을 작성하고, SLO를 설정하지만, 여전히 예기치 못한 장애에 당합니다.
그 이유 중 하나는, 우리의 신뢰성에 대한 사고가 대부분 추상 속에만 머물러 있기 때문입니다. 화이트보드 스케치는 금세 사라지고, 다이어그램은 금방 낡습니다. 사고 리뷰 문서는 아무도 열어보지 않는 폴더에 쌓여만 갑니다. 반면 장애는, 너무나도 현실적입니다.
이 간극을 메우는 뜻밖의 강력한 방법이 하나 있습니다.
당신의 프로덕션 시스템을 연필로 그린 기차 세트로 만들라 — 탁자 위에서 밀고 당기고, 일부러 충돌시키고, 배운 것을 반영해 다시 조립할 수 있는 살아 있는 종이 모델.
장난처럼 들리지만, 실제로도 장난스럽습니다. 하지만 동시에, 실제 사용자에게 장애가 가기 전에 프로덕션 악몽을 미리 탐색해 볼 수 있는 저비용·저위험 방법이기도 합니다. 이제 “신뢰성 기차 세트”가 무엇인지, 어떻게 만들고, 어떻게 활용해 시스템과 팀을 더 탄탄하게 만들 수 있는지 살펴보겠습니다.
연필로 그린 신뢰성 기차 세트란 무엇인가?
일반적인 **모형 기차 세트(model trainset)**를 떠올려 보세요. 다만 기관차와 터널 대신에 이런 것들이 있습니다.
- 서비스, 데이터베이스, 큐: 종이 카드
- 의존성(Dependencies): 카드 사이를 잇는 연필로 그린 선로(track)
- 사용자, 외부 API, 서드파티 시스템: 토큰(token)
- 온콜 엔지니어, SRE, 기타 사람들: 이름이 적힌 피규어나 메모지
이건 곧, 프로덕션 시스템과 그것을 운영하는 사람들을 물리적인 탁상 위에 옮겨 놓은 표현입니다. 여기서 우리는:
- 조각들을 옮기고
- 선로를 막고
- 새 서비스를 추가하고
- 장애를 시뮬레이션
할 수 있습니다. 실제 인프라에는 손도 대지 않고 말이죠.
목표는 픽셀 단위로 정확한 모델이 아닙니다. 목표는 **공유된 이해(shared understanding)**입니다. 모두가 함께 보고, 만지고, 생각을 나눌 수 있는, 단순하지만 조작 가능한 모델이 핵심입니다.
다이어그램과 대시보드도 있는데, 왜 굳이 종이인가?
이미 아키텍처 다이어그램, 그래프, 대시보드, 사고 대응 도구를 갖고 있을 겁니다. 그런데 왜 종이까지 써야 할까요?
1. 저비용·저위험 실험 환경
연필 기차 세트는 값이 거의 들지 않습니다. 종이, 펜, 테이프 정도면 충분하고, 위험도 없습니다. 그래서 다음과 같은 일을 마음껏 해볼 수 있습니다.
- “이런 상황이면 어떨까?” 하는 과감한 가정들
- 생각만 해도 무서운 장애 양상 탐색
- 급진적인 아키텍처 아이디어 실험
…이 모든 걸, 실제 배포나 모의 환경 구축, 실서비스 장애 위험 없이 할 수 있습니다.
모델이 틀렸다면, 지우고 다시 그리거나 카드를 옮기면 됩니다. 틀리는 비용이 거의 0에 가깝기 때문에, 사람들은 더 기꺼이 불편한 가능성까지 탐색하게 됩니다.
2. 복잡한 시스템을 손에 잡히게 만들기
프로덕션 시스템은 대개:
- 한 사람 머릿속에 온전히 담기에는 너무 크고,
- 다이어그램으로만 봐서는 현실감이 잘 안 나는 추상적인 존재입니다.
반면 물리적인 모델은:
- 각자의 머릿속에 있던 멘탈 모델을 탁자 위로 끄집어내고
- 의존성을 실제 선로와 선으로 눈에 보이게 만들고
- 사람들이 둘러서서 손가락으로 가리키며 함께 논의하게 만듭니다.
이렇게 손에 잡히는 형태가 되면:
- 신입·주니어 엔지니어들이 시스템을 훨씬 빨리 이해하고
- 전문가들도 당연하게 여기던 이상한 의존 관계를 새삼 발견하고
- 이해관계자들이 기능과 신뢰성 사이의 트레이드오프를 눈으로 보게 됩니다.
3. 팀 간 커뮤니케이션을 위한 공통 언어
SRE, 애플리케이션 엔지니어, 보안팀, 고객 지원, 리더십 등, 팀마다 신뢰성을 말하는 언어가 조금씩 다릅니다. 이때 공유된 물리 모델은 하나의 공통 언어가 됩니다.
모두 같은 탁자를 보며 이렇게 얘기할 수 있습니다.
- “이 데이터베이스가 죽으면 어떤 경로가 막히죠?”
- “보안 모니터링은 이 플로우에서 어디에 들어가 있죠?”
- “이 링크가 끊기면 누구에게 페이지가 날아가나요?”
기차 세트 덕분에 대화가 이론이 아니라 구체적인 것이 됩니다.
첫 번째 신뢰성 기차 세트 만들기
유용한 기차 세트 하나를 만드는데 1시간도 걸리지 않습니다. 간단한 접근 방법을 소개합니다.
1단계: 기본 재료 모으기
- 큰 종이 한 장(또는 여러 장을 테이프로 이어 붙이기)
- 인덱스 카드나 포스트잇
- 펜과 연필(쉽게 수정하려면 연필이 특히 유용합니다)
- 테이프 또는 재사용 가능한 점착제
- 사용자나 요청을 나타낼 토큰(동전, 보드게임 말, 종이 동그라미 등)
2단계: “선로” 스케치하기
종이 위에 연하게 여러 개의 레인 혹은 “선로(track)”를 그려, 상위 수준의 플로우를 표현합니다. 예를 들면:
- User > Edge > App > DB
- Internal service > Queue > Worker > External API
이건 공식적인 네트워크 다이어그램이 아니라, 토큰(쿼리, 이벤트, 요청)이 움직이는 경로라고 생각하면 됩니다.
3단계: 컴포넌트를 카드로 만들기
각 카드에는 다음을 적습니다.
- 컴포넌트 이름 (예:
user-api,orders-db,payments-worker) - 타입 (service, database, cache, queue, external system)
- 한두 줄 정도의 핵심 신뢰성 이슈 (예: “single AZ”, “limited retries”, “slow cold start”)
이 카드를 선로를 따라, 요청 플로우 순서에 맞춰 대략적으로 배치합니다. 너무 고민하지 말고, 진행하면서 계속 조정해도 됩니다.
4단계: 사람과 프로세스 추가하기
신뢰성은 기술만으로 이뤄지지 않습니다. 다음에 해당하는 카드나 메모도 만듭니다.
- 온콜 역할(on-call roles)
- Incident Commander / 커뮤니케이션 담당
- 보안 대응자(Security responders)
- 고객 지원 / Customer Success
또한 다음도 표시합니다.
- 알람(alert)이 어디에서 오는지
- 로그와 메트릭이 어디로 모이는지
- 에스컬레이션이 어떻게 이루어지는지(화살표, 라벨, 또는 별도 트랙 등)
5단계: 간단한 토큰 정의하기
토큰을 정해 다음을 표현합니다.
- 일반 요청 (예: 초록색 토큰)
- 고우선·민감 요청 (예: 빨간색 토큰)
- 백그라운드 잡이나 배치 작업
이 토큰들이 나중에 연습할 때 선로를 따라 움직이게 됩니다.
이제 기본적인 기차 세트가 완성됐습니다. 완벽하진 않지만, 탐색을 시작하기에는 충분합니다.
정적인 다이어그램이 아니라, 살아 있는 모델로 다루기
진짜 힘은 이 기차 세트를 일회성 워크숍 산출물이 아니라, 정기적으로 업데이트되는 살아 있는 모델로 만들 때 생깁니다.
사고 후에 업데이트하기
사고 리뷰(incident review)를 한 뒤, 이렇게 물어봅니다.
- 이 사고는 기차 세트에서 어디서 시작되었는가?
- 어떤 경로들이 영향을 받았는가?
- 원래 모델에 빠져 있던 컴포넌트나 사람이 있었는가?
그런 뒤 종이 모델을 수정합니다.
- 그동안 간과했던 서비스를 새 카드로 추가하고
- 사고 중 새롭게 드러난 의존성을 선으로 그려 넣고
- “여기가 약한 지점”이라는 표시를 남깁니다(예: “여기엔 rate limiting 없음”).
시간이 흐르면서, 기차 세트는 여러분이 배운 내용이 물리적으로 축적된 학습의 기록이 됩니다.
아키텍처 변화에 맞춰 진화시키기
다음과 같은 일이 생길 때마다:
- 새 서비스를 추가하거나
- 크리티컬 패스를 바꾸거나
- 새로운 큐나 캐시를 도입할 때마다
…이 변화를 모델에 반영합니다. 이렇게 하면 신뢰성 논의는 현재 실제 시스템을 기준으로 이뤄지지, 몇 달 전부터 방치된 다이어그램을 놓고 하게 되지 않습니다.
주기적으로 “지도 점검” 하기
가끔씩 시간을 내서 이렇게 확인합니다.
- 이게 아직도 실제 프로덕션을 제대로 나타내고 있는가?
- 중요한 의존성이 빠져 있진 않은가?
- 우리가 가장 고통받는 장애 양상을 모델이 잘 담고 있는가?
기차 세트는 시스템과 팀이 성장하고 바뀌는 만큼, 같이 커지고 바뀌어야 합니다.
기차 세트로 테이블탑(탁상) 연습 진행하기
모델이 준비되면, 이를 이용해 안전한 환경에서 사고 대응 리허설을 할 수 있습니다.
1. 시나리오 설계하기
구체적인 시나리오 하나를 고릅니다. 예를 들면:
- Primary DB가 사용 불가 상태가 된다.
- 서드파티 결제 서비스에 대규모 장애가 발생한다.
- 잘못된 롤아웃 때문에 코어 서비스에 메모리 릭이 생긴다.
- 보안 사고: 프로덕션에서 수상한 액세스 패턴이 탐지된다.
시나리오를 간단히 카드에 적고, 시스템 내 관련 지점에 카드로 올려 놓습니다.
2. 장애를 시뮬레이션하기
물리적으로 다음과 같이 진행합니다.
- 영향을 받는 컴포넌트 카드를 뒤집거나 굵은 X 표시를 합니다.
- 그 카드의 선로를 테이프나 다른 카드로 막습니다.
- 장애가 연쇄적으로 번지는 경우, 의존 컴포넌트들도 순차적으로 “다운” 처리합니다.
이 작업을 하면서 참여자들에게 다음을 말로 풀어보게 합니다.
- 우리가 가장 먼저 보게 될 징후는 무엇인가? (어떤 알람이 울리고, 어떤 대시보드에서 증상이 보이는가?)
- 누구에게 페이지가 가는가? (사람과 프로세스 카드의 흐름을 따라가 봅니다.)
- 사용자 입장에서는 무엇이 깨지는가? (막힌 경로를 따라 토큰을 움직여 봅니다.)
3. 대응 과정을 함께 밟아보기
이제 그룹에게 실제처럼 대응 절차를 연기하듯 진행해 보게 합니다.
- 누가 Incident Commander, 커뮤니케이션 담당을 맡는가?
- 어떤 액션을 가장 먼저 시도하는가?
- 데이터를 어디서 찾는가?
- 팀 간 조율은 어떻게 이뤄지는가?
이때 나온 어려움은 포스트잇에 적어, 문제가 드러난 위치에 바로 붙입니다.
- “알람이 너무 늦게 온다.”
- “이 서비스에는 런북이 없다.”
- “이 의존성의 오너가 누구인지 모른다.”
4. 신뢰성 개선 포인트 찾기
연습 과정에서 드러난 내용을 바탕으로, 다음과 같은 개선 기회를 찾습니다.
- 탐지(detection) 개선: 더 나은 알람, 대시보드, 로그
- 대응(response) 개선: 명확한 역할 정의, 런북, 자동화
- 회복탄력성(resilience) 개선: 이중화, 타임아웃, 백프레셔(backpressure), 폴백(fallback)
기차 세트가 물리 모델이기 때문에, 제안된 변경 사항도 물리적으로 표현할 수 있습니다.
- 폴백 캐시(fallback cache)를 나타내는 새 카드
- 우회 경로를 위한 새로운 선로
- 사고 대응에서 새로 도입하는 자동화 단계를 보여주는 카드
이렇게 하면, 연습에서 얻은 인사이트가 곧바로 설계 변경으로 이어지는 선순환을 만들 수 있습니다.
팀 간 커뮤니케이션을 위한 기차 세트 활용법
여러 관점을 맞춰야 할 때, 공유된 종이 모델은 특히 유용합니다.
엔지니어, 운영, 이해관계자 정렬시키기
크로스펑셔널 세션에서 기차 세트를 이용해 다음과 같은 일을 할 수 있습니다.
- PM에게 신규 기능이 크리티컬 패스에 어떤 영향을 주는지 보여주고
- 보안팀이 어떻게 각 컴포넌트와 플로우에 보안 통제를 매핑하는지 함께 확인하고
- 리더십이 어디에 신뢰성 투자를 하면 효과가 큰지 이해하도록 돕습니다.
“신뢰성에 더 투자해야 합니다” 같은 추상적인 주장 대신, 탁자를 가리키며 얘기할 수 있습니다.
- “여기가 single-homed 구간입니다.”
- “체크아웃 레이턴시를 좌우하는 세 번의 홉이 여기입니다.”
- “여기가 뚫리면 보안 침해 피해가 가장 클 지점입니다.”
온보딩과 지식 전수
신규 입사자들은 프로덕션 환경을 이해하는 데 늘 어려움을 겪습니다. 기차 세트는 훌륭한 교육 도구가 됩니다.
- 토큰을 실제로 움직여 보이며 흔한 요청 플로우를 설명하고
- 과거 사고가 발생했던 지점을 지도에 표시해 보여주고
- “초보적인” 질문을 마음껏 하게 해서, 그 과정에서 이미 오래전에 바뀌었는데 문서만 옛날 상태인 가정들을 드러낼 수도 있습니다.
이렇게 하면 중요한 지식이 소수 시니어 엔지니어 머릿속에만 머무르지 않게 됩니다.
결론: 진지한 신뢰성을 위한 장난감 같은 도구
신뢰성 작업은 매우 진지합니다. 장애는 돈과 평판, 그리고 잠을 앗아갑니다. 그렇다고 우리가 쓰는 도구까지 반드시 복잡하거나 무거울 필요는 없습니다.
연필로 그린 신뢰성 기차 세트는 다음과 같습니다.
- 저비용·저위험이라 마음껏 실험할 수 있고
- 손으로 만지고 조작할 수 있어서 복잡한 시스템을 이해하기 쉬우며
- 사고와 인사이트를 반영하며 계속 다듬어 가는 살아 있는 모델이고
- 보안 및 사고 대응 시나리오를 위한 안전한 리허설 공간이며
- 팀 간 신뢰성 트레이드오프를 이해하기 위한 공유 언어입니다.
이걸 시작하는 데 승인 절차나 예산, 새 플랫폼은 필요 없습니다. 필요한 것은 탁자 하나, 약간의 종이, 그리고 손으로 생각해볼 의지가 있는 팀뿐입니다.
사용자 여정 중 하나, 가장 중요한 흐름 하나를 고르세요. 그것을 그립니다. 기차 세트로 만듭니다. 일부러 망가뜨려 봅니다. 그리고 거기서 배운 것을 바탕으로, 다음 실제 사고가 악몽이 아니라 잘 연습된 드릴에 가깝게 만들십시오.