저번 글이 너무도 MSA에 대한 단점을 기술해서 장점 또한 분명히 있다는 것을 적기 위해 작성했다 (하하..)
아래는 실제로 MSA 환경에서 일하면서 느꼈던 장점을 적어보았다
독립적인 작업의 용이함
팀원과 같이 작업을 하다보면 항상 출근 직후 하는 한 가지 루틴이 있다
바로 개발 브랜치를 다운 후 작업 중인 브랜치와 싱크를 맞추는 것이다
- git pull origin dev
- git checkout feat/my-working-branch
- git merge dev
저게 별거 아닌 것 같아도 은근 번거로울 때가 많다
작업 중에 긴급하게 배포해야 하는 경우
- main 브랜치 이동
- pull & sync
- hot-fix 브랜치 따기
- 버그 수정
- 확인후 배포
- main 브랜치 병합
- dev 브랜치 병합
- 다시 내 작업 중인 브랜치로 이동
위와 같은 절차를 거치기도 한다...
당시 나의 경우 위와 같은 작업은 다소 체득이 된 상태였는데 아직 경력이 얼마 안 된 내 동기가 많이 힘들어 하는 것을 보았다
MSA 환경에서는 pull & sync의 빈도수가 훨씬 낮아진다
왜냐하면 내가 작업하는 working-branch의 경우
모놀리스에선 하나의 기능이었던 것이
MSA에서는 하나의 마이크로 서비스에 해당할 때가 많기 때문이다
따라서 협업할 떄 독립적인 개발이 가능해서 형상 관리에 드는 시간 소모가 훨씬 작았던 경험이 있다
모놀리스에 비해 파일 수가 작음
이건 프로젝트 환경에 따라 다른데
내가 경험한 회사의 경우 마이크로 서비스 하나 당 one git repository, one gradle project 였다
즉 인텔리제이에서 Find Clasees를 했을때 색인되는 파일의 개수가 작아서 금방 찾을 수 있다
별거 아닌 것 같기는 해도 DTO 같은 경우 큰 역할도 아닌데
InternalAdminXxxListResponse 등의 30글자 넘는 파일들이 마구 생기면 저 글자들의 의미 파악하는게 은근 두뇌에 부하가 간다
MSA에서는 파일의 갯수가 현저히 작다 (내가 작업했던 건 최종적으로 대략 200개 정도의 파일이 나왔던 것 같다, 아주 적지 않은가?)
비즈니스 로직이 간단해진다
각 마이크로 서비스에 역할이 잘 분리되어 있다는 전제에 성립하는 명제다
외부 서비스와 무관하게 해당 마이크로 서비스가 본디 가져야할 데이터의 성격에 맞게 처리하고 영속화를 하면 되기 때문에, 모놀리스에 비해 마이크로 서비스 자체의 비즈니스 로직 처리는 비교적 쉬운 편이다
다만 EDD 사상에 맞게 메시징 큐에 이벤트를 넣고 이 이벤트가 어떻게 처리되는 지는 수신하는 각 마이크로 서비스를 확인해서 로직을 봐야만 한다...
그외
아래와 같은 장점이 있기는 하나 본인은 일간 사용량이 거의 없는 곳에 재직을 해서 그런지...
경험하지 못한 장점들이다
유연한 트랜잭션 처리(비동기 + 메세징 + 웹플럭스)
비동기나 EDD, 웹플럭스 등을 이용하면 컨슈머가 메세징을 처리하지 못한다고 해서 프로듀서가 영향을 받는 정도를 유연하게 해결할 수 있다
다만 기술적인 난이도가 어렵다 (ReactiveX 스택 공부, Broker Clusterting, Dead Letter 처리 등...)
DB 비용 감소 (지수 함수적 증가)
이것도 본인의 얘기는 아니지만 오로라 등의 DB 경우 스펙을 리니어하게 증가시키면 비용이 리니어하게 증가하는게 아니라 exponential하게 증가한다고 한다... (생각해보면 당연하다, CPU 역사상 이게 어려워서 병렬 코어, 쓰레딩 전략을 선택한걸 보면)
근데 마이크로 서비스의 경우 서비스도 여러개로 나뉘어 있고 DB 테이블을 나누어 갖는다
(따라서 자연스레 인덱스에 소매되는 가상 메모리도 줄어들음)
또한 Join을 걸 수 없어서 자연스레 Join 비용 또한 줄어든다
'Back-end > Spring Cloud, MSA' 카테고리의 다른 글
Spring Cloud Gateway 테스트 코드와 리펙터링 (Kotlin-DSL) (0) | 2024.01.14 |
---|---|
Eureka 시나리오별 등록 과정 + 빠른 배포하기 (0) | 2023.12.18 |
실전에서 마주한 MSA에 대한 생각 - 절망편 (2) | 2023.11.23 |
Spring Cloud Config 을 이용한 빠른 YAML 리펙터링 (0) | 2023.05.29 |
hi hello... World >< 가장 아름다운 하나의 해답이 존재한다
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!