본문 바로가기

IT공부/Software design

[Architecture] Monolithic / SOA / MSA

728x90

https://microservices.io/patterns/monolithic.html

 

Microservices Pattern: Monolithic Architecture pattern

The monolithic architecture structures an application as a single deployable/executable component

microservices.io

 

 

Software Architecture 란 

소프트웨어 아키텍처란 소프트웨어 시스템의 구조와 구성 요소, 그리고 구성 요소 간의 상호작용 등을 정의한 것이다.

즉, 소프트웨어 시스템의 설계와 구현에 있어서 가장 기본이 되는 개념 중 하나이다.

 

 

 

 

Pattern: Monolithic Architecture

Design an architecture that structures the application as a single deployable/executable component that uses a single database.

The component contains all of the application’s subdomains. Since there’s a single component, all operations are local.

 

 

예시

 

 

장점
- 개발과 배포가 단순하다. 하나의 어플리케이션으로 모든 기능을 관리하기 때문에, 개발과 배포가 단순하고 간편하다.
- 모든 기능이 하나의 어플리케이션에 포함되어 있기 때문에, 코드를 이해하고 관리하기 쉽다.
- 데이터베이스에 대한 직접적인 접근이 가능하다. 데이터베이스를 공유하므로, 하나의 데이터베이스에서 모든 데이터를 관리할 수 있다.

단점
- 대규모 애플리케이션에는 유지보수가 어렵다. 코드가 하나의 베이스에 모두 포함되어 있어 모든 변경사항이 전체 시스템에 영향을 미치게 된다.
- 확장성이 떨어진다. 서버 자원을 효율적으로 사용하기 어렵다. 새로운 요구사항이 추가될 때, 전체 어플리케이션을 재배포해야 한다.
- 성능 문제가 발생할 수 있다. 모든 요청을 하나의 어플리케이션에서 처리해야 하기 때문에, 요청이 많아지면 서버에 부하가 걸리게 된다.

Monolithic 아키텍쳐는 작은 규모의 프로젝트에서는 유용할 수 있지만, 큰 규모의 프로젝트에서는 유지보수와 확장성 등의 문제가 발생할 수 있으며, 이러한 문제를 해결하기 위해서는 다른 아키텍쳐 패턴을 고려해야한다.

 

 

 

 

 

https://en.wikipedia.org/wiki/Service-oriented_architecture

 

Service-oriented architecture - Wikipedia

From Wikipedia, the free encyclopedia Architectural pattern in software design In software engineering, service-oriented architecture (SOA) is an architectural style that focuses on discrete services instead of a monolithic design.[1] By consequence, it is

en.wikipedia.org

Pattern: SOA (Service-Oriented Architecture)

 

서비스 지향 아키텍처

비즈니스 기능을 독립적인 서비스로 분리하여 이러한 서비스를 조합하여 비즈니스 로직을 실행하는 아키텍처이다.

이러한 서비스는 표준 인터페이스를 사용하여 상호 작용하며, 이를 통해 재사용성과 유연성을 높일 수 있다.

 

 

SOA 아키텍쳐는 공통된 서비스를 ESB에 모아서 사업 측면에서 공통 기능의 집합을 통해 서비스를 제공한다

 

ESB (Enterprise Service Bus)는 SOA에서 서비스 간의 연결과 관리를 담당하는 미들웨어이다.

ESB는 서비스의 노출, 서비스 간의 연결, 프로토콜 변환, 데이터 변환, 보안 등을 처리할 수 있다.

이를 사용하면 복잡한 서비스 간의 통신을 관리하고, 다양한 서비스를 연결하여 하나의 서비스로 제공할 수 있다.

 

결국 중앙 집중식 아키텍처가 되기 때문에 ESB가 장악하고 있는 서비스에 장애가 발생하면 전체 시스템에 영향을 미칠 수 있다.

또한, ESB를 도입하는 비용과 관리 비용이 추가로 발생할 수 있다.

 

 

장점
- 재사용성: 독립적인 서비스로 구성되어 있기 때문에 필요한 서비스를 선택적으로 재사용 가능하다.
- 유연성: 서비스 간의 결합도가 낮기 때문에 변경이 용이하며, 비즈니스 로직 변경에 대한 영향도가 적다.
- 상호운용성: 표준 인터페이스를 사용하므로 다른 플랫폼이나 언어로 구현된 서비스와도 상호 운용이 가능하다.
- 확장성: 서비스 단위로 스케일 업 또는 스케일 아웃이 가능하다.

 

단점
- 복잡성: 서비스 간의 통신과 관리를 위한 인프라 구축이 복잡하다.
- 성능: 다른 아키텍처에 비해 성능이 떨어질 수 있다.
- 보안: 서비스 간의 통신이 많아져서 보안 이슈가 발생할 수 있다.

또한 균일한 테스트 프레임워크가 없다는 것 또한 단점이다.

 

 

결국 하나의 DB를 사용하고, 끊어질 수 없는 의존성이 존재하게 된다,

이러한 특성 때문에 비즈니스에서 실 성공 사례가 매우 드물다.

 

 

 

Pattern: Microservice Architecture

 

Design an architecture that structures the application as a set of independently deployable, loosely coupled, components, a.k.a. services. Each service consists of one or more subdomains.

Some operations will be local (implemented by a single service), while others will be distributed across multiple services. A distributed operation is implemented using either synchronously using a protocol such as HTTP/REST or asynchronously using a message broker, such as Apache Kafka.

 

 

https://eventuate.io/exampleapps.html

 

Eventuate example applications

Maintain data consistency using sagas Implement commands that update data in multiple microservices by using Sagas, which are sequences of local transactions coordinated using messages

eventuate.io

 

MSA (Microservices Architecture)는 소프트웨어 시스템을 작고 독립적인 여러 개의 서비스로 분해하는 아키텍처 스타일이다.

각 서비스는 자체 데이터 스토어, 비즈니스 로직, 데이터 처리, 사용자 인터페이스 등을 가지며, 각 서비스는 다른 서비스와 독립적으로 배포, 확장 및 관리할 수 있습니다.

 

내가 쓴 글

https://delightpip.tistory.com/174

 

 

728x90

'IT공부 > Software design' 카테고리의 다른 글

[Microservice] Service Mesh  (0) 2023.03.27
[Microservice] Architecture  (0) 2023.03.27