반응형
모놀리식 아키텍처(Monolithic Architecture)란?
모놀리식 아키텍처는 전통적인 소프트웨어 아키텍처 패턴으로, 하나의 애플리케이션 내에 모든 비즈니스 로직이 통합되어 있는 형태를 말합니다.
특징
- 단일 코드베이스: 모든 기능이 하나의 프로젝트에 통합
- 단일 배포 단위: 전체 애플리케이션이 하나의 단위로 배포
- 공유 데이터베이스: 모든 기능이 하나의 데이터베이스를 공유
- 통합된 개발 환경: 하나의 기술 스택으로 전체 애플리케이션 개발
장점
- 개발의 단순성
- 단일 프로젝트로 관리되어 개발 환경 설정이 간단
- IDE에서 전체 코드를 쉽게 탐색하고 디버깅 가능
- 코드 재사용이 용이
- 쉬운 배포
- 하나의 파일 또는 디렉토리로 배포 가능
- 배포 프로세스가 단순하고 명확
- 성능
- 서비스 간 통신 오버헤드가 없음
- 단일 애플리케이션 내에서 직접 메서드 호출
- 개발 초기 단계에서의 생산성
- 빠른 프로토타이핑과 개발 가능
- 작은 팀에서 효율적인 협업 가능
단점
- 확장성 제한
- 애플리케이션의 일부만 확장하기 어려움
- 전체 애플리케이션을 함께 스케일링해야 함
- 신뢰성 이슈
- 한 부분의 문제가 전체 시스템에 영향을 미칠 수 있음
- 메모리 누수 등의 문제가 전체 시스템을 중단시킬 수 있음
- 기술 스택의 제한
- 전체 애플리케이션이 동일한 기술 스택을 사용해야 함
- 새로운 기술 도입이 어려움
- 유지보수의 어려움
- 코드베이스가 커질수록 복잡도가 증가
- 변경 사항 적용 시 전체 애플리케이션을 재배포해야 함
마이크로서비스 아키텍처(Microservice Architecture)란?
마이크로서비스 아키텍처는 하나의 큰 애플리케이션을 여러 개의 독립적인 서비스로 분리하여 운영하는 소프트웨어 아키텍처 패턴입니다.
특징
- 서비스의 분리: 각 기능이 독립적인 서비스로 운영
- 독립적 배포: 각 서비스가 독립적으로 배포 가능
- API 기반 통신: 서비스 간 통신은 API를 통해 이루어짐
- 데이터 분리: 각 서비스가 자신만의 데이터베이스 운영 가능
장점
1. 높은 확장성
- 특정 서비스만 독립적으로 확장 가능
- 트래픽이 많은 서비스만 선택적으로 스케일 아웃
- 리소스 활용의 효율성 증가
2. 기술 다양성
- 각 서비스마다 최적의 기술 스택 선택 가능
- 새로운 기술 도입이 용이
- 예: 결제 서비스는 Java, 검색 서비스는 Python 사용 가능
3. 장애 격리
- 한 서비스의 장애가 전체 시스템에 영향을 주지 않음
- 부분적 장애 처리 가능
- 시스템 전체의 안정성 향상
4. 유지보수성
- 각 서비스가 작고 독립적이어서 코드 이해가 쉬움
- 특정 서비스만 수정하고 배포 가능
- 새로운 기능 추가가 용이
단점
1. 복잡성 증가
- 분산 시스템 관리의 어려움
- 서비스 간 통신 관리 필요
- 모니터링과 로깅이 더 복잡해짐
2. 데이터 일관성
- 분산된 데이터베이스로 인한 트랜잭션 관리의 어려움
- 데이터 동기화 문제 발생 가능
- Eventually Consistency 고려 필요
3. 운영 비용
- 더 많은 서버와 리소스 필요
- 복잡한 배포 및 운영 환경
- DevOps 팀의 추가적인 노력 필요
4. 테스트의 어려움
- 서비스 간 통합 테스트가 복잡
- 전체 시스템 테스트에 더 많은 시간과 자원 필요
적합한 사용 사례
- 대규모 애플리케이션
- 높은 확장성이 필요한 서비스
- 여러 팀이 독립적으로 개발해야 하는 경우
- 다양한 클라이언트(웹, 모바일, IoT 등) 지원 필요
- 빠른 배포와 업데이트가 필요한 경우
모놀리식 vs 마이크로서비스 아키텍처 비교
구조적 차이
- 모놀리식: 하나의 서버에 모든 비즈니스 로직이 통합
- 마이크로서비스: 비즈니스 로직이 독립된 여러 서버로 분리
주요 차이점
1. 개발 및 배포
- 모놀리식: 전체 서비스를 한 번에 배포
- 마이크로서비스: 각 서비스 독립적으로 배포 가능
2. 기술 스택
- 모놀리식: 하나의 기술 스택 사용
- 마이크로서비스: 서비스별로 다른 기술 스택 사용 가능
3. 데이터 관리
- 모놀리식: 하나의 중앙화된 데이터베이스
- 마이크로서비스: 서비스별 독립적인 데이터베이스
4. 장애 영향
- 모놀리식: 하나의 문제가 전체 서비스 영향
- 마이크로서비스: 문제가 해당 서비스로 격리
5. 리소스 관리
- 모놀리식: 전체 서비스 단위로 스케일링
- 마이크로서비스: 필요한 서비스만 선택적 스케일링
선택 기준
- 모놀리식: 작은 규모, 빠른 개발 필요시
- 마이크로서비스: 대규모, 높은 확장성 필요시
반응형
'BackEnd' 카테고리의 다른 글
[CS] 백엔드 면접 질문 정리하기 - 2 (0) | 2025.02.24 |
---|---|
[CS] 웹 서버(WS)와 웹 어플리케이션 서버(WAS) (0) | 2025.02.17 |
[Backend] 헥사고날 아키텍처를 예제를 통해 쉽게 이해하기 - 유연하고 확장가능한 설계 (0) | 2025.02.06 |
백엔드 면접 질문 정리하기 - 1 (1) | 2025.01.24 |
FCM(Firebase Cloud Messaging)을 Spring boot에서 테스트 하기 좋은 코드로 만들어보기 (0) | 2025.01.13 |