youtube outage — fiction 01
Something Went Wrong
2026년 2월 18일 오전 9시 45분, 유튜브가 멈췄다.
28만 명이 신고했고, 화면에는 여섯 단어만 남았다.
Part I
문제가 발생했습니다
화요일 아침. 커피 필터에 물이 내려가는 동안, 세진은 아이패드로 유튜브를 열었다. 어젯밤에 구독 피드에 올라온 Computerphile 영상이 있었다. DNS 캐시 포이즈닝에 대한 내용. 출근 전에 보려고 아꼈다.
피드가 뜨지 않았다.
새로고침. 같은 화면. 앱을 종료하고 다시 열었다. 같은 화면. 세진은 커피 필터에서 손을 떼지 않은 채 왼손 엄지로 검색창을 눌렀다. 검색은 된다. "Computerphile"을 쳐봤다. 채널 페이지는 뜬다. 영상 목록도 보인다. 하나를 탭했다. 재생된다.
홈이 죽었는데 검색은 살아있어. 구독 피드도 죽었어. 근데 직접 URL은 된다.
커피가 다 내려왔다. 세진은 잔을 들고 거실 책상으로 갔다. 모니터를 켰다. 맥북을 열었다. 터미널.
보안 스타트업 "그레이노드"의 시니어 엔지니어이자, 前 KISA 침해대응팀 분석관. 대형 서비스 장애가 나면 자동으로 원인 분석을 시작하는 직업병이 있다. 개인 블로그에 인시던트 분석 글을 올리는 것이 유일한 취미. 그레이노드에서 맡은 일은 기업의 인프라 보안 감사인데, 실은 장애 원인을 추적하는 과정 자체가 좋아서 이 일을 하고 있다.
출근 시간까지 40분. 충분하다.
Part II
CDN은 살아있다
첫 번째 명령어.
HTTP/2 200
content-type: text/html; charset=utf-8
x-frame-options: SAMEORIGIN
cache-control: no-cache, no-store, max-age=0
x-content-type-options: nosniff
server: ESF
alt-svc: h3=":443"; ma=2592000
200. 서버는 응답한다. 페이지를 돌려주고 있다. 하지만 유저들은 "문제가 발생했습니다"를 보고 있다. 서버는 살아있는데 서비스가 죽어있다. 이 차이가 중요하다.
크롬을 열었다. DevTools. Network 탭. youtube.com에 접속. 메인 HTML은 200으로 내려온다. CSS도, JavaScript도 로드된다. 문제는 그 다음이다.
GET /youtubei/v1/browse 500 — 홈 피드 데이터
GET /youtubei/v1/browse?browseId=FEsubscriptions 500 — 구독 피드
GET /youtubei/v1/reel/reel_watch_sequence 500 — Shorts 피드
GET /youtubei/v1/guide 500 — 사이드바 가이드
GET /youtubei/v1/player?videoId=dQw4w9WgXcQ 200 — 개별 영상 재생
GET /youtubei/v1/search?query=test 200 — 검색
세진은 화면을 2초간 바라보았다. 패턴이 있다.
500을 돌려주는 것들 — 홈 피드, 구독 피드, Shorts, 사이드바 가이드. 전부 "사용자의 데이터를 조회해서 맞춤 결과를 만드는" API들이다. 나의 구독 목록, 나의 시청 기록, 나를 위한 추천.
200으로 정상인 것들 — 개별 영상 재생, 검색. 이것들은 사용자 맞춤이 아니라 "요청한 데이터를 그대로 돌려주는" API다. 영상 ID를 주면 영상을 주고, 검색어를 주면 결과를 준다.
사용자 맞춤 콘텐츠를 만드는 순간 500이 터진다. CDN은 멀쩡하다. 비디오 서빙 파이프라인은 살아있다. 죽은 건 그 위의 레이어. 사용자의 구독, 시청 기록, 취향을 바탕으로 추천 콘텐츠를 생성하는 서비스.
습관적으로 DNS를 확인했다.
142.250.196.110
$ dig youtube.com NS +short
ns1.google.com.
ns2.google.com.
ns3.google.com.
ns4.google.com.
$ openssl s_client -connect youtube.com:443 2>/dev/null | openssl x509 -noout -dates
notBefore=Jan 27 08:29:03 2026 GMT
notAfter=Apr 21 08:29:02 2026 GMT
DNS 정상. 네임서버 정상. TLS 인증서 유효기간 2개월 남음. 작년 10월 장애는 DNS 전파 실패였고, 2023년 11월 장애는 CDN 인증서 만료였다. 이번은 둘 다 아니다.
세진은 메모장을 열고 적기 시작했다.
## 관측된 증상
- 홈 피드, 구독 피드, Shorts: 500 (Internal Server Error)
- 개별 영상 재생: 정상 (200)
- 검색: 정상 (200)
- DNS: 정상 (142.250.x.x, NS record 이상 없음)
- TLS: 정상 (인증서 유효)
## 1차 추론
- CDN/비디오 서빙 파이프라인은 정상
- 추천/개인화 서비스 레이어에서 장애 발생 가능성 높음
- 인프라(DNS, TLS) 레벨은 아닌 것으로 보임
- → 애플리케이션 레벨 장애
폰이 울렸다. 뉴스 알림.
세진은 폰을 뒤집어놓고 DownDetector를 열었다.
Part III
28만의 신고
DownDetector의 그래프가 수직으로 치솟아 있었다. 유튜브 단일 서비스에 28만 건을 넘겼고, 아직 늘어나고 있다. 미국, 영국, 인도, 한국, 유럽 전역. 전 세계가 동시에 같은 화면을 보고 있다.
세진은 막대 하나하나를 읽었다. YouTube 본체만이 아니다. YouTube Music에 28,000건, YouTube Kids에도 4,600건, YouTube TV까지. 유튜브라는 이름이 붙은 서비스가 전부 같이 죽었다.
이 패턴이 중요하다. YouTube Music은 YouTube 본체와 UI도 다르고, 서비스 성격도 다르다. 하지만 같이 죽었다. YouTube Kids도 마찬가지다. 전혀 다른 앱인데 같은 증상을 보인다. 이들의 공통분모가 뭔가?
콘텐츠 추천이다. 홈 화면을 열면 "당신이 좋아할 영상"을 보여주는 것 — 이 기능이 YouTube, YouTube Music, YouTube Kids, YouTube TV 전부에 들어간다. 각 서비스의 UI와 콘텐츠 유형은 다르지만, 뒤에서 "이 사용자에게 무엇을 보여줄 것인가"를 결정하는 추천 시스템은 공유한다.
세진은 증상을 정리했다.
패턴이 완전히 드러났다. 죽은 것과 산 것의 경계선.
죽은 것들의 공통점: 추천이 필요하다. "이 사용자에게 어떤 영상을 보여줄까?" — 홈 피드, Shorts, YouTube Music 홈, YouTube Kids 홈, YouTube TV, 심지어 영상 옆의 추천 사이드바까지. 전부 "무엇을 보여줄 것인가"를 결정하는 시스템에 의존한다.
산 것들의 공통점: 추천이 필요 없다. 비디오 ID를 주면 비디오를 준다. 검색어를 주면 결과를 준다. "무엇을 보여줄까"를 고민할 필요 없이, 요청받은 것을 그대로 돌려준다. CDN은 파일을 서빙할 뿐이고, 검색은 자체 인덱스를 뒤질 뿐이다.
추천 시스템이 죽었다. YouTube, YouTube Music, YouTube Kids — 서비스 이름은 다르지만 "이 사용자에게 뭘 보여줄까"를 결정하는 엔진은 하나다. 그 엔진이 멈추니까 전부 빈 화면이 된 것이다.
세진은 유튜브의 추천 시스템에 대해 알고 있는 것을 떠올렸다. 2016년 RecSys에 발표된 "Deep Neural Networks for YouTube Recommendations" — 구글이 직접 쓴, 유튜브의 추천 시스템이 어떻게 수십억 개의 영상에서 수백 개의 후보를 골라내는지를 설명한 논문이다.
유튜브의 추천 시스템은 단순한 알고리즘이 아니다. 두 단계로 이루어진 거대한 ML 파이프라인이다. 첫 번째 단계(candidate generation)에서 수십억 개의 영상을 수백 개로 줄이고, 두 번째 단계(ranking)에서 사용자의 시청 기록, 검색 이력, 인구통계를 반영해 최종 순서를 정한다. 이 파이프라인이 홈 피드, Shorts, YouTube Music의 추천 목록, YouTube Kids의 콘텐츠 큐레이션을 모두 생성한다.
그리고 이 추천 파이프라인은 사용자 요청이 들어올 때마다 실시간으로 실행된다. 홈 화면을 열 때마다, 영상을 볼 때마다, 앱을 켤 때마다. 초당 수십만 건의 추천 요청을 처리하는 시스템이다.
이 시스템이 멈추면? 유튜브의 모든 "보여주기" 화면이 빈 화면이 된다. 정확히 오늘 아침의 증상이다.
2020년 12월에도 비슷한 패턴이 있었다. 인증 시스템 자체가 고장난 게 아니었다. 인증 시스템의 쿼터 관리가 잘못된 신호를 보내서 자동 스케일링이 용량을 0으로 줄여버렸다. 시스템이 자기 자신을 죽인 것이다. 대규모 시스템의 장애는 시스템 자체의 결함이 아니라, 그 시스템을 운용하는 과정 — 배포, 설정 변경, 모델 업데이트 — 에서 발생하는 경우가 많다.
Google Status Dashboard에는 아직 아무것도 올라오지 않았다. @TeamYouTube 트위터도 침묵. 30만 명이 신고했는데 구글은 아무 말이 없다. 장애 발생 후 30분. 확인조차 안 하고 있다는 건 아닐 거다. 내부에서는 지금 전쟁이 벌어지고 있을 거다. SRE 팀의 페이저가 울렸을 거고, 워룸이 열렸을 거고, 인시던트 커맨더가 배정됐을 거다.
구글이 침묵하는 이유는 하나다. 아직 원인을 특정하지 못했기 때문이다. "문제를 인지하고 있다"는 말도 하지 않는 것은, 범위조차 확정하지 못했다는 뜻이다.
Part IV
"이 패턴, 전에 본 적 있어"
세진은 자신의 인시던트 아카이브를 열었다. ~/notes/incidents/ 폴더. 대형 서비스 장애가 날 때마다 정리해둔 분석 노트들. 구글, AWS, Cloudflare, GitHub — 서비스가 죽을 때마다 한 편씩 늘어났다.
2020-12-14-google-auth-outage.md
2023-11-cdn-cert-expiry.md
2024-06-service-mesh-quota.md
2025-10-15-youtube-dns-failure.md
2026-02-18-youtube-feed-outage.md # ← 지금 작성 중
2020년 12월 14일. 세진이 KISA에서 일하던 시절이다. 그날 새벽, 구글의 거의 모든 서비스가 멈췄다. Gmail, YouTube, Drive, Docs, Calendar. 47분간.
원인은 나중에야 공개됐다. 구글 내부의 자동 쿼터 관리 시스템이 인증 서비스의 사용량을 "0"으로 잘못 보고했다. 자동 스케일링 시스템은 그 숫자를 그대로 믿었다. "사용량이 0이니까 서버도 0대면 되겠지." 그래서 인증 서비스의 용량을 0으로 축소했다. 전 세계의 구글 사용자가 동시에 로그아웃된 것이나 마찬가지였다.
안전장치가 사형선고를 내린 것이다.
하지만 이번 장애의 증상은 다르다. 2020년은 인증 자체가 죽었기 때문에 모든 서비스가 동시에 멈췄다. Gmail도, Drive도, YouTube도. "로그인이 안 되니까 아무것도 안 된다." 명확하고 광범위했다.
이번은? 유튜브만 죽었다. 구글 검색은 된다. Gmail도 된다. 그리고 유튜브 안에서도 피드만 죽고 영상 재생은 된다. 훨씬 국소적이다.
2025년 10월 15일. 4개월 전. 로드밸런서 마이그레이션 중에 DNS 전파가 실패했다. 90분 만에 38만 건의 DownDetector 신고. 그때는 유튜브에 아예 도달을 못했다. DNS가 풀렸으니까. 브라우저에 youtube.com을 치면 IP 주소로 변환이 안 됐다.
이번은? DNS는 정상이다. `dig`으로 확인했다. 서버에 도달은 된다. `curl`에 200이 돌아온다. 문제는 서버에 도달한 후, 피드를 만드는 과정에서 500이 터지는 것이다.
세진은 세 장애를 나란히 놓고 비교했다.
2020-12 인증 쿼터 자멸
증상: 전 서비스 사망 (Gmail, YouTube, Drive 전부)
원인: User ID Service 용량 → 0
레벨: 인프라 (인증 레이어)
2025-10 DNS 전파 실패
증상: YouTube 전체 도달 불가 (DNS 실패)
원인: LB 마이그레이션 중 DNS 전파 불일치
레벨: 인프라 (네트워크 레이어)
2026-02 ??? — 현재 진행 중
증상: YouTube 피드/추천만 사망, CDN/검색 정상
원인: ???
레벨: 애플리케이션 (피드/사용자 데이터 레이어)
2020년은 전부 죽었다. 2025년은 도달 자체가 안 됐다. 2026년은 일부만 죽었다.
부분 사망이 더 무서울 때가 있다. 전체가 죽으면 원인이 명확하다 — 공통 의존성을 찾으면 된다. 도달 불가면 네트워크를 보면 된다. 그런데 일부만 죽으면? 경계선을 그어야 한다. 산 것과 죽은 것 사이의 정확한 경계선. 그 경계선이 원인을 가리킨다.
세진은 경계선을 이미 그었다. "사용자를 아는 것"과 "사용자를 모르는 것" 사이.
유튜브의 비디오 서빙 파이프라인은 상대적으로 단순하다. 사용자가 영상 ID를 요청하면, CDN이 가장 가까운 엣지 서버에서 캐시된 영상을 돌려준다. 전 세계 3,000개 이상의 엣지 로케이션, 98.5~99%의 캐시 적중률. 이 파이프라인은 "이 사용자가 누구인지" 알 필요가 거의 없다. 영상 ID만 있으면 된다.
하지만 홈 피드를 만드는 과정은 완전히 다르다. "이 사용자가 구독한 채널 목록을 가져오고, 그 채널들의 최신 영상을 가져오고, 시청 기록과 좋아요 데이터를 기반으로 우선순위를 매기고, 이미 본 영상을 필터링하고, 추천 알고리즘의 결과를 섞어서, 최종 피드를 렌더링한다." 이 모든 과정의 중심에 추천 시스템이 있다.
그리고 이 추천 시스템은 YouTube 본체만의 것이 아니다. YouTube Music의 "좋아할 만한 노래", YouTube Kids의 "추천 영상", YouTube TV의 "맞춤 채널" — 전부 같은 추천 인프라 위에서 돌아간다. 하나가 죽으면 전부 빈 화면이 된다.
세진은 노트에 적었다.
추천 시스템의 장애로 인해 콘텐츠가 표시되지 않는
캐스케이드 실패가 발생한 것으로 추정.
가능한 시나리오:
1. 추천 시스템의 장애 (모델 배포 오류 또는 인덱싱 실패)
2. 추천 시스템의 서빙 인프라 과부하 또는 설정 오류
3. 추천 파이프라인이 의존하는 사용자 데이터 저장소의 장애
4. 피드 렌더링 서비스 자체의 배포 실패 (canary gone wrong)
→ 가장 유력: 시나리오 1 또는 2
→ 근거: YouTube, Music, Kids, TV 전부 같은 추천 시스템 공유
→ 추천 불필요 서비스(CDN 재생, 검색)는 전부 정상
→ "추천 의존" 서비스에 한정된 부분 장애 패턴
시계를 봤다. 10:35. 장애 발생 50분. 구글은 여전히 침묵.
세진은 출근 준비를 해야 했다. 가방을 챙기면서 유튜브를 다시 열어봤다. 같은 화면. "문제가 발생했습니다."
하지만 검색으로 들어가서 Computerphile 채널을 찾고, 보려던 DNS 캐시 포이즈닝 영상을 직접 탭하면 — 재생된다. 깨끗하게. CDN의 3,000개 엣지 서버는 오늘도 성실하게 비트를 날라다 주고 있다.
500,000대의 서버로 이루어진 시스템에서, 죽은 것과 산 것의 경계선을 찾았다. 하지만 그 경계선 너머에 정확히 무엇이 깨졌는지는, 구글 내부의 사람만 알 수 있다. 나는 밖에서 증상을 읽고, 공개된 논문과 과거의 패턴을 대조할 수 있을 뿐이다.
집을 나서면서 마지막으로 @TeamYouTube를 확인했다. 여전히 침묵. DownDetector는 30만을 넘겼다.
구글 내부의 워룸에서는 지금 인시던트 커맨더가 소리를 지르고 있을 것이다. SRE 엔지니어들이 Borg 클러스터의 로그를 뒤지고 있을 것이다. 누군가는 Spanner 콘솔에서 쿼리 레이턴시를 확인하고 있을 것이고, 누군가는 최근 배포 이력을 롤백하고 있을 것이다.
세진은 그 장면을 상상하며 현관문을 잠갔다. 과거의 유령들이 머릿속에서 깨어나기 시작했다. 2020년 12월, 인증 시스템이 자기 자신을 죽인 밤. 2025년 10월, DNS가 길을 잃은 오후. 그리고 오늘, 추천 시스템이 멈춘 아침.
전철에서 분석을 이어가야겠다고 생각했다. 과거의 장애들을 나란히 놓으면, 이번 장애의 윤곽이 더 선명해질 것이다.
유튜브는 하루에 10억 시간의 영상이 시청된다. 1시간의 장애는 약 4,100만 시간의 시청이 사라진다는 뜻이다. 지금 이 순간에도 누군가는 좋아하는 채널의 새 영상을 기다리고 있고, 누군가는 라이브 방송을 보지 못하고 있고, 누군가는 유튜브 TV로 NBA 경기를 틀려다가 빈 화면을 보고 있다.
그리고 그 모든 사람들이 보는 화면에는 똑같은 여섯 단어가 적혀 있다.
Something went wrong.
28만 명이 같은 화면을 보았다
죽은 것과 산 것의 경계선
CDN은 살아있었다. 죽은 건 "무엇을 보여줄까"를 결정하는 모든 것이었다.
2편에서 과거의 유령들을 불러낸다.