# Enterprise Admin Studio - 아키텍처 설계 문서 (ARCHITECTURE.md) ## 1. 개요 (Overview) **Enterprise Admin Studio**는 Windows 및 기업 인프라의 3대 핵심 컴포넌트인 **Active Directory (AD DS)**, **NetApp ONTAP 스토리지 (Qtree, Quota, Share)**, **Microsoft SQL Server**를 단일 화면에서 통합 모니터링 및 제어할 수 있는 모던 UI 기반의 관리 콘솔입니다. 본 프로젝트는 **PowerShell 7 / Windows PowerShell 5.1**과 **.NET WPF (XAML)** 기술을 기반으로 구축되었으며, 차후 엔터프라이즈 환경에서 필요 시 **C# (.NET 8+ / WPF / WinUI 3)** 환경으로의 100% 무손실 전환이 가능하도록 철저한 계층 분리(Separation of Concerns) 아키텍처를 채택했습니다. --- ## 2. 전체 시스템 구조도 (System Architecture) ```mermaid flowchart TD subgraph Presentation_Layer ["Presentation Layer (UI/XAML)"] MW["MainWindow.xaml\n(Fluent Dark Frame, Sidebar Navigation, Mode Badge)"] Styles["Styles/Theme.xaml\n(Color Palette, Modern Controls, Icons)"] subgraph Views ["Views (Dynamic UserControls)"] V1["DashboardView.xaml\n(KPI Cards, Audit Grid)"] V2["ActiveDirectoryView.xaml\n(User Grid, Detail Inspector)"] V3["NetAppView.xaml\n(Qtree, Quota, CIFS/NFS Tabs)"] V4["SqlDatabaseView.xaml\n(DB Grid, T-SQL Console)"] V5["SettingsView.xaml\n(Endpoint Config, Diagnostic)"] end end subgraph Application_Core ["Application Core (PowerShell Routing & Cache)"] Entry["Start-App.ps1\n(Application Entrypoint & Event Dispatcher)"] Router["Page Navigator & ViewCache\n(Fast Instant Page Switching)"] Config["config.json & ConfigService.ps1\n(Persistent Configuration Engine)"] end subgraph Service_Layer ["Service / Business Logic Layer (Modules)"] AD_SVC["ADService.ps1\n[IActiveDirectoryService]"] NETAPP_SVC["NetAppService.ps1\n[INetAppStorageService]"] SQL_SVC["SqlService.ps1\n[ISqlServerService]"] end subgraph Infrastructure_Targets ["Target Enterprise Infrastructure"] DC["Active Directory Domain Controller\n(LDAP / LDAPS Port 389/636)"] ONTAP["NetApp ONTAP Cluster\n(REST API v2 / HTTPS 443)"] MSSQL["MS SQL Server Instance\n(TDS Protocol / TCP 1433)"] end MW --> Router Router --> Views Styles -.-> MW Styles -.-> Views Entry --> Router Entry --> Config Views --> AD_SVC Views --> NETAPP_SVC Views --> SQL_SVC AD_SVC --> DC NETAPP_SVC --> ONTAP SQL_SVC --> MSSQL ``` --- ## 3. 계층별 상세 설계 (Layer Details) ### 3.1 Presentation Layer (XAML UI) - **Fluent Modern Dark 테마**: - 배경: `#0F172A` (Slate Dark), 카드/사이드바: `#1E293B`, 액센트: `#3B82F6` / `#6366F1` - 표준 WPF 컨트롤 템플릿(`Button`, `TextBox`, `RadioButton`, `DataGrid`, `TabControl`, `Border`)을 모던 라운딩 처리 - **네이티브 아이콘 시스템**: - 외부 폰트 설치나 대용량 SVG 의존성 없이 Windows 10/11 기본 탑재 글꼴인 `Segoe MDL2 Assets`의 유니코드 글리프(예: ``, ``, ``) 사용 - **Dynamic View Hosting**: - `MainWindow.xaml` 내 `ContentControl x:Name="MainContentHost"`에 각 View를 동적 인스턴스화 - `ViewCache` 해시테이블을 두어 최초 로드 후 페이지 전환 시 재파싱 비용을 제거하여 네이티브 수준의 부드러운 전환 구현 ### 3.2 Service & Integration Layer (비즈니스 로직) #### A. Active Directory 연동 (`ADService.ps1`) - **기술 스택**: Windows 기본 내장 `.NET System.DirectoryServices` - **프로토콜**: LDAP (Port 389) 또는 LDAPS (Port 636) - **동작 원리**: 1. `DirectoryEntry`를 통해 지정된 도메인 컨트롤러 또는 기본 도메인에 바인딩 (자격증명 지원) 2. `DirectorySearcher`를 이용해 `(&(objectCategory=person)(objectClass=user))` 필터링 및 페이징(PageSize = 1000) 처리 3. 속성 매핑: - `userAccountControl`: `0x0002` 비트 연산을 통한 활성/비활성 판정 및 변경 - `lockoutTime`: 정수값을 통한 잠금 여부 확인 및 `lockoutTime = 0` 커밋을 통한 계정 잠금 해제 - `Invoke("SetPassword", ...)`: 안전한 비밀번호 초기화 및 `pwdLastSet = 0` 강제 변경 플래그 4. **Fallback 메커니즘**: AD 환경이 아닌 로컬 PC나 개발 환경에서는 자동으로 Mock 데이터 및 데모 시뮬레이션으로 안전하게 동작 #### B. NetApp ONTAP 스토리지 연동 (`NetAppService.ps1`) - **기술 스택**: NetApp ONTAP 9.6+ 표준 REST API (HTTPS RESTful) - **엔드포인트 매핑**: - Qtree 관리: `GET /api/storage/qtrees`, `POST /api/storage/qtrees` - Quota 한도/모니터링: `GET /api/storage/quota/rules`, `GET /api/storage/quota/reports` - CIFS 파일 공유: `GET /api/protocols/cifs/shares`, `POST /api/protocols/cifs/shares` - NFS 내보내기 정책: `GET /api/protocols/nfs/export-policies` - 클러스터 상태 진단: `GET /api/cluster` - **보안 및 인증**: HTTP Basic Authentication 및 자체 서명 SSL 인증서 무시 처리(`IgnoreSslErrors`) 옵션 내장 #### C. MS SQL Server 연동 (`SqlService.ps1`) - **기술 스택**: .NET 기본 제공 `System.Data.SqlClient` - **프로토콜**: Tabular Data Stream (TDS, Port 1433) - **동작 원리**: 1. Windows 통합 인증(Integrated Security) 및 SQL Server 계정(User ID / Password) 인증 동시 지원 2. `sys.databases`, `sys.master_files`, `msdb.dbo.backupset` 카탈로그 뷰를 조인하여 실제 데이터베이스 상태, 용량, 복구 모델, 최종 Full 백업 일시 동적 집계 3. `BACKUP DATABASE [{0}] TO DISK = '{1}' WITH INIT, STATS = 10` 실제 데이터베이스 백업 수행 4. T-SQL 간이 쿼리 실행기: 사용자 입력을 파싱하여 `SqlDataAdapter`로 DataTable에 적재 후 결과 포맷팅 --- ## 4. C# (.NET 8 / WPF / WinUI 3) 마이그레이션 로드맵 향후 C# 솔루션으로 승격(Promote) 시 100% 매핑되도록 설계되었습니다. ### 4.1 XAML 파일의 무수정 재사용 `Views/*.xaml` 및 `Styles/Theme.xaml`은 표준 WPF 문법을 준수합니다. C# 프로젝트에 그대로 포함하고 아래와 같이 코드 비하인드만 연결하면 됩니다: ```csharp namespace ModernAdminStudio.Views; public partial class ActiveDirectoryView : UserControl { public ActiveDirectoryView() { InitializeComponent(); } } ``` ### 4.2 MVVM 및 DI (의존성 주입) 패턴 매핑 ```csharp // Program.cs 또는 App.xaml.cs services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); services.AddTransient(); ``` ### 4.3 서비스 인터페이스 정의서 (C# Blueprint) ```csharp public interface IActiveDirectoryService { Task> GetUsersAsync(string filter); Task UnlockAccountAsync(string samAccountName); Task ResetPasswordAsync(string samAccountName, string newPassword); Task SetAccountStateAsync(string samAccountName, bool enable); Task TestConnectionAsync(); } public interface INetAppStorageService { Task> GetQtreesAsync(string svm); Task> GetQuotasAsync(string svm); Task> GetSharesAsync(string svm); Task CreateQtreeAsync(CreateQtreeRequest request); Task CreateShareAsync(CreateShareRequest request); Task TestConnectionAsync(); } public interface ISqlServerService { Task> GetDatabasesAsync(); Task BackupDatabaseAsync(string databaseName, string targetPath); Task ExecuteQuerySnippetAsync(string query); Task TestConnectionAsync(); } ```