1. 🧱 Layered Architecture (계층형 아키텍처)
✅ 정의
Layered Architecture는 소프트웨어를 기능에 따라 수평적인 계층(Layer)으로 분리하는 구조입니다. 일반적으로 Presentation Layer, Business Logic Layer, Data Access Layer 등의 계층으로 나뉩니다. 가장 대표적인 형태는 MVC(Model-View-Controller)입니다.
🌟 장점
- 책임 분리 (Separation of Concerns): 각 계층이 맡은 역할이 명확해서 코드 관리가 쉬움.
- 유지보수 용이: 특정 계층만 수정하면 되기 때문에 변경에 유연.
- 테스트 용이: 각 계층 단위로 테스트 가능.
⚠️ 단점
- 계층 간 의존성이 강해질 수 있음.
- 성능 저하: 모든 요청이 모든 계층을 거쳐야 하는 경우 오버헤드 발생.
- 유연성 부족: 특정 기능이 여러 계층에 걸쳐야 할 경우 설계가 복잡해짐.
📌 예시
- MVC 패턴:
- Model: 데이터 및 비즈니스 로직
- View: 사용자 인터페이스
- Controller: 사용자 입력 처리
계층형 아키텍처
2. ⚡ Event-driven Architecture (이벤트 기반 아키텍처)
✅ 정의
Event-driven Architecture는 이벤트(Event)를 중심으로 구성된 아키텍처입니다. 컴포넌트 간에 직접적인 호출 없이, 이벤트 발행과 구독을 통해 비동기적으로 동작합니다.
🌟 장점
- 높은 확장성: 이벤트 핸들러를 독립적으로 확장 가능.
- 비동기 처리로 빠른 응답 가능.
- 컴포넌트 간 결합도 낮음: 유연하고 유지보수 용이.
⚠️ 단점
- 디버깅 어려움: 이벤트 흐름 추적이 복잡함.
- 테스트 어려움: 이벤트 순서와 타이밍을 맞춰야 해서 테스트 복잡.
- 에러 핸들링 어려움: 어디서 문제가 발생했는지 추적이 힘듦.
📌 예시
- Kafka, RabbitMQ, AWS SNS/SQS
- 쇼핑몰 주문 시스템: 주문 생성 → 이벤트 발생 → 결제/재고/알림 처리
이벤트 기반 아키텍처
3. 🧩 Microkernel Architecture (플러그인 기반 아키텍처)
✅ 정의
Microkernel Architecture는 핵심 기능(Core System)과 확장 기능(Plugin)으로 나눠서 설계하는 방식입니다. 핵심 기능은 작고 안정적이며, 플러그인을 통해 기능을 유연하게 확장할 수 있습니다.
🌟 장점
- 유연한 확장성: 필요한 기능만 플러그인 형태로 추가 가능.
- 핵심 시스템 안정성 확보: 플러그인 문제로 전체 시스템이 영향을 받지 않음.
- 빠른 배포 및 테스트: 플러그인 단위로 개발 가능.
⚠️ 단점
- 플러그인 관리 복잡: 의존성 및 버전 충돌 가능성 있음.
- 커뮤니케이션 비용 증가: 핵심과 플러그인 간 인터페이스 설계 필요.
- 성능 이슈: 플러그인 수가 많아지면 로딩 및 실행 성능 저하 가능.
📌 예시
- IDE (Eclipse, IntelliJ): 기본 에디터 + 플러그인 (Java, Python 등)
- 브라우저: 크롬 확장 프로그램
플러그인 기반 아키텍처
4. 🧬 Microservices Architecture (마이크로서비스 아키텍처)
✅ 정의
Microservices Architecture는 애플리케이션을 여러 개의 독립된 서비스로 나누어 개발하는 방식입니다. 각 서비스는 작고 독립적이며, 자신의 데이터와 비즈니스 로직을 가짐.
🌟 장점
- 독립 배포 가능: 서비스 단위로 배포/스케일링 가능.
- 유연한 기술 스택 사용: 서비스마다 다른 언어나 DB 사용 가능.
- 장애 격리: 하나의 서비스 장애가 전체에 영향을 미치지 않음.
⚠️ 단점
- 운영 복잡성: 서비스가 많아질수록 인프라, 배포, 모니터링 복잡.
- 데이터 일관성 유지 어려움: 트랜잭션 관리가 어려움.
- 네트워크 비용 증가: 서비스 간 통신 빈번.
📌 예시
- Netflix, Amazon, 쿠팡 등 대규모 플랫폼
- 쇼핑몰: 주문 서비스, 결제 서비스, 사용자 서비스 등 분리 운영
마이크로서비스 아키텍처
5. 🏛️ Monolithic Architecture (모놀리식 아키텍처)
✅ 정의
모놀리식 아키텍처는 하나의 거대한 코드베이스 안에 모든 기능(프론트, 백엔드, DB 접근 등)이 포함된 구조입니다. 전통적인 웹 애플리케이션에서 많이 사용되었습니다.
🌟 장점
- 개발/배포 단순: 하나의 빌드/배포로 끝남.
- 성능 좋음: 내부 호출이기 때문에 네트워크 오버헤드 적음.
- 초기 개발 속도 빠름: 간단한 프로젝트에 적합.
⚠️ 단점
- 규모가 커지면 유지보수 어려움: 코드 변경 시 영향 범위 넓음.
- 확장성 제한: 특정 기능만 확장하기 어려움.
- 배포 리스크: 작은 변경에도 전체 시스템 재배포 필요.
📌 예시
- 초기 스타트업 서비스 대부분
- JSP 기반의 웹 애플리케이션
모놀리식 아키텍처
✅ 마무리: 어떤 아키텍처를 선택할까?
아키텍처 | 확장성 | 복잡성 | 초기에 적합? | 대규모에 적합? |
Layered | 중 | 낮음 | ✅ | ✅ |
Event-driven | 높음 | 중~높음 | ❌ | ✅ |
Microkernel | 중~높음 | 중 | ✅ | ✅ |
Microservices | 최고 | 높음 | ❌ | ✅ |
Monolithic | 낮음 | 낮음 | ✅ | ❌ |