마이크로서비스 아키텍처(MSA): 두 판 사이의 차이

기술노트
(CS 용어 정리 - 마이크로서비스 아키텍처(MSA) 추가)
 
편집 요약 없음
1번째 줄: 1번째 줄:
== 마이크로서비스 아키텍처(MSA) ==
<nowiki>== 마이크로서비스 아키텍처(MSA, Microservices Architecture)란? ==</nowiki>


<br>
<nowiki>'''마이크로서비스 아키텍처(MSA, Microservices Architecture)'''</nowiki>는


<syntaxhighlight>
하나의 큰 애플리케이션을 '''작은 단위의 독립적인 서비스'''로 나누어 개발·운영하는 소프트웨어 설계 방식입니다.
MSA는 소프트웨어 개발 기법 중 하나로, 어플리케이션 단위를 '목적'으로 나누는 것이 핵심
</syntaxhighlight>


<br>
* 서비스별로 <nowiki>'''독립 배포·확장·관리'''가 가능하며, 서비스끼리는 '''API'''</nowiki>를 통해 통신합니다.
* 넷플릭스, 아마존, 쿠팡과 같은 대규모 플랫폼 기업들이 적극적으로 채택하고 있습니다.


=== Monolithic vs MSA  ===
----=== 🔧 MSA의 특징 ===


MSA가 도입되기 전, Monolithic 아키텍처 방식으로 개발이 이루어졌다. Monolithic의 사전적 정의에 맞게 '한 덩어리'에 해당하는 구조로 이루어져 있다. 모든 기능을 하나의 어플리케이션에서 비즈니스 로직을 구성해 운영한다. 따라서 개발을 하거나 환경설정에 있어서 간단한 장점이 있어 작은 사이즈의 프로젝트에서는 유리하지만, 시스템이 점점 확장되거나 큰 프로젝트에서는 단점들이 존재한다.
* '''독립적인 작은 서비스 (Independent Services)'''  : 서비스별로 개별 팀이 책임지고, 독립적인 프로세스/컨테이너에서 동작합니다.
* '''API 기반 통신 (Communication via API)'''  : 서비스끼리 HTTP/REST, gRPC, 메시지 큐(카프카, RabbitMQ 등)로 상호작용합니다.
* '''분산 데이터 관리 (Decentralized Data Management)'''  : 서비스별로 별도의 데이터베이스를 관리하여 데이터가 독립적입니다.
* '''자동화 및 DevOps 문화 필수 (Automation & DevOps)'''  : 빠른 배포와 무중단 업데이트를 위해 CI/CD 및 자동화된 배포 환경 구축이 필수입니다.
* '''장애 격리 (Fault Isolation)'''  : 특정 서비스 장애 시 전체 시스템으로 전파되지 않고 해당 서비스만 격리 가능합니다.


* 빌드/테스트 시간의 증가 : 하나를 수정해도 시스템 전체를 빌드해야 함. 즉, 유지보수가 힘들다
----=== 📊 MSA vs 모놀리식 아키텍처 ===
* 작은 문제가 시스템 전체에 문제를 일으킴 : 만약 하나의 서비스 부분에 트래픽 문제로 서버가 다운되면, 모든 서비스 이용이 불가능할 것이다.
* 확장성에 불리 : 서비스 마다 이용률이 다를 수 있다. 하나의 서비스를 확장하기 위해 전체 프로젝트를 확장해야 한다.


<br>
<nowiki>{| class="wikitable"</nowiki>
{| class="wikitable"
!<nowiki>! 구분 !! 모놀리식 (Monolithic) !! MSA (Microservices)</nowiki>
|-
|애플리케이션 구조
|-
| -
|-
|배포 방식
|-
| -
|-
|장애 영향 범위
|-
| -
|-
|기술 스택
|-
| -
|-
|확장성
|-
| }
|}
----=== 📦 MSA 예시 구조 ===


MSA는 좀 더 세분화 시킨 아키텍처라고 말할 수 있다. 한꺼번에 비즈니스 로직을 구성하던 Monolithic 방식과는 다르게 기능(목적)별로 컴포넌트를 나누고 조합할 수 있도록 구축한다.
<nowiki>[[파일:MSA-architecture-example.png|600px|가운데|MSA 구조 예시]]</nowiki>


