본문 바로가기

[Reactive Streams] Netflix 에서 RxJava 를 도입한 이유

@whateverU2025. 4. 12. 22:45
반응형

넷플릭스에서 2013 년 당시 급격하게 늘어나는 API 를 처리하기 위해 어떤 고민이 있었고 어떻게 해결 했는지 예전 블로그 글들을 토대로 확인해 보자

Embracing the Differences : Inside the Netflix API Redesign

https://netflixtechblog.com/embracing-the-differences-inside-the-netflix-api-redesign-15fd8b3dc49d

 

Embracing the Differences : Inside the Netflix API Redesign

We have moved to a new, fully customizable API

netflixtechblog.com

2013 년 당시 넷플릭스는 800개 이상의 디바이스들로 부터 요청을 받는 서비스 였고 당시 넷플리스의 백엔드 API는 OSFA(One Size Fits All) API로 클라이언트의 스팩을 고려되지 않은채 제공되고 있었음. 

각각의 디바이스 들은 메모리 용량 부터 화면 사이즈 등등 많은 부분이 달랐지만 이는 고려되지 않았음. 

While effective, the problem with the OSFA approach is that its emphasis is to make it convenient for the API provider, not the API consumer.

 

아래는 OSFA 방식일 때의 그림. 각각의 API 들은 디바이스의 상태들을 고려하지 않계 설계됨

이를 개선하기 위해 아래 처럼 디바이스 전용 ENDPOINT 를 만들고 해당 서버에서 여러 요청을 보내는 형태로 변경함.

 

기존 방식의 (OSFA) 네트워크 영역 Client Code와 Server Code 는 2개의 영역으로 나누어짐.

변경된 방식에서는 기존 클라이언트  코드를 디바이스에서 처리하고 서버에서 데이터만 받았다면 
새로운 방식에서는 디바이스에서 보낸 요청이 클라이언트 어댑터를 통해 처리되고 서버가 UI에 맞는 콘텐츠 처리를 대부분 맡게 됨.

 

이렇게 되면 얻게되는 이점과? 단점이 뭐냐?

  • 클라이언트에서는 디바이스 환경별 API 를 커스텀하게 만들어서 사용할 수 있음.
  • 어댑터 영역의 서버가 디바이스 타입(800+) 많아 질 수 있음. 하지만 좀 더 유연하게 개발 가능
  • 각 UI 팀에서 백엔드 영역의 서비스를 만져야 했으므로 서버측 기술등을 배워야 했음(다들 고수들이라 이건 괜찮았다고 함 ㅎㅎ ).
  • 각 디바이스에서 병렬로 처리되던 API 들이 서버단(JAVA-API 영역을 호출 하는 부분)으로 넘어오니 Java에서 병렬 처리하는게 고민이 되지 않았을까?

Optimizing the Netflix API

https://netflixtechblog.com/optimizing-the-netflix-api-5c9ac715cf19

 

Optimizing the Netflix API

how we redesigned our API to help UI teams meet their needs

netflixtechblog.com

여러 디바이스에서 동시에 여러번 보내던 요청을 아래처럼 하나의 API 로 모으는 작업을 함. 당연하게도 Client(Device) 에서 병렬로 API 를 요청하던 부분을 하나의 요청을 받아서 처리 하였으므로 서버에서도 동일하게 병렬 처리를 해야함 또한 같은 네트워크 내에서 호출 하니 조금 더 성능상 이점을 기대할 수 있었음.

This must be achieved without each engineer implementing an endpoint needing to become an expert in low-level threading, synchronization, thread-safety, concurrent data structures, non-blocking IO and other such concerns.

여기에서 중요하게 생각한 부분은 작업자들이 Thread 의 동기화 병행 처리 스레드 블락킹 등의 병렬 처리에 있어서 큰 염려가 없이 작업할 수 있게 하는 것을 중요하게 생각함

또한 Embracing the Differences 문서를 보면 이를 담당했던 팀은 PS3 UI team (각각의 디자인 UI 팀) 이라서 사용하는데 문제 없게 추상화 하는데 더 신경쓰지 않았을까?

 

전체적인 아키텍처

전체적인 아키텍처UI 팀에서 자신들이 원하는 Endpoint 서비스를 만들고 배포할 수 있음.
또한 JVM 기반 동작하는 언어들을 지원해서 [4], [5] Reactive 한 비동기 모델이 필요 했음 = 결국 요것 때문에 RxJava가 탄생함. 

 

RX JAVA

https://netflixtechblog.com/reactive-programming-in-the-netflix-api-with-rxjava-7811c3a1496a

반응형
whateverU
@whateverU :: whateverU

sang12.co.kr https://github.com/ChoiSangIl

공감하셨다면 ❤️ 구독도 환영합니다! 🤗

목차