AI VIDEO BRIEFING
넷플릭스의 자바 활용 2026: 스프링 부트, ZGC, 가상 스레드와 AI 마이그레이션
포레스트 나이트가 자바원 2026의 넷플릭스 키노트를 정리한다. 넷플릭스가 3천~4천 개 자바 앱을 어떻게 운영하는지, JDK 25와 ZGC, 가상 스레드, 그리고 스프링 부트 4 마이그레이션을 클로드 코드로 자동화하는 사례까지 짚는다.

핵심 메시지
쉽게 이해하기
넷플릭스는 자바 위에 세워져 있다. 사용자 화면(UI)은 기기에 맞는 언어로 만들지만 백엔드 마이크로서비스는 자바와 스프링 부트다. 서비스는 수백만 사용자·높은 RPS·비관계형 데이터의 스트리밍 영역과, 트래픽은 적지만 관계형 DB를 쓰고 실패 허용도가 낮은 스튜디오 영역으로 나뉜다. 두 영역 모두 GraphQL 요청이 페더레이션 게이트웨이를 거쳐 DGS(도메인 그래프 서비스)로 분산되는 동일한 아키텍처를 쓴다.
발표자는 자바를 쓰는 이유로 런타임 성능·개발 생산성·유지보수성 사이의 최적의 균형을 든다. JVM의 JIT 컴파일러는 사전 컴파일 언어가 못 하는 런타임 최적화를 수행해, 며칠씩 도는 서버 작업에서는 JIT로 컴파일된 자바가 C++을 따라잡거나 앞서기도 한다. 여기서 자바는 같은 JVM에서 도는 코틀린도 포함하며, 코틀린은 보일러플레이트가 적고 널 안전성과 코루틴을 갖췄다.
마이그레이션 이야기가 핵심이다. 스프링 부트 2→3 전환은 javax를 jakarta로 바꾸는 네임스페이스 문제였고, 넷플릭스는 라이브러리의 바이트코드를 다시 쓰는 그래들 플러그인을 만들어(오픈소스로 공개) 해결했다. 코드 변경에는 OpenRewrite를 썼고 2년 만에 완료했다. 그런데 스프링 부트 4 마이그레이션에서는 OpenRewrite를 버리고 클로드 코드 기반 자동화로 방향을 틀었다.
JVM 성능도 다룬다. JDK 8→17 전환만으로 G1 개선 덕에 GC CPU 사용량이 20% 줄었고, JDK 21의 세대별 ZGC는 대부분의 작업을 앱 실행 중 동시 수행해 일시정지를 거의 없앤다. 넷플릭스는 공격적인 IPC 타임아웃 때문에 GC 일시정지가 연쇄 장애로 번지므로 ZGC를 모든 서비스의 기본으로 삼았다. 가상 스레드는 과거 스레드 고정(pinning)으로 교착이 생겼지만 JDK 25에서 고쳐져 재도입 중이다.
마지막으로 넷플릭스는 스프링 AI로 프로덕션 자바 마이크로서비스 안에 에이전트형 워크플로를 구축하고 있다. 발표자는 AI 사용을 단순 LLM 호출, 흐름을 직접 통제하는 에이전트형 워크플로, 자율 에이전트의 세 단계로 분류한다. 넷플릭스는 마이그레이션에는 자율 에이전트(레벨 3)를, 기능 개발에는 단계가 예측 가능한 레벨 2를 쓴다. 스프링 빈 시작 시간 프로파일러 위에 워크플로를 올려, 느린 라이브러리의 소스를 가져와 원인을 진단하고 실행 가능한 권고까지 제시하는 사례가 대표적이다.
주요 인사이트
- 클로드 코드를 헤드리스 배치 작업으로 돌리되, 업그레이드마다 별도 프롬프트와 서브에이전트로 작업을 분리해 컨텍스트 오염을 막고 병렬 처리한다.
- AI 에이전트가 실패했을 때를 대비해 결정론적 도구처럼 추론 흔적을 남겨, 사람이 어디서 왜 실패했는지 추적하고 고칠 수 있게 했다.
- 가상 스레드와 구조적 동시성에서는 thread local 값이 새 스레드로 복사되지 않아 보안·추적 컨텍스트가 조용히 사라지는 함정이 있으며, JDK 25의 scoped values는 아직 실무 이전 경로가 마땅치 않다.
- 넷플릭스는 기능 개발에는 흐름을 직접 통제하는 에이전트형 워크플로(레벨 2)를, 마이그레이션에는 자율 에이전트(레벨 3)를 구분해 사용한다.
자주 묻는 질문
넷플릭스는 왜 스프링 부트 4 마이그레이션에 클로드 코드를 쓰나?
2년간 OpenRewrite 같은 결정론적 도구를 썼지만 다양한 예외 사례를 모두 규칙으로 작성하기 어려웠다. 발표자에 따르면 AI 에이전트가 이런 예외 처리에 훨씬 유연하고, 규칙을 작성하는 비용도 더 낮았다고 한다.
ZGC를 모든 서비스에 적용한 이유는?
넷플릭스는 IPC 타임아웃이 매우 공격적이라 GC 일시정지 동안의 요청이 실패·재시도되며 부하가 연쇄적으로 번진다. 세대별 ZGC는 대부분의 작업을 앱 실행 중 동시에 수행해 일시정지를 사실상 0으로 만든다.
가상 스레드 도입 시 주의할 점은?
구조적 동시성에서 fork로 새 가상 스레드를 만들면 thread local 값이 자동 복사되지 않아 보안·추적·트랜잭션 컨텍스트가 비어버린다. 임시 해법으로 커스텀 스레드 팩토리와 Micrometer Context Propagation을 이용해 thread local을 수동 복사할 수 있다.
원문과 출처
이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.
YouTube 원본 영상 보기 ↗