<img src="https://www.redhat.com/cms/managed-files/monolithic-vs-microservices.png">
<nowiki>:</nowiki> 각 서비스는 독립 배포, 독립 데이터베이스를 가지며 API로만 통신합니다.
----=== ✅ MSA가 적합한 경우 ===


<img src="https://miro.medium.com/max/1250/1*V_mvV0mbfcBoCcirDgsvZw.png">
* 서비스의 <nowiki>'''빠른 개발과 빈번한 변경'''</nowiki>이 필요할 때
* 서비스별로 독립된 팀 운영이 필요할 때
* <nowiki>'''대규모 트래픽'''을 처리하기 위해 '''수평 확장성'''</nowiki>이 필수적일 때


<br>
<nowiki>=== ⚠️ MSA가 부적합한 경우 ===</nowiki>


MSA에서 각 컴포넌트는 API를 통해 다른 서비스와 통신을 하는데, 모든 서비스는 각각 독립된 서버로 운영하고 배포하기 때문에 서로 의존성이 없다. 하나의 서비스에 문제가 생겨도 다른 서비스에는 영향을 끼치지 않으며, 서비스 별로 부분적인 확장이 가능한 장점이 있다.
* 소규모 서비스로 관리 복잡성이 과도할 때
* 조직의 DevOps 역량과 경험이 부족할 때


<img src="http://clipsoft.co.kr/wp/wp-content/uploads/2020/06/leh_6.png">
----=== 🔑 실전 운영 시 고려할 사항 ===


, 서비스 별로 개발팀이 꾸려지면 다른 팀과 의존없이 팀 내에서 피드백을 빠르게 할 수 있고, 비교적 유연하게 운영이 가능할 것이다.
* 서비스 경계는 반드시 <nowiki>'''도메인 중심'''</nowiki>으로 명확히 나눕니다.
* 서비스 간 통신을 위한 <nowiki>'''API 게이트웨이'''와 '''서비스 디스커버리'''</nowiki>를 반드시 구축합니다.
* 로그 관리와 모니터링 시스템 구축은 필수입니다. (Elastic Stack, Prometheus 등)
* 서비스 간 데이터 일관성은 <nowiki>'''</nowiki>Event-Driven 설계<nowiki>'''</nowiki>나 <nowiki>'''</nowiki>Saga 패턴<nowiki>'''</nowiki>으로 해결합니다.


좋은 점만 있지는 않다. MSA는 서비스 별로 호출할 때 API로 통신하므로 속도가 느리다. 그리고 서비스 별로 통신에 맞는 데이터로 맞추는 과정이 필요하기도 하다. Monolithic 방식은 하나의 프로세스 내에서 진행되기 때문에 속도 면에서는 MSA보다 훨씬 빠를 것이다. 또한, MSA는 DB 또한 개별적으로 운영되기 때문에 트랜잭션으로 묶기 힘든 점도 있다.
----=== 💡 개발자가 꼭 알아야 할 MSA 요약 ===


<br>
* MSA는 서비스 단위로 독립된 작은 서비스 아키텍처입니다.
* 서비스끼리 API로 소통하며, 독립 배포 및 확장 가능합니다.
* 운영 복잡도가 높아 자동화, DevOps 역량이 필수입니다.
* 도메인 중심 설계, API 게이트웨이, 서비스 디스커버리 구축이 필수입니다.


따라서, 서비스별로 분리를 하면서 얻을 수 있는 장점도 있지만, 그만큼 체계적으로 준비돼 있지 않으면 MSA로 인해 오히려 프로젝트 성능이 떨어질 수도 있다는 점을 알고있어야 한다. 정답이 정해져 있는 것이 아니라, 프로젝트 목적, 현재 상황에 맞는 아키텍처 방식이 무엇인지 설계할 때부터 잘 고민해서 선택하자.
----== 📚 참고 자료 ==


