Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

MSA(MicroService Architecture) 본문

IT/Computer Science

MSA(MicroService Architecture)

빌드이너프 2022. 12. 29. 00:28

MSA(MicroService Architecture)

  • 애플리케이션을 느슨히 결합된 서비스의 모임으로 구조화하는 서비스 지향 아키텍처(SOA) 스타일의 일종인 소프트웨어 개발 기법
  • 한 가지 일만 수행하는 작은 애플리케이션

 

MSA 등장배경

  • 모든 시스템의 구성요소가 한 프로젝트에 통합되어 있는 monolithic architecture(모놀리식 아키텍처)의 한계점을 극복하고자 등장

 

MSA 특징

  • monolithic architecture의 문제를 해결함(모든 기능을 수행하는 애플리케이션을 구축)
  • SRP(Single Responsibility Principle) 단일 책임원칙을 중요하게 봄
  • 큰 문제들을 작은 문제로 분해 해결 -> 작게 나뉘어진 서비스가 독립적으로 역할 수행 -> 서비스간 같은 언어로 개발될 필요 없음
  • 서비스 실패 시 ROLLBACK 매커니즘 -> 이전 버전으로 쉽게 돌아갈 수 있음
  • 지속적인 통합(CI[continuous integration]) / 지속적인 배포(CD[continuous delivery]) / 자동화된 테스트가 필수적임

 

MSA 장점

  • 분산형 개발: 개발 주기가 단축, 유연한 배포 가능 -> 출시 기간 단축
  • 서비스가 독립적: 다른 서비스에게 영향을 주지 않음
  • 서비스별 기술 도입 및 확장 자유로움
  • 애플리케이션의 모듈화: 규모가 작기 때문에 우려사항이 줄어듦 -> 손쉬운 배포
  • 다중 언어 지원(Polyglot) API를 사용 -> 향상된 개방성
  • 하나의 애플리케이션을 여러 부분으로 분할했기 때문에 각 서비스 업데이트 및 개선 용이함

 

MSA 단점

  • 각 서비스들은 API를 통해 통신 -> 네트워크 통신에 의한 오버헤드 발생
  • 서비스별로 로그가 생성 -> 중앙 로그 모니터링이 존재하지 않음
  • 하나의 프로젝트에 수많은 서비스들이 존재 -> 모든 서비스 모니터링 오버헤드 증가
  • 하나의 서비스에서 다른 서비스를 호출 -> 장애 발생 시 경로 및 장애 추적이 힘듦
  • 서비스가 분산 -> monolithic architecture 에 비해 상대적으로 많이 복잡함

 

monolithic architecture(모놀리식 아키텍처)

  • 웹 프로그램을 개발하기 위해 모듈별로 개발 -> 개발 완료된 웹 애플리케이션을 하나의 결과물로 패키징하여 배포되는 형태
  • 하나의 서비스 또는 애플리케이션이 하나의 거대한 아키텍처를 가질 때를 monolithic architecture라고 함
  • 내부 요소 간의 의존성이 강함 -> 구조적인 결합이 강력하게 유지됨
  • 하나의 강한 결합 구조를 지님 -> 통일성
  • 비지니스 로직이 서비스에 최적화된 코드를 만들어내는데 집중 -> 복합적인 예외를 만들 수 있는 위험성 내포

 

monolithic architecture 장점

- 심플함: 개발, 빌드, 배포, 테스트가 용이함

  • 개발 초기 단순한 아키텍처 구조와 개발에 용이함
  • 서비스간 개발되어있는 환경이 같음 -> 단순함
  • 고가용성 서버 환경 구축 가능
  • End-to-End 테스트 용이함

 

monolithic architecture 단점

- 지속적인 통합(CI[continuous integration]), 지속적인 배포(CD[continuous delivery])가 어려움
- 모든 모듈이 하나의 프로세스에서 동작 -> 하나의 모듈이 수정되어, 서버를 올렸다가 내렸다 할 경우 다른 모듈도 그 동안 작동 불가능

  • 프로젝트 규모가 커짐에 따라 애플리케이션 구동시간이 늘어나고 빌드, 배포 시간 길어짐
  • 작은 수정사항이 있어도 전체를 다시 빌드하고 배포해야 함
  • 유지보수 어려움
  • 일부분의 오류가 전체적으로 영향을 미침
  • 기능별로 알맞는 기술, 언어, 프레임워크 선택하기 어려움

 

 

서비스 지향 아키텍처(SOA)

  • 서비스라는 소프트웨어 구성 요소를 사용해 비즈니스 애플리케이션을 생성하는 소프트웨어 개발 방식

End-to-End 테스트

  • 사용자 중심으로 처음부터 끝까지 어플리케이션 흐름을 테스트하는 소프트웨어 테스트 방법 중 하나

 

 

 

참고사이트

AWS 서비스 지향 아키텍처 https://aws.amazon.com/ko/what-is/service-oriented-architecture/

레드헷 마이크로서비스 https://www.redhat.com/ko/topics/microservices/what-are-microservices