1장. 모놀리스

문법식·2022년 8월 26일
0

이 책에서 모놀리스라고 하면, 주로 배포 단위를 말하는 것이다. 시스템의 모든 기능을 함께 배포해야 할 때, 이를 모놀리스로 간주한다. 이를 만족하는 모노릴스 시스템은 최소 3가지 유형이다.

  • 단일 프로세스 시스템
  • 분산 모놀리스 시스템
  • 외부 블랙박스 시스템

단일 프로세스 모놀리스

가장 일반적으로 생각나는 모늘리스는 모든 코드가 단일 프로세스로 배포되는 시스템이다. 이런 단일 프로세스 시스템은 거의 항상 데이터베이스에서 읽거나 데이터베이스에 저장하기 때문에, 단순하면서도 독자적인 분산 시스템일 수 있다.

모듈식 모놀리스

단일 프로세스 모놀리스이 하위 집합인 모듈식 모놀리스는 일종의 변형이다. 즉 단일 프로세스는 별도 모듈로 구성되어 있으며 각 모듈을 독립적으로 동작할 수 있지만, 배포를 위해서는 여전히 결합이 필요하다. 모듈식 모놀리스는 좋은 선택이 될 수 있다. 모듈 경계가 잘 정의되어 있으므로 병렬 작업을 많이 수행할 수 있지만 배포 고려사항은 훨씬 더 단순해지기 때문에, 분산 마이크로서비스 아키텍처에서 발생하는 문제를 피할 수 있다.
모듈식 모놀리스의 문제 중 하나는 코드 수준에서 지원하는 분해 능력이 데이터베이스 부문에는 부족하므로 향후 모놀리스를 끌어내고 싶을 경우에 큰 문제에 직면한다.

분산 모놀리스

분산 모놀리스는 여러 서비스로 구성되는 시스템이지만 어떤 이유로든 전체 시스템을 함께 배포해야만 한다. 분산 모놀리스는 SOA의 정의를 제대로 충족할지도 모르지만 대부분은 SOA의 약속을 이행하는 데 실패한다. 분산 모놀리스는 분산 시스템의 모든 단점에다가 단일 프로세스 모놀리스의 단점까지 포함하며, 양쪽의 장점을 충분히 발휘하지 못한다고 한다.
분산 모놀리스는 전형적으로 정보 은닉이나 비즈니스 기능의 응집력 같은 개념이 희박한 환경에서 등장한다. 또한, 서비스 경계 지점에서 변경이 발생하기에 결합도가 매우 높은 아키텍처를 만들어내며, 지역적인 범위에서 나쁜 의도가 없는 듯한 변경사항이 외부까지 영향을 미쳐 시스템의 다른 부분을 망가뜨린다.

외부 블랙박스 시스템

마이그레이션 노력의 일환으로 '분해'하기를 원하는 몇몇 외부 소프트웨어를 모놀리스로 간주할 수도 있다. 이런 소프트웨어로는 급여 시스템, CRM 시스템, HR 시스템 등을 들 수 있다. 이 소프트웨어 시스템의 공통점은 다른 사람들이 개발했기에 우리에게는 코드를 변경할 역량이 없다는 점이다.

모놀리스의 문제점

단일 프로세스 모놀리스나 분산 모놀리스 등은 종종 결합도, 특히 구현과 배포 결합도와 같은 결합도의 위험에 더 취약하다.
같은 장소에서 일하는 사람들이 점점 많아질수록, 저마다 각자의 길을 가게 된다. 동일한 코드를 변경하기 원하는 다양한 개발자, 각 기능을 각기 다른 시점에 밀어넣고 싶어 하는 팀들이 많다. 누가 무엇을 소유하며 누가 의사결정을 하는지에 대한 혼란도 존재한다. 다수의 연구결과에서 '혼란스러운 소유권의 경계선'이라는 문제를 보여준다. 이 책에서는 이 문제를 배포 경합이라고 부른다.
모놀리스를 사용한다고 해서 반드시 배포 경합 문제를 직면하는 것은 아니며, 마찬가지로 마이크로서비스 아키텍처를 사용한다고 해서 문제를 피할 수 있는 것도 아니다. 그러나 마이크로 서비스 아키텍처는 소유권의 경계선을 중심으로 더 구체적인 경계를 제공하므로 이 문제를 줄이기 위한 유연성이 뛰어나다.

모놀리스의 장점

단일 프로세스 모놀리스에는 장점도 많다. 훨씬 간단한 배포 토폴로지로 분산 시스템과 관련된 많은 위험을 피할 수도 있다. 단일 프로세스 모놀리스는 훨씬 더 간단한 개발자 워크플로우를 만들어낸다. 또한 모니터링, 문제 해결, 전 구간 테스트와 같은 활동도 크케 단순화할 수 있다.
모놀리스는 또한 모놀리스 자체 내에서 코드 재사용을 단순하게 만든다. 분산 시스템 내에서 코드 재사용을 원하면, 코드를 복사할지, 라이브러리를 분해할지,공유 기능을 서비스로 분리할지 등을 결정해야 한다. 모놀리스를 사용하면 선택이 훨씬 간단해진다.
모놀리스라는 용어를 레거시와 동의어로 취급하는 경우가 있다. 그러면 안된다. 모놀리스 아키텍처는 선택이며 그 자체로 유효하다. 상황에 맞게 모놀리스를 할지 마이크로 서비스를 할지 잘 선택하면 된다. 모놀리스를 고의적으로 폄하하는 함정에 빠지면, 우리 스스로나 우리 소프트웨어 사용자가 올바른 작업을 수행하지 못할 위험에 직면하게 된다.

profile
백엔드

0개의 댓글