> For the complete documentation index, see [llms.txt](https://injun-woo30000.gitbook.io/growth-log/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://injun-woo30000.gitbook.io/growth-log/i-learned/general-1/msa.md).

# MSA란?

## **MSA란?**

* 단일 애플리케이션을 작은 서비스 suite로 개발하는 방법.
* 각각 자체 프로세스에서 실행되고 가벼운 연결방식, 대개는 HTTP 기반 API와 통신한다.
* 비즈니스 기능을 중심으로 구축되며 완전 자동화 된 배포 머신을 통해 독립적으로 배포할 수 있다.
* 최소한의 중앙 집중식 관리가 있으며, 다른 프로그래밍 언어로 작성되고 다른 데이터 저장 기술을 사용할 수 있다.

### 장점

* 장애 격리와 복구가 쉽다. 장애난 서비스만 장애나니까.
* 비용 효율적으로 증설이 가능하다. 증설이 필요한 서비스만 증설시키면 되기 때문이다.
* 서비스 개선 속도가 증가한다. 빠른 배포가 가능하다.
* 생산성 향상이 될 수 있다. 코드양이 적어 쉽게 수정이 가능하다.
* 신기술 도입이 쉽다.
* Polyglot을 적용할 수 있다. 서비스에 최적화된 개발 언어와 데이터베이스를 선택하기 쉽다.

### 고려해야할 것

* MSA에 적합한 서비스인가?
  * 빠르고 잦은 배포를 필요로 하는가?
  * 성능에 민감한 서비스인가? 마이크로서비스면 잦은 통신이 필요하므로 성능 이슈가 있을 수 있다.
  * 분산 트랜잭션이 있는 서비스인가? 한번에 트랜잭션을 쓸 수가 없다.
* 데이터의 중복성을 허용해야한다.
* 배포 및 릴리즈를 자동화해야한다. 서비스가 많다보니 자동화가 되지 않으면 운영에 굉장한 부담이 발생할 수 있다.
* MSA 서비스에 맞는 팀이 운영되어야 한다.

![image](https://user-images.githubusercontent.com/54612343/114047621-c7523e80-98c4-11eb-8a00-1eb651846609.png)

NHN 페이코의 도메인별 MSA 구축 사례.

![image](https://user-images.githubusercontent.com/54612343/114047876-fd8fbe00-98c4-11eb-98b9-8e64f1945a80.png)

소스 중복, 배포주기, 트래픽 유입, 분산트랜잭션 줄여야하는 부분들 고려해서 도메인 다시 결합했다고함.
