99클럽 24일차 TIL: 아키텍처 패턴 - 모놀리식
2024. 4. 27. 14:49ㆍ개발 공부
728x90
반응형
#1. 오늘의 학습 키워드
개발 구조 패턴 중 모놀리식 패턴에 대해
- 기존 노드로 개발했을 때 모노레포 구조로 모든 모듈의 백엔드 및 프론트엔드 코드가 하나의 레포지토리에서 구현 되었다.
- 각 모듈 별로 단독 백서버 및 프론트 화면 실행이 가능하였다.
- 원래는 해당 구조로 개발 하다 msa 구조로 변경하려 했었다.
- 노드에서 스프링으로의 리팩토링 때문에 결국 무산 되었지만
- 이때 대두 됐던 개념인 모노레포, msa 등에 대해서 알아보자
- 그전에 제일 기본적인 개발 아키텍처 패턴인 모놀리식 아키텍처에 대해서 알아보자.
#2. 공부한 내용
1. 모놀리식 아키텍처
- 어플리케이션에서 사용되는 모든 코드가 하나의 대규모 구조로 구성되어있는 패턴
- 하나의 시스템이 서비스에서 제공하는 모든 기능을 처리하도록 설계 되어있다.
- MSA 는 반대로 작은 단위로 기능을 분리하여 제공
- 소규모 개발일 때는 모놀리식 아키텍처가 유리하다
- 그러나 제공해야될 기능의 수와 종류가 많아지면, 모놀리식 아키텍처의 한계는 명확해진다.
- 왜 그런지 모놀리식의 장단점을 통해 알아보자
1) 장점
- 초기의 빠른 구축이 가능하다.
- 모놀리식 구조의 단일 디비, 단일 어플리케이션의 특성에 의함
- 개발자가 신경써야할 부분은 오로지 데이터 처리 로직
- 테스트 환경이 쉽다는 장점으로 초기 생산성이 좋기도 하다.
- 모놀리식 구조의 단일 디비, 단일 어플리케이션의 특성에 의함
- 쉬운 트랜잭션 기능 활용
- 단일 데이터 저장소이기 때문에, 트랜잭션에 관하여 많은 걸 고려할 필요가 없다.
- 장애 파악 난이도 낮음
- 단일 어플리케이션에서의 오류이기 때문에, 어디서 오류가 발생했는 지 비교적 쉽게 찾을 수가 있다.
- 네트워크 지연 / 데이터 유실 문제 없음
- msa는 서비스 간 데이터 전송 시 유실 위험이 있는 것과 달리,
- 모놀리식 구조는 단일 환경에서의 객체 간 데이터 공유이기 때문에 유실 문제가 발생하지 않고, 네트워크 통신으로 인한 지연 문제가 없다.
2) 단점
- 긴 빌드 시간
- 사소한 수정 하나에도, 반영하려면 분리가 되어있지 않은 전체 프로젝트를 컴파일하고 빌드해야된다.
- 따라서 배포 시간도 길어진다.
- 가독성 저하
- 모든 코드가 단일 시스템 구조 내에 있어서, 제공되는 기능이 많아질 수록 복잡하다.
- 신규 개발자의 온보딩 시 해당 문제는 더욱 문제를 유발한다.
- 관심사 분리의 어려움
- 단일 시스템 내 기능을 서로를 의존하고 뒤섞여 있기에, 중복 코드도 있을 것이고, 기존 레거시 코드를 분리하는데에 어려움이 존재한다.
- 만약 객체지향 프로그래밍을 한다고 했을 때, 모놀리식 구조의 해당 단점은 단일 책임 원칙(SRP)을 위배하게 되기에, 고객의 요구사항을 현재 코드에 바로 적용하고 수정하기 어려울 수 있다.
#3. 오늘의 회고
- 모놀리식 아키텍처는 관리가 간편하고, 초기의 개발생산성이 높아서 간단한 서비스를 제공하는 어플리케이션을 개발하고 싶을 때 유용하다.
- 제공해야 될 기능이 많지가 않으면, 코드가 복잡하지 않을 것이며, 따라서 이를 대비한 복잡한 분산 시스템을 구축할 필요가 없기에 개발 비용이 많이 절감 될 것이기 때문이다.
- 그러나 어플리케이션의 규모와 복잡성이 증가하면, 모놀리식 아키텍처의 한계를 느낄 수 있다.
- 특히 제공해야될 기능이 많아질 수록 팀원 또한 많아질텐데,
- 해당 구조는 협업의 적합한 구조가 아니다.
- 코드베이스의 복잡성이 증가하면서 유지보수성, 확장성이 낮기 때문.
- 따라서 모놀리식 아키텍처의 도입을 검토하고 있다면, 어플리케이션에서 제공하는 기능이 많은 지, 복잡한 지를 고려하는 것이 1순위가 되는 것이 좋겠다.
- 또는 모놀리식 아키텍처로 개발을 시작하여, 도중에 msa 로 넘어가는 대비를 하거나.
728x90
반응형
'개발 공부' 카테고리의 다른 글
99클럽 26일차 TIL: 아키텍처 패턴 - 모노레포 (0) | 2024.04.29 |
---|---|
99클럽 25일차 TIL: 아키텍처 패턴 - MSA (2) | 2024.04.28 |
99클럽 23일차 TIL: Thread (Java, Spring) (0) | 2024.04.26 |
99클럽 22일차 TIL: KISS, YAGNI, DRY (2) | 2024.04.25 |
99클럽 21일차 TIL: Validation Group (2) | 2024.04.24 |