-
[MSA] 딜레마 - 처음부터 분리해? 말어?Architecture 2020. 4. 1. 23:37
많은 개발자들이 관심을 가지고 있는 마이크로 서비스 아키텍처(MSA)에 대해서 많은 부분을 이야기를 하려고 한다.
MSA는 대규모 시스템을 구축하고 확장하기 위해 할 수 있는 최선의 방법이라고 생각한다. (아직까지는..) 그래서 MSA 구조를 도입해서 운영하는 여러 유명한 회사들(쿠팡, 아마존, 넷플릭스등)이 있다. 하지만, MSA를 이미 도입해서 운영하는 관점에서 새로운 프로젝트를 기획하고 설계할때 맞딱뜨리는 질문이 있다.
"이번에 착수하는 프로젝트를 위해서 처음부터 신규 시스템을 구축해야 할까? 아니면, 기존 시스템에 추가해서 만들고 나중에 분리할까?"
두가지 선택에 대한 장/단점을 통해서 좋은 방법이 무엇인지 알아보자.
1. 기존 시스템에 추가하고 나중에 분리하는 방식
장점
첫째, 스피드. 즉, 단기간에 구축할 수 있다. 아무리 Sprint Boot같이 시스템을 세팅하는 비용을 줄이려는 오픈소스들이 많아져도, DNS 세팅처럼 시스템 인프라를 세팅하고 그외에 행정 처리(보안심사등)을 위한 시간이 생각보다 많이 들어가는 것은 사실이다. 둘째, 적은 리소스로 구축할 수 있다. 시스템 구축 시간이 덜어지다 보니 아무래도 투입하는 개발자의 리소스를 현저하게 줄일 수 있다. 셋째, 클라우드 환경에서 시스템을 운영한다면 비용을 최소화할 수 있다. 기존 시스템에 추가하는 것이다보니 추가 시스템 비용이 없거나 최소화할 수 있다.
단점
첫째, 향후에 시스템을 분리하는 비용이 비싸다. 향후에 언젠가 시스템을 분리해야하는 시기가 올 것이다. 그때 분리를 위해 해야하는 비용이 비싸다. 여기서 비용은 개발자의 리소스와 기간을 의미한다. 그래서 단점을 보완하기 위해서 분리를 염두에 두고 패키지가 완전히 독립적으로 운영되고록 디펜던시를 최소화해야 한다. 물론 코드뿐만 아니라 DB 테이블도 독립적인 스키마를 갖도록 해야 한다. 둘째, 아무래도 기존 시스템에 추가하다보니 시스템이 가진 제약을 따를 수 밖에 없다. 예를들면, 기존 시스템에서 사용한 개발 언어, DB, 라이브러리의 버전등을 동일하게 사용해야 한다는 것이다. 장점이라고 생각할 수도 있지만 상황에 따라서 구현해야하는 기능에 제한으로 작용하는 경우가 있다.
2. 처음부터 신규 시스템을 구축하는 방식
장점
첫째, 무엇이든 할 수 있다. 백지에 새로운 그림을 그리는 것이다. 어떠한 제약이 없는 상태이기 때문에 설계와 구현에 제약이 없다. 둘째, 처음에 시스템 구축과 모든 행정 처리를 하기 때문에 런칭이 되면 비즈니스 속도를 빠르게 진행할 수 있다. 기존 시스템에 추가하는 방식은 비즈니스를 초반에 빠르게 움직이고 나중에 시스템 분리 단계에서 속도를 늦춰야 하지만 처음부터 시스템을 구축하는 방식은 초반에 약간의 비용을 들이고 시간이 지나면서 가속도가 붙는 형태이다.
단점
첫째, 구축 기간이 오래 걸린다. 새로 만드는 것은 언제나 시간이 많이 든다. 둘째, 많은 리소스가 필요하다. 할일도 많다보니 개발자의 투입 인력이 생각보다 많이 필요하다. 셋째, 신규 시스템의 클라우드 비용이 필요하다. 아무리 작은 사이즈의 인스턴스를 사용한다고 하더라도 어느 정도의 비용을 감수해야한다.
장점 단점 기존 시스템에 추가 1. 단기간에 구축할 수 있다.
2. 적은 리소스로 구축할 수 있다.
3. 시스템 운영 비용을 최소화할 수 있다.
1. 향후에 시스템을 분리하는 비용이 비싸다.
2. 설계와 구현에 제약이 있다.
신규 시스템 구축 1. 설계와 구현에 제약이 없다.
2. 런칭후 비즈니스에 가속도를 붙일 수 있다.
1. 구축 기간이 오래걸린다.
2. 많은 리소스가 필요하다.
3. 시스템 운영 비용이 들어간다.
결론적으로...
장점과 단점이 교차하는 상황이지만, 둘중에 무엇이 좋다라고 확신할 수는 없다. 솔직히 정답은 없다. 왜냐하면, 프로젝트의 규모, 비즈니스의 성장 가능성과 로드맵, 긴급성, 윗분들의 리소스 펀딩 등 많은 정치적, 기술적인 변수들에 따라서 신규 시스템이냐 기존 시스템에 추가할 것인지를 결정할 수 있기 때문이다. 상황과 여건에 따라서 어떠한 선택을 하더라도 그것은 좋은 선택일 거라고 생각한다.
Thanks
Hans
'Architecture' 카테고리의 다른 글
Monolith를 MSA로 전환을 계획할때 필요한 세가지 (0) 2020.11.21 비즈니스 프로세스를 그리자. — BPMN 2.0 (2) 2020.10.24 슬기롭게 로그(Log)를 쌓는 법 (0) 2020.07.22 AWS에서 효율적인 비용으로 시스템을 운영하기 (0) 2020.06.27 [MSA] 믿는 enum에 발등 찍힌다. (1) 2020.04.07