소프트웨어 아키텍처 패턴
모놀리식(Monolithic) 및 마이크로서비스(Microservices) 아키텍처
모놀리식 아키텍처란?
모놀리식 아키텍처는 모든 코드와 모듈이 하나의 프로젝트 내에 포함된 형태로, 비교적 단순한 구조를 가지고 있다.
모놀리식 아키텍처의 장점
- 개발 및 유지보수가 용이함: 모든 코드가 하나의 프로젝트에 포함되어 있어 전체적인 코드 구조를 쉽게 이해하고 리뷰할 수 있음
- 배포가 간단함: 단일 실행 파일(예: main.py)만 실행하면 애플리케이션을 구동할 수 있음
- 전체적인 코드 가독성이 높음: 프로젝트의 전반적인 구조를 쉽게 파악할 수 있음
모놀리식 아키텍처의 단점
- 확장성 문제: 코드가 증가하고 기능이 많아질수록 전체적인 코드 흐름을 파악하기 어려움
- 코드 변경의 어려움: 하나의 프로젝트 안에 모든 코드가 포함되므로, 작은 변경도 전체 애플리케이션에 영향을 줄 수 있어 유지보수가 어려움
- 개발 속도 저하: 새로운 기능을 추가하려면 기존 코드베이스를 모두 고려해야 하므로 개발 속도가 느려짐
- 패키지 업데이트의 어려움: 특정 라이브러리를 업데이트하면 전체 애플리케이션에 영향을 줄 수 있어 최신 기술 적용이 어려움
마이크로서비스 아키텍처
마이크로서비스 아키텍처는 하나의 소프트웨어를 독립적인 여러 프로젝트(서비스)로 분리하여 관리하는 방식이다.
마이크로서비스의 개념
- 각 기능별 독립적인 마이크로서비스로 분리됨
- 각 서비스는 개별적으로 개발, 배포 및 운영됨
- 시스템이 원활하게 동작하려면 모든 마이크로서비스가 정상적으로 운영되어야 함
- 일반적으로 시스템이 커지고 복잡해질수록 필요성이 증가함
예시: 쇼핑몰 백엔드 시스템
- 사용자(User) 도메인
- 상품(Product) 도메인
- 결제(Payment) 도메인
이 각각의 도메인은 별도로 개발 및 배포되며, 독립적으로 서버를 실행해야 한다.
- User, Product, Payment 서비스는 각자 독립적인 main.py를 실행하여 개별 서버를 구동함
- 이들 서버는 필요할 때 HTTP 기반의 REST API를 통해 서로 통신함
- 예를 들어, Payment 서비스가 User 정보가 필요하면, User 서비스에 REST 요청을 보내 응답을 받음
마이크로서비스는 구조적으로 복잡해 보일 수 있지만, 전체적인 서비스가 커질수록 개발 및 배포 속도를 크게 향상시킬 수 있다.
마이크로서비스 아키텍처의 장점과 단점
장점
- 코드 구조가 명확함: 각 마이크로서비스 단위로 코드 구조가 분리되어 유지보수가 용이함
- 독립적인 서비스 운영 가능: 각 서비스가 독립적으로 동작하므로 전체 시스템과의 강한 결합이 없음
- 빠른 개발 속도: 특정 기능을 변경할 때 다른 서비스에 영향을 주지 않으므로 개발이 빠르게 진행됨
- 병렬 개발 가능: 각 마이크로서비스를 별도의 팀이 담당하여 동시 개발 가능
- 유연한 테스트: 테스트 범위가 서비스 단위로 제한되므로, 테스트 속도가 빠름
- 자원 할당 최적화 가능: CPU, 메모리 등의 자원을 서비스별로 최적화하여 사용할 수 있음
- 독립적인 기술 스택 사용 가능
- User 서비스는 Java,
- Product 서비스는 Python,
- Payment 서비스는 JavaScript 등으로 자유롭게 구성 가능
- 확장성이 용이함: 서비스별로 독립적인 서버를 운영할 수 있어, 특정 기능의 요청이 많을 경우 해당 서비스만 확장할 수 있음
단점
- 테스트 복잡성 증가: 여러 서비스가 연계되므로 통합 테스트가 어려울 수 있음
- 서비스 분할 기준의 어려움: 잘못된 서비스 분리는 서비스 간 연계를 복잡하게 만들고 유지보수 비용을 증가시킬 수 있음
- 전체적인 서비스 구조 파악의 어려움: 개별 서비스 개발에 집중하다 보면 전체적인 시스템 흐름을 놓칠 수 있음
- 높은 통신 비용: 서비스 간 통신이 많아질수록 네트워크 비용 및 응답 시간이 증가할 수 있음
- 분산 시스템의 복잡성: 분산 트랜잭션 처리, 로깅, 모니터링 등의 추가적인 고민이 필요함
그러므로, 초기에 프로젝트 아키텍처를 구축할때, Monlithic 으로 구축하는것이 용이하며, 프로젝트가 커지면서 유지 보수 비용이 증가하면, 점진적으로 Microservice로 전환하는것이 이상적인 전환이라고 볼수 잇다. 또한 이 Microservice 전환시 기능 단위로 분리를 하는것이 중요한것 같다.
'[Personal studies]' 카테고리의 다른 글
[Personal studies] ECG(EKG), EEG 간단정리 (1) | 2025.03.05 |
---|---|
[Personal Studies] HTTP && TCP && IP (0) | 2025.03.03 |
[Personal studies] RESTful API Note (0) | 2025.03.03 |
[Personal studies]LLM(Large Language Model)이란? feat. 간단정리 (0) | 2025.01.24 |
[Personal studies] Agentic AI란? (3) | 2025.01.15 |