
Intro
백엔드에서 주로 쓰는 아키텍쳐는 모놀리식 아키텍쳐와 MSA로 불리는 마이크로서비스 아키텍쳐로 나뉜다.
요즘 백엔드 채용공고를 살펴보면 마이크로서비스 아키텍쳐 경험을 요구하는 공고가 꽤 있는 것을 볼 수 있다.
그만큼 백엔드 개발자로 취업하기 위해서는 마이크로서비스 아키텍쳐가 무엇인지 잘 알아야 한다.
이 글에서는 모놀리식 아키텍쳐와 마이크로서비스 아키텍쳐에 대해 다룬다.
모놀리식 아키텍쳐 ( Monolithic )
하나의 앱에 모든 기능이!
우리가 개발을 시작하면 대부분 자연스럽게 접하는 아키텍쳐가 바로 모놀리식 아키텍쳐다.
모놀리식 아키텍쳐는 하나의 큰 목적이 있는 서비스 또는 애플리케이션에 여러 기능이 통합되어 있는 구조를 말한다.
쉽게 말해, 하나의 코드 베이스로 이뤄진 애플리케이션이다.
위 아키텍쳐 이미지처럼 하나의 백엔드에 결제, 쇼핑카트, 인벤토리 기능이 묶여 있는 것을 의미한다.
모놀리식 아키텍쳐의 장점
한줄로 요약하면 간단하고, 빠르다.
모든 서비스에 대한 코드는 하나의 베이스에 있다.
변경사항이 발생하면 하나의 베이스만 수정하고, 배포 역시 단일 프로젝트로 배포하면 되기에 매우 간편하다.
거의 모든 개발자가 모놀리식 아키텍쳐로 개발을 진행한 경험이 있기에 개발을 시작하는데는 무리가 없다.
또한 테스트와 모니터링도 간편하다는 장점이 있다.
모놀리식 아키텍쳐의 단점
기능이 얼마 없을 때는 모놀리식 아키텍쳐로 개발하는게 빠를 것이다.
그러나 프로젝트의 규모가 점점 커지고 기능이 추가되면 프로젝트를 유지보수하는데 어려움이 생길 것이다.
개발 인원이 늘어나도 모놀리식 아키텍쳐는 문제가 생긴다.
모든 팀이 동일한 프로젝트에서 작업하기에 git에서 코드를 머지하는경우, conflict를 만나기 쉬울 것이다.
모놀리식 아키텍쳐는 하나의 코드 베이스로 이루어져 있는지라, 한번 기술스택을 정하고 나면 다른 기술로 갈아타기 쉽지 않다.
마이크로서비스 아키텍쳐 ( MicroService )
하나의 앱을 여러 작은 서비스로 나누자!
마이크로서비스 아키텍쳐는 애플리케이션을 작은 서비스로 분할하고, 각 서비스를 개발해서 서로 연결하는 방법이다.
사진에 있는 결제, 쇼핑카드, 인벤토리 기능이 전부 개별적인 서비스로 돌아간다.
업데이트, 테스트, 배포, 확장 역시 각각의 서비스 내에서 이뤄진다.
마이크로서비스 아키텍쳐의 장점
마이크로서비스 아키텍쳐의 가장 큰 장점은 각 기능이 개별적인 서비스로 돌아간다는 것이다.
덕분에 특정 서비스만 골라서 확장할 수 있다.
만약 '결제' 서비스에만 사람이 몰린다고 가정하자.
모놀리식 아키텍쳐라면 특정 서비스에 상관없이 모든 서비스를 확장해야 한다.
하지만 마이크로서비스 아키텍쳐에서는 '결제' 서비스가 돌아가는 애플리케이션만 확장하면 된다.
또한 하나의 마이크로서비스만 따로 배포하고, 제거할 수 있다.
만약 여러 마이크로서비스 중 하나의 서비스에 문제가 발생하면, 그 서비스만 중단하면 된다.
특정 마이크로서비스만 중단하면 전체 애플리케이션에 미치는 영향을 줄일 수 있다.
또 각각의 서비스로 개발하다보니, 마이크로서비스 별로 다른 데이터베이스를 연결 할 수 있다.
NoSQL, RDB, Storage 등 각 마이크로서비스가 지향하는 방향에 맞게 데이터베이스를 선택할 수 있다.
마이크로서비스 아키텍쳐의 단점
얼핏보면 마이크로서비스 아키텍쳐가 더 좋아보인다.
하지만 단점 역시 만만치 않다.
일단, 개발 난이도가 미친듯이 올라간다.
마이크로서비스 별 통신을 구현할 때에도 동기 통신과 비동기 통신을 고려해야 한다.
새로운 기능을 구현할 때 다른 마이크로서비스에 접근해야 한다면 로컬에서 해당하는 마이크로서비스를 실행해야 한다.
디버깅 과정도 힘들다.
모놀리식 아키텍쳐는 그저 서비스 하나만 키면 되지만, 마이크로서비스 아키텍쳐는 관련있는 모든 마이크로서비스를 켜야 한다.
오류를 찾을 때도 여러 마이크로서비스의 로그를 확인해야 해 힘들다.
그럼 어느것을 선택해야 할까?
어지간하면, 모놀리식이 낫다.
위의 내용을 간단하게 요약하자면,
모놀리식 아키텍쳐가 더 빠르고 덜 복잡하다는 장점이 있고
마이크로서비스 아키텍쳐가 유연하게 확장할 수 있고 신뢰도가 높아진다는 장점이 있다.
지금까지 모놀리식 아키텍쳐와 마이크로서비스 아키텍쳐의 장단점에 대해 살펴봤다.
그럼 언제, 어떤 아키텍쳐를 선택하는게 좋을까?
내 생각은 학습 목적이 아니거나, 엄청난 대규모 서비스를 만드는 것이 아닌 이상, 모놀리식 아키텍쳐를 쓰는게 맞다고 생각한다.
마이크로서비스 아키텍쳐를 도입하면 개발과 유지보수에 드는 비용이 급격히 올라가기 때문이다.
만약 이 글을 읽는 당신의 팀이 아래에 모두 해당하면, 그때는 마이크로서비스 아키텍쳐가 더 도움될 수 있다.
- 우리 팀원은 마이크로서비스 아키텍쳐를 경험해 본 적이 있다.
- 우리 서비스는 중단되면 절대로, 절대로 안된다.
- 백엔드에 매우 많은 기능이 추가가 되어 복잡하다.
- 각 서비스마다 다른 데이터베이스를 써야 한다.
요즘IT에서 매우 좋은 글을 올려주었다.
아래 References 탭에 있는 글을 읽어보는 것이 당신에게 큰 도움이 될 것이다.
References
'Infra > Architecture' 카테고리의 다른 글
객체지향 프로그래밍의 특징과 SOLID 원칙 (Object-Oriented Programming) (0) | 2025.01.20 |
---|
소프트웨어학과 현주씌의 일상을 담는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!