ABP 프레임워크 기반 EventHub 솔루션 탐색

이 문서에서는 ABP 프레임워크를 활용한 실제 도메인 기반 애플리케이션인 EventHub의 아키텍처와 실행 방식을 분석합니다. 이는 오픈소스로 공개된 완전한 풀스택 예제이며, openeventhub.com에서 실시간으로 확인 가능합니다. 커뮤니티 기여를 위한 지속적 통합/배포(CI/CD) 파이프라인이 구축되어 있어, 개발 진행 상황에 따라 실시간 업데이트가 이루어집니다.

1. 시스템 개요

EventHub은 사용자가 온라인으로 행사(이벤트)를 생성하고 관리할 수 있는 플랫폼입니다. 주요 기능은 다음과 같습니다:

  • 사용자 중심의 행사 등록 및 참여
  • 행사 정보 조회 및 알림 메일 발송
  • 조직 소유자의 행사 관리 기능

이 플랫폼은 여러 독립된 서비스로 구성되어 있으며, 각각의 목적에 맞게 설계되었습니다.

2. 전체 아키텍처 구성

해당 솔루션은 다음과 같은 6개의 독립형 애플리케이션과 하나의 데이터 저장소로 구성됩니다:

  • 인증 서버 (IdentityServer): 사용자 로그인, 회원가입, 역할 관리를 담당하는 단일 진입점(Single Sign-On) 서비스. 기본적으로 IdentityServer 라이브러리 기반으로 동작하며, 모든 다른 앱과 공통 인증을 제공합니다.
  • 주 포털 (Main Website): 최종 사용자가 행사 생성 및 참가를 수행하는 웹사이트. Razor Pages 기반으로 구현되며, 백엔드는 Main HTTP API를 호출합니다.
  • 관리자 대시보드 (Admin Portal): 관리자가 조직, 행사, 사용자 등을 관리할 수 있는 블레이저 웹 어셈블리(Blazor WebAssembly) 기반 인터페이스입니다.
  • Main HTTP API: 주 포털에서 사용되는 애플리케이션 계층의 핵심 로직을 처리하는 백엔드 서비스.
  • Admin HTTP API: 관리자 인터페이스에서 사용되는 별도의 애플리케이션 계층 서비스.
  • 백그라운드 작업 서비스: 스케줄링된 작업(예: 알림 전송, 데이터 정리)을 처리하는 콘솔 애플리케이션.
  • 데이터베이스: PostgreSQL 기반의 관계형 데이터베이스로, 모든 도메인 데이터를 저장합니다. 또한 Redis를 통해 분산 캐싱을 지원합니다.

3. 핵심 아키텍처 구조

전체 솔루션은 다중 계층 모델로 구성되어 있으며, 다음의 폴더 구조를 따릅니다:

공통 레이어 (common)

  • EventHub.Domain: 엔티티, 도메인 서비스, 비즈니스 규칙을 포함하는 도메인 계층.
  • EventHub.Domain.Shared: 모든 계층에서 공유되는 상수, 유틸리티 클래스.
  • EventHub.EntityFrameworkCore: EF Core 기반의 DbContext, 매핑 설정, 데이터베이스 마이그레이션, 저장소 구현.
  • EventHub.DbMigrator: 초기 데이터(예: 관리자 계정, 권한 설정)를 생성하기 위한 콘솔 앱.
  • EventHub.BackgroundServices: 백그라운드 작업(예: 이메일 알림, 정기적 정리)을 처리하는 서비스.

웹 포털 (www)

  • EventHub.Application: 주 포털의 비즈니스 로직을 처리하는 응용 서비스.
  • EventHub.Application.Contracts: 클라이언트와 통신을 위한 인터페이스 및 데이터 전송 객체(DTO).
  • EventHub.HttpApi: API 컨트롤러를 포함하며, 응용 서비스를 감싸는 간단한 래퍼.
  • EventHub.HttpApi.Host: HTTP API를 호스팅하는 프로세스.
  • EventHub.HttpApi.Client: UI에서 동적으로 생성된 클라이언트 프록시를 통해 원격 호출을 수행.
  • EventHub.Web: Razor Pages 기반의 사용자 인터페이스. 데이터베이스에 직접 연결하지 않고, Main HTTP API를 호출합니다.
  • EventHub.Web.Theme: ABP의 테마 시스템을 이용해 공통 디자인을 재사용하는 테마 라이브러리.

