# 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)

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://injun-woo30000.gitbook.io/growth-log/i-learned/general-1/msa.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
