99클럽 24일차 TIL: 아키텍처 패턴 - 모놀리식

2024. 4. 27. 14:49개발 공부

728x90
반응형

#1. 오늘의 학습 키워드

개발 구조 패턴 중 모놀리식 패턴에 대해

  • 기존 노드로 개발했을 때 모노레포 구조로 모든 모듈의 백엔드 및 프론트엔드 코드가 하나의 레포지토리에서 구현 되었다.
    • 각 모듈 별로 단독 백서버 및 프론트 화면 실행이 가능하였다.
  • 원래는 해당 구조로 개발 하다 msa 구조로 변경하려 했었다.
    • 노드에서 스프링으로의 리팩토링 때문에 결국 무산 되었지만
  • 이때 대두 됐던 개념인 모노레포, msa 등에 대해서 알아보자
    • 그전에 제일 기본적인 개발 아키텍처 패턴인 모놀리식 아키텍처에 대해서 알아보자.

#2. 공부한 내용

1. 모놀리식 아키텍처

- 어플리케이션에서 사용되는 모든 코드가 하나의 대규모 구조로 구성되어있는 패턴
  • 하나의 시스템이 서비스에서 제공하는 모든 기능을 처리하도록 설계 되어있다.
    • MSA 는 반대로 작은 단위로 기능을 분리하여 제공
  • 소규모 개발일 때는 모놀리식 아키텍처가 유리하다
    • 그러나 제공해야될 기능의 수와 종류가 많아지면, 모놀리식 아키텍처의 한계는 명확해진다.
    • 왜 그런지 모놀리식의 장단점을 통해 알아보자

1) 장점

  • 초기의 빠른 구축이 가능하다.
    • 모놀리식 구조의 단일 디비, 단일 어플리케이션의 특성에 의함
      • 개발자가 신경써야할 부분은 오로지 데이터 처리 로직
    • 테스트 환경이 쉽다는 장점으로 초기 생산성이 좋기도 하다.
  • 쉬운 트랜잭션 기능 활용
    • 단일 데이터 저장소이기 때문에, 트랜잭션에 관하여 많은 걸 고려할 필요가 없다.
  • 장애 파악 난이도 낮음
    • 단일 어플리케이션에서의 오류이기 때문에, 어디서 오류가 발생했는 지 비교적 쉽게 찾을 수가 있다.
  • 네트워크 지연 / 데이터 유실 문제 없음
    • msa는 서비스 간 데이터 전송 시 유실 위험이 있는 것과 달리,
    • 모놀리식 구조는 단일 환경에서의 객체 간 데이터 공유이기 때문에 유실 문제가 발생하지 않고, 네트워크 통신으로 인한 지연 문제가 없다.

2) 단점

  • 긴 빌드 시간
    • 사소한 수정 하나에도, 반영하려면 분리가 되어있지 않은 전체 프로젝트를 컴파일하고 빌드해야된다.
    • 따라서 배포 시간도 길어진다.
  • 가독성 저하
    • 모든 코드가 단일 시스템 구조 내에 있어서, 제공되는 기능이 많아질 수록 복잡하다.
    • 신규 개발자의 온보딩 시 해당 문제는 더욱 문제를 유발한다.
  • 관심사 분리의 어려움
    • 단일 시스템 내 기능을 서로를 의존하고 뒤섞여 있기에, 중복 코드도 있을 것이고, 기존 레거시 코드를 분리하는데에 어려움이 존재한다.
    • 만약 객체지향 프로그래밍을 한다고 했을 때, 모놀리식 구조의 해당 단점은 단일 책임 원칙(SRP)을 위배하게 되기에, 고객의 요구사항을 현재 코드에 바로 적용하고 수정하기 어려울 수 있다.


#3. 오늘의 회고

  • 모놀리식 아키텍처는 관리가 간편하고, 초기의 개발생산성이 높아서 간단한 서비스를 제공하는 어플리케이션을 개발하고 싶을 때 유용하다.
    • 제공해야 될 기능이 많지가 않으면, 코드가 복잡하지 않을 것이며, 따라서 이를 대비한 복잡한 분산 시스템을 구축할 필요가 없기에 개발 비용이 많이 절감 될 것이기 때문이다.
  • 그러나 어플리케이션의 규모와 복잡성이 증가하면, 모놀리식 아키텍처의 한계를 느낄 수 있다.
    • 특히 제공해야될 기능이 많아질 수록 팀원 또한 많아질텐데,
    • 해당 구조는 협업의 적합한 구조가 아니다.
      • 코드베이스의 복잡성이 증가하면서 유지보수성, 확장성이 낮기 때문.
  • 따라서 모놀리식 아키텍처의 도입을 검토하고 있다면, 어플리케이션에서 제공하는 기능이 많은 지, 복잡한 지를 고려하는 것이 1순위가 되는 것이 좋겠다.
    • 또는 모놀리식 아키텍처로 개발을 시작하여, 도중에 msa 로 넘어가는 대비를 하거나.
728x90
반응형