649 words
3 minutes
[MSA]Monolithic Architecture
Overview
01. 몇가지 원칙
DRY Don’t Repeat Yourself
- 동일한 코드가 3번 이상 반복되는 경우, 해당 코드를 함수로 분리하여 재사용성을 높일것
- 시스템 기능의 동작을 단일 코드로 유지
- 중복된 코드나 디자인 항목이 없도록 하여 유지보수성을 높임
KISS Keep It Simple, Stupid
- 시스템을 가능한 한 단순하게 유지
- 복잡한 구조나 불필요한 기능을 피하고, 이해하기 쉬운 구조로 설계
YAGNI You Aren’t Gonna Need It
- 불필요한 기능을 미리 구현하지 않음
02. 모놀리식 아키텍처
장점
- 쉬운 개발 및 배포
- 쉬운 디버깅 및 테스트
단점
- 커플링 증가
- 코드 분할 어려움
- 관심사 분리 어려움
- 격리 계층 없이 종속성 상호연결
- 시간이 지남에 따라 복잡성 증가
해결법
- UI, 비즈니스 로직, 데이터 액세스 계층을 분리하여 모듈화
- Layered Architecture를 사용하여 각 계층의 책임을 명확히 분리
- SOLID 원칙을 적용하여 객체 지향 설계의 원칙을 준수
03. Layered Architecture
- 관심사 분리를 위한 코드 구성
- N계층 아키텍처 스타일
- 어플리케이션 내에서 특정 역할을 수행하는 각 계층을 수평적 논리적 계층으로 구성
- 계층을 수정할 수 있고 변경사항이 다른 계층에 영향을 미치지 않도록 설계
04. Clean Architecture
구조
- 1번으로 갈수록 내부,고수준이고, 4번으로 갈수록 외부,저수준임
- 1번으로 갈수록 추상적이고 일반적이며 변경이 적음
- 4번으로 갈수록 구체적이고 특수하며 변경이 잦음
- Entities: 비즈니스 규칙과 엔티티를 정의
- Use Cases: 애플리케이션의 유스케이스를 정의
- Interface Adapters: 유스케이스와 외부 인터페이스. Controllers, Presenters, Gateways 등을 포함
- Frameworks & Drivers: 외부 프레임워크, 데이터베이스, UI 등
특징
- 외부기관에 대한 독립적
- UI 독립적
- 프레임워크 독립성
- 테스트 용이성
장점
- 쉬운 개발/ 디버깅/ 배포
- 느슨하게 결합된 독립계틍
- 우연한 논리적 계층
- 테스트 용이하고 독립적이며 다른 라이브러리로 변경가능
단점
- 모든계층을 수정하는데 필요한 비즈니스 로직구현 코드
- 확장성에 문제가 있는 Monolithic Architecture
Reference
[MSA]Monolithic Architecture
https://yjinheon.netlify.app/posts/03be/msa/msa_03_monolithic_architecture/