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 낮음 낮음

 

+ Recent posts