모놀리틱 아키텍처 (크리스 리차드슨)

This a translation of an article Monolithic Architecture originally written and copyrighted by Chris Richardson.
이글은 Chris Richardson가 작성하였으며, 저작권을 가지고 있는 Monolithic Architecture 글의 번역본입니다.

정보

맥락 (Context)

서버 사이드 기업용 애플리케이션 개발을 하고 있다고 해보자. 데스크탑 브라우저와 모바일 브라우저, 그리고 네이티브 모바일 애플리케이션을 포함해 여러 가지 다양한 클라이언트 지원해야만 한다. 또한, 애플리케이션은 3rd 파티가 사용할 수 있도록 API를 노출해야 할 수도 있다. 또한 웹서비스나 메시지 브로커를 통해서 다른 애플리케이션 서비스와 통합해야 할 수도 있다. 애플리케이션은 비즈니스 로직을 실행하고, 데이터베이스에 접근하며, 다른 시스템들과 메시지를 주고받아 HTML/JSON/XML 응답을 돌려주는 것으로 요청(HTTP 요청과 메시지)을 처리한다

애플리케이션은 계층형 아키텍처나 6방형(hexagonal) 아키텍처를 갖거나 다양한 유형의 컴포넌트로 구성되어 있다.

이들은 애플리케이션의 다양한 기능적인 측면에 상응하는 논리적인 컴포넌트이다.

문제 (Problem)

애플리케이션의 배포 아키텍처는 어떤 것인가?

영향도 (Forces)

해결방법 (Solution)

모놀리틱 아키텍처를 사용해서 애플리케이션을 구축한다. 예를 들면,

예시

고객에서 주문까지, 재고(inventory)를 확인하고, 신용결재(credit)가 가능하며, 이를 출하(ships)할 수 있는 전자 상거래 애플리케이션을 구축한다고 상상해보자. 애플리케이션은 신용거래를 확인하고, 재고를 관리하고, 주문을 출하하는 백 엔드 서비스와 함께 사용자 인터페이스를 구현하는 StoreFrontUI를 포함하는 각각 컴포넌트로 구성한다.

애플리케이션은 단일 모놀리틱 애플리케이션으로 배포된다. 예를 들어, 톰캣과 같은 웹 컨테이너에서 실행되는 하나의 WAR 파일로 구성 된 자바 웹 애플리케이션이거나 Apache/Nginx나 톰캣의 JRuby에서 돌아가는 Phusion Passenger를 사용한 단일 디렉토리 구조로 구성된 Rails 애플리케이션일 수 있다. 스케일 확보와 가용성 증대를 위해 로드 발란서(load balancer) 뒤에서 다수의 인스턴스를 실행할 수 있다.

app

상황 해결하기

이 해결책은 여러 장점을 가지고 있다.

그렇지만 일단 애플리케이션이 커지고 팀의 규모가 성장하면 이 접근방법은 가면 갈수록 심각해지는 여러 단점이 발생한다.

관련 패턴

마이크로서비스 아키텍처는 모놀리틱 아키텍처의 제약을 다루는 대안 패턴이다.

쓰임새

Neflix, Amazon.com과 eBay처럼 잘 알려진 인터넷 서비스가 모두 최초에는 모놀리틱 아키텍처였다. 대부분 웹 애플리케이션은 모놀리틱 아키텍처를 바탕으로 개발되었다.