<네 남자와 MSA />MSA 도전기(1) - MSA, 왜 하려는 건데?
F4가 MSA를 점찍은 이유
MSA 도전기
안녕하세요. F4팀의 PM 김지운입니다. 팀 순서가 6번째라 6팀이고.. 저희가 지은 팀 이름은 F4 팀입니다. 민망할 때 6팀이라 하고, 때로는 뻔뻔하게 F4라 부릅니다.
프로젝트 팀이 구성되었을 때부터, 저희 팀은 MSA로 프로젝트를 설계하고 구현하기로 하는데 의견이 모였습니다. 물론 그러한 이유가 어려운 내용에 대한 도전으로 이목을 끌어 관심받기를 원했다거나 유행을 따라가서 좋은 성적을 얻고자 했던 것은 아니었습니다.
대부분의 팀원은 이미 모놀리식 아키텍처의 한계를 경험하며 그 문제점을 느꼈기 때문입니다.
팀원들의 관심사가 MSA에 집중되어 있었기 때문에 프로젝트에 MSA를 적용하는 것을 결정했습니다. 그러나 MSA의 적용은 쉽지 않습니다. 모놀리식도 그 자체로는 잘못된 것이 아니듯, MSA 역시 큰 단점을 가질 수 있습니다. 단순히 MSA의 장점만을 바라보지 않고, 그 단점도 정확히 인지하여 장점은 극대화하고 단점은 최소화하는 방향으로 나아가려 합니다. 또한, MSA를 저희의 프로젝트에 적용해야 할만한 이유와 설득력을 갖추고자 했습니다.
MSA(MicroServices Architecture)
이미지 출처:flow.ci
소프트웨어 아키텍처와 디자인 패턴의 구현에 대한 것은 수많은 회사와 전문가들이 고민하고 발전시키고자 합니다. MSA도 서비스 지향 아키텍처의 진화를 위해 등장한 형태입니다.
기존의 모놀리식 아키텍처의 단점은 애플리케이션의 성장에 따라 코드 베이스가 개발자들에게 위협적으로 다가오며, 새로운 팀원이 합류할 때 그들이 애플리케이션의 구조와 코드를 이해하는 것은 어려운 일이 될 것입니다. 또한, 밀접하게 연결된 대규모의 응용프로그램을 새로운 기술로 전환한다거나 배포하고 확장하는 것은 개발자들에게 위협적으로 다가오게 되는 것이죠.
이러한 장점을 극복한 것이 MSA였습니다. 각 서비스가 독립적인 기능을 기준으로 나눠지게 되면서 밀접도는 낮추고, 유연성과 확장성을 지니게 된 것입니다.
MSA의 단점
개발 복잡도와 숙련도
마이크로 서비스로 개발한다는 것이 쉬운 문제는 아닙니다. 실무자들도 어려워하는 아키텍처라고 알려져 있습니다. 독립적인 서비스들을 연결하는 개념이기에 요청-응답 방식에 높은 숙련도를 요구합니다. 왜냐하면, 요청에 응답하지 않는 경우와 호출 대기 시간이 지연되는 경우 그리고 REST 통신에 대한 제약에 대응할 수 있어야 하기 때문입니다.
트랜잭션 관리
MSA는 Database Per Service라는 특징이 있어서, 서비스마다 분리된 DB들 간의 트랜잭션 관리가 어려울 수 있습니다. 또한 반 정규화된 데이터의 동기 처리도 신경을 써야 합니다.
MSA 그럼에도 불구하고,
MSA의 장점은 다음과 같습니다.
- MSA는 서비스별로 독립적이기 때문에, 한 서비스에 문제가 생겨도 다른 서비스에는 영향을 주지 않는다는 유연성이 있습니다.
- 각 서비스를 독립적으로 확장할 수 있어, 특정 서비스에 부하가 발생하더라도 해당 서비스만 확장하는 장점이 있습니다.
- 또한, 각 서비스를 독립적으로 배포하기 때문에, 전체 시스템을 중단하지 않고도 새로운 기능을 신속하게 배포하고 실험할 수 있습니다.
- 마지막으로 어떤 서비스에서 오류가 발생하더라도 장애 전파 차단을 이용하여 오류로 인한 피해를 최소화할 수 있다는 장점이 있습니다.
아마 MSA에 관심이 있는 분이라면, 어느 정도 알고 있는 장점들일 거라 생각합니다. 단점을 극복만 한다면, 모놀리식 아키텍처에 반해 많은 이점을 얻을 수 있게 되는 것이죠.
저희의 첫 고민은 다음과 같습니다. 부트캠프 수준에서 진행되어 구현되는 비즈니스의 규모가 실제완 비교도 안 되게 작다는 것은 알고 있습니다. 그리고 기간이 끝나면 실제로 이용되지 않고 손을 떠나게 되는 프로젝트 사이트들이 다수라는 것도 알고 있습니다. 하지만, 저희 팀은 실제로 서비스되는 비즈니스 규모라 생각하고 설계해야 한다고 생각했습니다.
따라서, 저희 팀은 MSA의 장점을 취하기 위해 MSA의 단점으로 꼽는 “개발 복잡도와 숙련도”와 “트랜잭션 처리” 등을 해결하기 위해 방법들을 찾아 나가기 시작했습니다. 앞으로의 도전기를 읽으시면서. 저희가 어떤 고민을 하고, 어떤 문제점을 마주치고 극복해 나가는지 지켜봐 봐주시면 감사하겠습니다.
참고
https://cazton.com/consulting/enterprise/software-architecture
https://www.samsungsds.com/kr/insights/msa_architecture_edm.html
https://martinfowler.com/bliki/MicroservicePremium.html
https://www.samsungsds.com/kr/insights/msa_architecture_edm.html
https://levanphu.info/en/what-is-php-microservices-understanding-microservices