반응형

이 글은 https://microservices.io/patterns/monolithic.html 를 참고하여 작성되었습니다.

 

1. 어플리케이션을 위한 개발 팀이 있다.

2. 새로운 팀 멤버는 빠르게 적응 해야한다.

3. 어플리케이션은 이해하기 쉽고, 수정하기 쉬워야 한다.

4. 당신은 지속적 배포(continuous deployment)를 행하고 싶다.

5. 확장성(scalability)과 가용성(availability)을 위하여 여러개의 어플리케이션 인스턴스를 여러대의 머신에 띄우고 싶다.

6. 신기술들(framework, programming language)을 사용하여 그 장점을 취하고 싶다.

 

Solution

위와 같은 사항들이 강제 될 때 모놀리식 아키텍처를 택 할 수 있고, 아래와 같은 솔루션이 하나의 방법이 될 수 있다.

- 단일 자바 WAR 파일(a single Java WAR file)

- 단일 디렉토리 계층 구조를 가지는 Rails 또는  NodeJS 코드(a single ditectory hierarchy of Rails or NodeJS code)

 

Example

이커머스 어플리케이션을 개발한다고 가정을 해보자. 고객의 주문을 받고, 재고를 확인하고, 결제와 배송도 가능해야한다.

어플리케이션은 StoreFront UI(Frontend UI)와 재고, 주문, 결제, 배송을 처리하기 위한 서버(Backend service)로 이루어질 것이다.

그리고 어플리케이션은 단일 모놀리식 아키텍처로 배포된다. 예를들면 Java Web application을 WAR형태로 Tomcat 과 같은 컨테이너에서 실행된다. Rails나 Node 의 경우에는 단일 디렉토리 구조로 배포가 되고, Nginx와 함께 실행 될 수도 있다.

가용성을 위하여 여러개의 서버 인스턴스가 실행되고, Load Balancer를 이용하여 서비스가 될 수 있다.

 

Resulting context

모놀리식 아키텍처가 가지는 아래와 같은 장점을 가진다.

  • 개발이 쉽다. easy to develop
  • 배포가 쉽다. easy to deploy
  • 스캐일링이 쉽다. easy to scale

하지만 어플리케이션과 팀의 규모가 커질수록 점점 더 중요해지는 단점이 존재한다.

 

  • 유지보수가 어려워진다.
  • IDE에 부하가 심해진다.
  • 웹 컨테이너(ex. Tomcat)에 부하가 심해진다.
  • 지속적인 개발이 어려워진다.
  • 스케일링이 어려워 질 수 있다.(장점에서 말하는 스케일링과는 범위가 다르다.)
  • 스케일링 개발의 걸림돌이 된다.
  • 기술스택을 이해하기 위해서는 장기적인 노력이 필요하다.
반응형

+ Recent posts