본문 바로가기
공부

모놀리식 아키텍처 vs 마이크로서비스 아키텍처

by 꾸돼지 2025. 5. 15.

프로젝트를 설계할 때 가장 먼저 고민해야 하는 것은 아키텍처의 선택이다.

그 중 대표적인 두 가지 방식이 모놀리식 아키텍처(Monolithic Architecture)와 마이크로서비스 아키텍처(Microservice Architecture)이다.

 


1. 모놀리식 아키텍처

모든 기능이 하나의 어플리케이션에 통합된 구조를 의미한다.

사용자 인증, 주문 처리, 결제 시스템 등 다양한 기능들이 하나의 프로젝트 내에서 함께 개발되고 배포된다.

 

장점

개발 및 배포가 단순하고, 초기 개발 속도가 빠르다.

테스트가 용이하다. 단일 프로세스 내에서 동작하므로 통합테스트와 디버깅이 쉽다.

공통 모듈이나 라이브러리를 쉽게 공유할 수 있다.

 

단점

유지보수가 어렵다. 프로젝트 규모가 커질수록 코드가 복잡해지고 변경이 어렵다.

확장성의 한계가 있다. 특정 기능만 확장하고 싶어도 전체 어플리케이션을 확장해야 한다.

의존성이 증가한다. 하나의 컴포넌트 변경이 전체 시스템에도 영향을 줄 수 있다.

 


2. 마이크로서비스 아키텍처

작고 독립적인 서비스 단위로 나누어 개발하는 구조이다. 각 서비스는 하나의 도메인 혹은 기능을 담당하고, 독립적으로 배포된다.

 

장점

유지보수성이 좋고 확장성이 높다. 서비스 단위로도 개발과 배포가 가능하므로 빠르게 수정하고, 필요한 부분만 확장이 가능하다.

기술 스택이 다양해진다. 각 서비스가 독립적이므로 언어나 프레임워크 선택에서 자유롭다.

장애 격리가 잘된다. 하나의 서비스에 문제가 생겨도 전체 시스템이 중단되지 않는다.

 

단점

복잡한 인프라가 필요하다. 각 서비스를 배포하고 관리하기 위한 CI/CD, Service Discovery, API Gateway 등 복잡한 인프라가 필요하다. 

 - Service Discovery: DNS처럼 내부의 서비스가 제공되는 IP, Port, Server-Name 등을 제공하는 서버

 - API Gateway: 클라이언트로부터 온 요청의 단일 진입점. Request를 적절한 절차를 통해 실제 처리하는 도메인과 연결

통합 테스트가 어렵다. 서비스 간 통신을 테스트하기 위해 별도의 환경이 필요하고, 에러 추적이 어렵다.

운영 비용이 증가한다. 서비스 수가 많아지면서 모니터링, 로깅, 트래픽 관리 등의 부담이 커진다.

 


소규모 프로젝트나 빠른 MVP(Minimum Viable Product: 최소 기능 제품) 개발이 목표라면 모놀리식 아키텍처가 더 적합할 수 있다.

서비스가 복잡해지고 확장성이 중요한 대규모 시스템이라면 마이크로서비스 아키텍처가 더 좋은 선택이 될 수 있다.

 

 


내가 일했던 SI 업체에서는 주로 모놀리식 아키텍처를 선택한다.

요구사항에 맞게 빠르게 최소한의 기능을 개발하고, 후임자가 인수받을 때 복잡하지 않게 구현해야 한다.

대부분 동시접속자가 많지 않아도 꼭 필요한 서비스를 제공하는 사용하는 업체들이 이렇게 시스템을 개발한다.

 

우리가 흔히 알고 있는 대규모 서비스 업체(구글, MS, 아마존, 네카라쿠배당토 등등...)는 동시 접속자가 수천 - 수천만명에 달한다.

그렇기에 사용자가 몰릴 것 같은 때에는 확장해서 대비하고, 비교적 사용자가 적을 때는 축소해서 서버를 운용해야 한다.

그러기 위해서는 대규모 인프라와 MSA로 개발하는 것이 더 유리하다.

 

문제는 이 지점이다.

SI에서만 근무하면 MSA로 설계할 일이 거의 없다.

개발을 하게 될 수는 있어도 설계하는 일은 거의 드물다.

그래서 SI -> 서비스 업체로의 진출이 힘들다.

 

내가 회사생활을 하며 절망스러웠던 지점이고, 퇴사를 결심한 지점이기도 하다.

기존에 다니던 회사에서는 대규모 트래픽이 발생하는 서비스를 만들 일이 없다.

그만큼 많은 프로젝트를 수행했어도 핵심에서 벗어난 업무만 많이 한 상태였던 것이다.

 

그렇다고 사용자 인증이나 결제 시스템, 대규모 배치 시스템 등을 하는 것도 아니었다.

MSA 설계 능력이 없으면, 특정 도메인이라도 확실해야하는데 그것 역시 없었다.

결국 물경력이 쌓였고, 지금이라도 탈출하자는 마음가짐으로 퇴사했다.

 

퇴사하고 몇 달의 시간이 지난 지금... 후회하는 부분도 있다. 당장 경제적으로 버거우니까.

그래도 알고리즘 실력도 많이 올렸고 그동안의 프로젝트를 대규모 시스템에 적합하게 리팩토링하며 많은 것을 깨닫게 되었다.

 

결국 대규모 시스템도 모놀리식 서비스와 유사하다.

트래픽이 많은 만큼 쓰레드가 많고, 병렬 처리가 많아졌을 뿐이다.

그리고 모듈들 간의 통신이 메시지였다면, MSA에서는 네트워크로 각 서비스들이 통신한다는 부분이 다르다.

어차피 로그를 통해 디버그하고, JVM이 동작하는 HW, OS, 네트워크 등을 모니터링하는 것은 동일하다. 툴이 달라졌을 뿐이다.

 

이제 이번 달에는 어딘가에 취직할 것이다.

유명 서비스 업체가 아니더라도 좋다. 그동안 내가 고민하며 공부한 내용들을 잘 사용할 수 있는 곳을 찾아서 적용해보고 싶다.