관리자 포털 (admin)

  • EventHub.Admin.Application: 관리자 기능의 응용 서비스 구현.
  • EventHub.Admin.Application.Contracts: UI와 공유되는 서비스 인터페이스 및 DTO.
  • EventHub.Admin.HttpApi: 관리자 페이지에서 사용하는 컨트롤러 집합.
  • EventHub.Admin.HttpApi.Host: 관리자용 백엔드 서비스 호스팅.
  • EventHub.Admin.HttpApi.Client: Blazor WebAssembly 클라이언트에서 원격 호출을 위한 프록시.
  • EventHub.Admin.Web: 브라우저에서 실행되는 Blazor WebAssembly 애플리케이션.

인증 서버 (account)

  • EventHub.IdentityServer: 모든 애플리케이션의 인증 중심 서비스. OpenID Connect 프로토콜을 기반으로 사용자 인증을 수행.

4. 프로젝트 간 의존성 관계

각 애플리케이션은 명확한 책임 분담을 위해 독립적인 의존성 구조를 유지합니다:

  • 주 포털 (Web): Web.ThemeHttpApi.Client에 의존. HttpApi.Client는 동적 프록시를 통해 Main HTTP API에 접근.
  • Main HTTP API (Host): Application, EntityFrameworkCore, Application.Contracts에 의존하여 비즈니스 로직과 데이터 접근을 처리.
  • 관리자 포털 (Admin.Web): Admin.HttpApi.Client를 통해 Admin HTTP API를 호출.
  • 백그라운드 서비스: EntityFrameworkCoreDomain 계층에 접근하여 데이터베이스 작업을 수행.

5. 개발 환경 준비 및 실행 방법

로컬에서 솔루션을 실행하려면 다음 절차를 따르세요:

Git 저장소 복제

git clone https://github.com/volosoft/eventhub.git

기반 환경 설정

다음 두 가지 서비스가 필요합니다:

  • PostgreSQL: 데이터베이스 저장소.
  • Redis: 분산 캐싱.

etc/docker 폴더 내의 docker-compose.yml 파일을 사용하면 쉽게 실행할 수 있습니다:

cd etc/docker
.\up.ps1

데이터베이스 초기화

EventHub.DbMigrator 프로젝트를 실행하여 스키마 생성 및 초기 데이터 삽입:

dotnet run --project src/EventHub.DbMigrator

애플리케이션 실행 순서

  1. EventHub.IdentityServer
  2. EventHub.HttpApi.Host
  3. EventHub.Web
  4. EventHub.Admin.HttpApi.Host
  5. EventHub.Admin.Web
  6. EventHub.BackgroundServices

로그인 시 사용자명: admin, 비밀번호: 1q2w3E*

TYE를 통한 자동 실행 (추천)

Visual Studio에서 여러 프로젝트를 수동으로 시작하는 대신, Tye를 사용하면 훨씬 간편하게 실행 가능합니다:

# Tye 설치
dotnet tool install -g Microsoft.Tye --version "0.10.0-alpha.21420.1"

# 애플리케이션 실행
tye run

실행 후 브라우저에서 http://127.0.0.1:8000에 접속하면 실시간 상태 모니터링 및 로그 확인이 가능합니다.

6. 요약

EventHub는 ABP 프레임워크의 강력한 분산 애플리케이션 설계 패턴을 보여주는 완전한 사례입니다. 다층 아키텍처, 공유 도메인 계층, 분리된 응용 계층, 동적 클라이언트 프록시, 그리고 다양한 배포 환경을 지원하는 구조는 실제 운영 시스템 개발에 매우 유용합니다. 이후 장에서는 이러한 구성 요소들을 더 깊이 있게 탐구하며, 모듈화, 데이터베이스 통합, 프록시 기술 등 ABP의 핵심 개념을 설명할 예정입니다.

태그: ABP Framework ASP.NET Core Blazor WebAssembly IdentityServer PostgreSQL

7월 24일 23:48에 게시됨