![[아키텍쳐 패턴] 모놀리스 구조 및 마이크로서비스 구조](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVthvt%2FbtsC4rfuiNR%2FEH6EXslP3uiY3yKEAcrplK%2Fimg.png)
웹서버를 개발하기 위한 소프트웨어 아키텍쳐 패턴으로 모놀리스 및 마이크로서비스 구조에 대한 포스팅
모놀리스 구조
모놀리스(Monolith) 아키텍처는 하나의 소프트웨어를 구성하는 모든 모듈과 코드를 한 프로젝트에서 관리하는 것을 말한다.
배포 또한 하나의 프로젝트를 실행시키는 것으로 끝.
장점
- 한 프로젝트 디렉토리 내에 모든 모듈 및 코드가 있기에 개발이 간단하고 리뷰가 용이함.
- 소프트웨어 구조가 단순하기에 구성이 한눈에 보기 쉬움.
- 한 프로젝트를 실행시키면 되기에 배포가 쉬움.
- 디버깅 및 에러 대처가 쉬움.
단점
- 한 프로젝트 내에 모든 코드가 있어 코드가 길어짐.
>> 코드를 작성하려면 모든 코드를 전부 이해하고 있어야 함.
서비스가 커지면 전체 구조 및 코드 흐름을 이해하기 힘듦.
마이크로서비스 구조
마이크로서비스(Microservice) 아키텍처는 하나의 소프트웨어를 구성하는 컴포넌트들을 독립적인 프로젝트들로 분리하여 관리하는 것을 말함.
줄여서 MSA 라고 말하며 분산 서버 시스템을 뜻함.
이 각각의 컴포넌트들을 마이크로 서비스라고 부름.
- 먼저 쇼핑몰 웹사이트 백엔드 프로젝트는 크게 다음처럼 3가지 도메인으로 나눌 수 있다.
- 사용자 관련 도메인 (Users)
- 상품 관련 도메인 (Products)
- 결제 관련 도메인 (Payment)
- 프로젝트도 각 도메인에 맞게 3가지로 나뉜다.
서버 3개가 동시에 떠있는 상태여야 쇼핑몰 웹사이트 백엔드 시스템이 정상적으로 동작
3개의 서버가 서로 통신하기 위해서는 HTTP 통신이 필요. (REST Request/Response)
장점
- 서비스의 규모가 커져도 각각의 마이크로서비스 단위는 하나의 모놀리스 구조의 프로젝트보다 작기 때문에 - 코드 구조나 흐름을 이해하기 쉬움.
- 각 서비스별로 수정이나 확장 시도가 편해짐.
- 테스트 및 개발들이 마이크로서비스 단위로 나뉘어서 진행되기 때문에 테스트, 빌드, 배포 속도 및 개발 속도가 빨라짐.
단점
- 연관된 서비스를 테스트해야할 때 어려워짐.
- 마이크로 서비스를 나누는 기준을 정하는게 어려움. >> 잘못 나눌 시 마이크로 서비스 간 결합도가 증가할 수 있음.
정리
서비스의 규모와 확장성 두 가지를 고려하여 알맞은 아키텍쳐를 선택하면 될 것같다.
주관
요즘은 MSA를 많이 사용한다고 해서 이번에 진행하는 SSAFY 1학기 프로젝트에서 적용을 시켜보려 여러 정보들을 찾아봤는데 괜히 MSA구조로 서비스를 구현했다가 서비스 복잡도만 커지게 되거나 예상치못한 에러들이 자주 발생하여 모놀리스로 돌아가는 케이스도 자주 보임.
만약 MSA라는 분산서버 구조를 해보고 싶다면 우선 모놀리스 구조로 기능개발을 진행하고 추후에 인증서버를 따로 빼본다던지 하는 방식으로 모놀리스 > MSA로 패턴 변경을 시도하는 것으로 경험해보는게 좋을 듯 함..
이번기회로 모놀리스와 MSA의 차이를 알 수 있었고 추후 모놀리스 > MSA 패턴 변경을 시도해본 후 각각의 장단점을 좀 더 주관적으로 정리해볼 수 있었으면 함.
개발 기술 블로그, Dev
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!