-
모놀리식 아키텍쳐 vs 마이크로 서비스 아키텍쳐 (Monolithic Architecture vs Micro Service Architecture)스터디 노트 2023. 11. 23. 10:39
우리가 흔히 알고 있는 아키텍쳐의 개념에는 모놀리식 아키텍쳐와 마이크로서비스 아키텍쳐가 있습니다.
그 외에도 다양하게 존재하지만 대표적인 아키텍쳐는 위 두 종류의 아키텍쳐이죠.
그럼 모놀리식과 마이크로서비스아키텍쳐는 무엇일까요?
📌 Monolithic Architecture(모놀리식 아키텍쳐)
모놀리식 아키텍쳐는 하나의 프로젝트에 모든 서비스들이 집중되어 있는 것을 말합니다.
쉽게 말해 하나의 세트로 모든 서비스들이 구성되어 있다는 것이죠.
사용자 인증이나 UI, 코어 비즈니스 로직, 각종 이벤트 들에 대한 서비스 모듈이 구분이 없이 하나의 프로젝트 내에 모두 집약되어 있는 상태입니다.
모놀리식 아키텍쳐의 장점은 우선 개발이 쉽다는 것이죠.
서비스간의 관계나 각 모듈의 분리 기준 등에 대한 결정 없이 그냥 하나의 프로젝트에 모두 다 구성하면 되다보니까 아무래도 구현 레벨 자체가 굉장히 쉽습니다.
또한 트랜잭션 처리도 매우 쉽습니다. 하나의 프로젝트로 묶여있다보니 트랜잭션의 시작과 종료가 MSA방식에 비해 월등히 다루기 쉽습니다.
추가적인 장점으로는 배포가 간편합니다. 이게 무슨 얘기인고하니 배포의 경우 하나의 프로젝트만 deploy하면 되기 때문에 크게 생각할 것이 없습니다.
그렇기 때문에 소규모 프로젝트에서는 굳이 MSA방식보다는 모놀리식 방식이 더 용이할 수 있습니다.
다만 모놀리식에는 치명적 단점이 있는데 그것은 확장이 쉽지 않다는 것이죠.
하나의 서비스가 추가되어도 전체 프로젝트가 다 영향을 받고 배포도 새로이 전부 다 다시 해야만 합니다.
또한 배포나 구동 시 서비스의 크기가 커짐에 따라 시간이 오래 걸립니다.
아주 간단한 것을 수정하려 해도 서비스 전체를 다시 구동해야 하는 상황에 직면하죠.
대규모 서비스를 하고 있거나 코어 서비스 로직의 구동이 중지되었다 다시 뜨는데 한참 걸린다고 생각해보면..정말 끔찍하네요..😖
📌 Micro Service Architecture
그럼 마이크로 서비스 아키텍쳐(Micro Service Architecture, 줄여서 MSA)는 대체 무엇일까요?
간단하게 말해서 프로젝트를 어려 단위의 서비스 모듈로 잘게 쪼갠 후 그 서비스간의 연관관계를 통하 하나의 통합된 서비스를 구현해내는 아키텍쳐를 말합니다.
이들은 각각 분리된 독립적 서비스 모듈들로 구성되어있어 각각의 서비스 모듈의 배포가 매우 용이하며 확장성이 매우 높습니다.
마이크로 서비스 아키텍쳐의 가장 강력한 장점 중 하나는 각각의 독립적 모듈로 서비스를 구성하기 때문에 모듈의 민첩한 확장과 배포 입니다.
기능의 확정에 매우 오픈되어있고, 수정에도 용이하며, 배포도 빈번하게 진행할 수 있습니다.
배포시 타 서비스에 영향을 주지 않도록 배포를 할 수 있게 되었고, 그에 따라 기술 선택의 폭이 매우 광범위해졌습니다.
각각 서비스의 테스트를 단독적으로 진행할 수 있어 테스트가 용이해졌고, 서비스의 클러스터 구성을 통해 보다 안전하고 단단한 서비스 구축이 가능해졌습니다.
그야말로 만능일 것 같은 마이크로 서비스 아키텍쳐에도 단점은 존재합니다.
일단 러닝커브가 높습니다. 모놀리식처럼 하나의 시스템에 모든 서비스를 다 때려박는(?) 방식의 경우 별도로 스터디를 해야 할 인프라 지식은 없습니다.
하지만 마이크로 서비스 아키텍쳐를 사용할 경우 인프라에 대한 스터디가 필수적입니다. 예를 들면 API Gateway방식이나 Saga Transaction Pattern, Kafak 등의 MQ Broker들에 대한 스터디도 필요하지요.
그렇다보니 운영이 쉬운 편은 아닙니다.
또한 각 서비스 모듈이 단독으로 운영되다보니 보다 높은 고가용성의 장비가 필요하게 됩니다. 이에 따라 기하급수적으로 인프라 구축 비용이 증대될 수 있지요.
개발적인 관점에서는 트랜잭션의 복잡도가 급격하게 증가합니다.
로컬 트랜잭션으로 구성이 가능했던 모놀리식 방식에서 로컬 트랜잭션 뿐만 아니라 서비스 모듈 간의 경계를 넘는 트랜잭션 관리가 필요해지며 별도의 개념이 추가적으로 필요하게 됩니다.
서비스 개발자라면 트랜잭션을 당연히 신경써야 하고 이 부분이 굉장히 중요하지요.
이와 같은 단점에도 불구하고 마이크로 서비스 아키텍쳐를 사용하는 이유는 무엇보다도 트래픽에 대해 민첩하게 대응하며 유연한 확장과 서비스의 품질 개선이 보다 용이하고, 새로운 기능의 도입이 모놀리식의 방식보다 훨씬 간편하며 각 조직이 독립적으로, 또 보다 유기적으로 운용이 가능해지기에 많은 선택을 받고 있습니다.
📌 마치며
모놀리식과 마이크로 서비스 아키텍쳐의 경우 쉽게 표현하면 하나의 거대하고 강력한 서비스와 작고 가벼운 여러 서비스들이 손을 잡고 모여있는 모습으로 설명을 할 수 있겠네요.
다음에는 MSA 패턴에서 경계를 넘어서는 서비스간의 트랜잭션 처리를 위한 방식에 대해 스터디를 해보도록 하겠습니다.
'스터디 노트' 카테고리의 다른 글
Java에서 Serializable은 무엇일까? 직렬화 vs 역직렬화 (1) 2023.12.04 Aspect Oriented Programming(AOP) 에 대하여 (0) 2023.11.23 [Java] CompletableFuture 에 대하여 (0) 2023.11.22 [ClickHouse] 클릭하우스 자바 클라이언트 만들어 데이터 다루기 예제! ClickHouse + Java + Http Client Exam (2) 2023.11.21 [ClickHouse] 클릭하우스를 도커로 띄워보기! ClickHouse with Docker Container (2) 2023.11.21