> For the complete documentation index, see [llms.txt](https://haleyryu.gitbook.io/engineer/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://haleyryu.gitbook.io/engineer/msa/netflix-micro-service-architecture.md).

# Netflix의 MSA 컨셉

Netflix의 Micro Service Architecture 컨셉

[넷플릭스 마이크로 서비스 가이드 - 혼돈의 제왕](https://www.youtube.com/watch?v=OczG5FQIcXw) YouTube 영상을 시청하며 요약한 글입니다.

## 📌 목차

* Microservice 정의&#x20;
* MSA 가 필요한 이유
* MSA 를 위해 필요한 것&#x20;
* Netflix 서비스 구조
* Netflix가 Microservice 를 구현하면서 겪었던 힘들었던 점과 해결법
* 조직의 구조와 아키텍처가 서로 어떻게 연관되어 있는가

## 🌈 Micro Service 정의하기&#x20;

### 1) 어떤게 Micro Service가 아닌가?

![초기의 Netflix Service 구조 ](https://1715430459-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LcsheX9TIMwoBSNygvE%2F-LjpWBqq1u7q_LthzLiw%2F-Ljpa3jiTKT2m_ziyFOq%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202019-07-15%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%209.25.17.png?alt=media\&token=6a8d5565-619b-40dc-8d6b-aeeaa47d8f0e)

#### 위 구조의 문제점&#x20;

* Java Application code base가 Monolithic 이다.
  * 매주 반복적으로 배포되는 애플리케이션의 코드베이스에 모든 사람들이 한꺼번에 붙어서 작업을 해야했다.
  * 구조 변경이 발생할 때마다 이슈가 발생했고, 원인 분석이 어려웠다.
    * Why? \
      코드 변경 -> 구동 -> 원인 분석 -> 변경 일련의 과정들에서 하나의 애플리케이션에 너무 많은 변경이 발생하므로 분석 소요시간이 점점 늘어남.
* Database 는 더 심각한 Monolithic 이다.
  * 거대한 하드웨어에서 동작하는 거대한 1개의 오라클 DB
  * 이 DB가 다운되면 서비스 전체가 다운됨.
  * 트래픽 피크에 대비하기 위해 더 좋은 하드웨어를 계속 찾아다녀야했다.
* 모든게 서로 너무 깊게 연결되어서 변경에 속도가 나지 않는다.

바로 이런 모델이 오늘날 만들면 안되는 서비스의 전형적인 모습입니다.

### 2) 무엇이 Micro Service 인가?

* 2000년대 사용했던 Monolithic 문제의 해결이다.
* "위험을 잘게 쪼개어 내는 것"
* 일종의 추상화&#x20;

### 3) MSA 를 위해 필요한 것&#x20;

* 모듈화
* 서비스에 필요한 데이터를 캡슐화
* 거대한 워크로드를 여러개의 작은 부분으로 분리해서 처리하는 분산의 개념&#x20;
* 탄력성을 가진 가상화 기반 환경&#x20;
* 운영은 최대한 자동화&#x20;

\-

✔️번외) 마틴 파울러가 정의한 Micro Service&#x20;

작은 서비스의 집합으로, 하나의 애플리케이션을 구현하는 것이며, 각각의 작은 서비스들은 자신만의 독립적인 프로세스를 가지고 있고,  가벼운 구조를 가지는데, \
HTTP 기반의 API 를 사용해 서로 연동한다.

## 🌈 MSA 가 필요한 이유&#x20;

* 갑자기 폭증하는 트래픽
* 뜻밖의 DDOS 공격
* 서비스 구동 환경에 변화를 주어야하는 상황

위와 같은 상황들을 처리하는 중 이슈가 발생하여 고객들이 서비스 사용을 할 수 없는 상황이 올 수 있습니다.

## 🌈 Netflix 구조

![](https://1715430459-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LcsheX9TIMwoBSNygvE%2F-LjpfQhvrhmEPWA-DTYW%2F-LjphIHMTTcPNLMu9jwf%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202019-07-15%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%209.56.51.png?alt=media\&token=94a25c1c-8bc1-407a-97c6-8bfdd5edb4e4)

* **Zuul: 프락시 계층**
  * 동적 라우팅 수행
* **NCCP: 레거시 계층**
  * 오래된 옛날 장치를 지원
  * 기본적인 영화 재생 기능 제공&#x20;
* **API**
  * API 게이트웨이를 통해 제공&#x20;
  * 고객이 발생시키는 요청에 대한 응답을 처리하기 위해 다른 많은 서비스들과 통신한다.

#### -

### ✔️ Netflix Service Spec  (2017년 기준)

* 8600만명 사용자
* 190여개 국가
* 10개 이상의 언어로 제공&#x20;
* 1000여개의 장치에서 동작&#x20;

모든 Micro Service 는 AWS 위에서 동작합니다.