<br>
* [<nowiki/>[[/technote.wiki/|https://technote.wiki]] technote.wiki - 마이크로서비스 아키텍처]
* [<nowiki/>[[/d2.naver.com/helloworld/4769021|https://d2.naver.com/helloworld/4769021]] 네이버 D2 - MSA 가이드]
* [<nowiki/>[[/martinfowler.com/articles/microservices.html|https://martinfowler.com/articles/microservices.html]] Martin Fowler - Microservices]


<br>
----


===== [참고 자료] =====
== 추가적인 질문이나 수정 요청은 <nowiki>[[토론:MSA]]</nowiki> 문서에 남겨주세요! 😊 ==
 
* [링크](https://medium.com/@shaul1991/%EC%B4%88%EB%B3%B4%EA%B0%9C%EB%B0%9C%EC%9E%90-%EC%9D%BC%EC%A7%80-%EB%8C%80%EC%84%B8-msa-%EB%84%88-%EB%AD%90%EB%8B%88-efba5cfafdeb)
* [링크](http://clipsoft.co.kr/wp/blog/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98msa-%EA%B0%9C%EB%85%90/)

2025년 7월 4일 (금) 12:17 판

== ⚡ 마이크로서비스 아키텍처(MSA, Microservices Architecture)란? ==

'''마이크로서비스 아키텍처(MSA, Microservices Architecture)'''는

하나의 큰 애플리케이션을 작은 단위의 독립적인 서비스로 나누어 개발·운영하는 소프트웨어 설계 방식입니다.

  • 서비스별로 '''독립 배포·확장·관리'''가 가능하며, 서비스끼리는 '''API'''를 통해 통신합니다.
  • 넷플릭스, 아마존, 쿠팡과 같은 대규모 플랫폼 기업들이 적극적으로 채택하고 있습니다.

=== 🔧 MSA의 특징 ===

  • 독립적인 작은 서비스 (Independent Services)  : 서비스별로 개별 팀이 책임지고, 독립적인 프로세스/컨테이너에서 동작합니다.
  • API 기반 통신 (Communication via API)  : 서비스끼리 HTTP/REST, gRPC, 메시지 큐(카프카, RabbitMQ 등)로 상호작용합니다.
  • 분산 데이터 관리 (Decentralized Data Management)  : 서비스별로 별도의 데이터베이스를 관리하여 데이터가 독립적입니다.
  • 자동화 및 DevOps 문화 필수 (Automation & DevOps)  : 빠른 배포와 무중단 업데이트를 위해 CI/CD 및 자동화된 배포 환경 구축이 필수입니다.
  • 장애 격리 (Fault Isolation)  : 특정 서비스 장애 시 전체 시스템으로 전파되지 않고 해당 서비스만 격리 가능합니다.

=== 📊 MSA vs 모놀리식 아키텍처 ===

{| class="wikitable"

! 구분 !! 모놀리식 (Monolithic) !! MSA (Microservices)
애플리케이션 구조
-
배포 방식
-
장애 영향 범위
-
기술 스택
-
확장성
}

=== 📦 MSA 예시 구조 ===

[[파일:MSA-architecture-example.png|600px|가운데|MSA 구조 예시]]

: 각 서비스는 독립 배포, 독립 데이터베이스를 가지며 API로만 통신합니다.


=== ✅ MSA가 적합한 경우 ===

  • 서비스의 '''빠른 개발과 빈번한 변경'''이 필요할 때
  • 서비스별로 독립된 팀 운영이 필요할 때
  • '''대규모 트래픽'''을 처리하기 위해 '''수평 확장성'''이 필수적일 때

=== ⚠️ MSA가 부적합한 경우 ===

  • 소규모 서비스로 관리 복잡성이 과도할 때
  • 조직의 DevOps 역량과 경험이 부족할 때

=== 🔑 실전 운영 시 고려할 사항 ===

  • 서비스 경계는 반드시 '''도메인 중심'''으로 명확히 나눕니다.
  • 서비스 간 통신을 위한 '''API 게이트웨이'''와 '''서비스 디스커버리'''를 반드시 구축합니다.
  • 로그 관리와 모니터링 시스템 구축은 필수입니다. (Elastic Stack, Prometheus 등)
  • 서비스 간 데이터 일관성은 '''Event-Driven 설계'''나 '''Saga 패턴'''으로 해결합니다.

=== 💡 개발자가 꼭 알아야 할 MSA 요약 ===

  • MSA는 서비스 단위로 독립된 작은 서비스 아키텍처입니다.
  • 서비스끼리 API로 소통하며, 독립 배포 및 확장 가능합니다.
  • 운영 복잡도가 높아 자동화, DevOps 역량이 필수입니다.
  • 도메인 중심 설계, API 게이트웨이, 서비스 디스커버리 구축이 필수입니다.

== 📚 참고 자료 ==


추가적인 질문이나 수정 요청은 [[토론:MSA]] 문서에 남겨주세요! 😊