# OWIN 정적 파일 호스팅 서버 ECO2 프로젝트에 OWIN 기반 내장 웹 서버를 추가하여 HTML 리포트 및 정적 파일을 호스팅할 수 있습니다. ## 설치 방법 ### 1. NuGet 패키지 설치 Visual Studio에서 Package Manager Console을 열고 다음 명령을 실행하세요: ```powershell # ECO2_2025V1 프로젝트를 기본 프로젝트로 선택 후 실행 Install-Package Microsoft.Owin -Version 2.1.0 Install-Package Microsoft.Owin.Host.HttpListener -Version 2.1.0 Install-Package Microsoft.Owin.Hosting -Version 2.1.0 Install-Package Microsoft.Owin.StaticFiles -Version 2.1.0 Install-Package Owin -Version 1.0 ``` 또는 패키지 관리자 UI에서 다음 패키지를 검색하여 설치: - Microsoft.Owin (2.1.0) - Microsoft.Owin.Host.HttpListener (2.1.0) - Microsoft.Owin.Hosting (2.1.0) - Microsoft.Owin.StaticFiles (2.1.0) - Owin (1.0) ### 2. 프로젝트에 파일 추가 다음 파일들이 `WebServer` 폴더에 추가되었습니다: - `StaticFileServer.vb` - 메인 서버 클래스 - `Startup.vb` - OWIN 시작 구성 - `Example_WebServer_Usage.vb` - 사용 예제 Visual Studio에서 프로젝트를 다시 로드하면 자동으로 인식됩니다. ## 사용 방법 ### 기본 사용법 ```vb Imports Eco2Ar.WebServer Imports System.IO ' 1. 서버 인스턴스 생성 Dim wwwrootPath As String = Path.Combine(Application.StartupPath, "wwwroot") Dim server As New StaticFileServer(wwwrootPath, 58123) ' 2. 서버 시작 server.Start() ' 3. 브라우저에서 열기 server.OpenInBrowser() ' 4. 사용 후 서버 중지 server.Stop() ``` ### MdiMain에 통합 `MdiMain.vb`에 다음 코드를 추가: ```vb Public Class MdiMain Private webServer As StaticFileServer Private Sub MdiMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' ... 기존 코드 ... ' 웹 서버 시작 Try Dim wwwPath = Path.Combine(Application.StartupPath, "wwwroot") webServer = New StaticFileServer(wwwPath) webServer.Start() Catch ex As Exception Debug.WriteLine("웹 서버 시작 실패: " & ex.Message) End Try End Sub Private Sub MdiMain_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing ' ... 기존 코드 ... ' 웹 서버 정리 If webServer IsNot Nothing Then webServer.Stop() webServer.Dispose() End If End Sub End Class ``` ### HTML 리포트 생성 및 표시 ```vb ' HTML 리포트 빌더 사용 Dim builder As New HtmlReportBuilder("건물 에너지 분석 리포트") builder.AddSection("1차 에너지 소요량") builder.StartTable("항목", "값", "단위") builder.AddRow("난방", "123.45", "kWh/m²·year") builder.AddRow("냉방", "67.89", "kWh/m²·year") builder.EndTable() builder.EndSection() Dim html As String = builder.Build() ' 파일 저장 Dim reportPath As String = Path.Combine(webServer.RootPath, "report.html") File.WriteAllText(reportPath, html, System.Text.Encoding.UTF8) ' 브라우저에서 열기 webServer.OpenFileInBrowser("report.html") ``` ## 폴더 구조 ``` C:\eco2\debug_2016\ ├─ Eco2Ar.exe └─ wwwroot\ # 정적 파일 루트 디렉토리 ├─ index.html # 기본 페이지 ├─ report.html # 생성된 리포트 ├─ css\ │ └─ styles.css ├─ js\ │ └─ scripts.js └─ images\ └─ logo.png ``` ## 주요 기능 ### StaticFileServer 클래스 - **Start()** - 웹 서버 시작 - **Stop()** - 웹 서버 중지 - **OpenInBrowser()** - 기본 브라우저에서 루트 URL 열기 - **OpenFileInBrowser(relativePath)** - 특정 파일을 브라우저에서 열기 - **GetFileUrl(relativePath)** - 파일의 전체 URL 반환 - **IsRunning** - 서버 실행 상태 확인 - **BaseUrl** - 서버 URL (http://localhost:58123) - **RootPath** - 정적 파일 루트 경로 ### HtmlReportBuilder 클래스 간단한 HTML 리포트를 코드로 생성할 수 있는 헬퍼 클래스입니다. ## 포트 정보 - **기본 포트**: 58123 (일반적으로 사용하지 않는 포트) - 필요 시 생성자에서 다른 포트 지정 가능: `New StaticFileServer(path, 9999)` ## 보안 주의사항 - 이 웹 서버는 **localhost**에서만 접근 가능합니다 (외부 접근 불가) - 민감한 정보를 wwwroot에 저장하지 마세요 - 필요한 경우에만 서버를 실행하고 사용 후 중지하세요 ## 문제 해결 ### "포트가 이미 사용 중입니다" 오류 다른 프로그램이 58123 포트를 사용 중일 수 있습니다. 다른 포트를 사용하세요: ```vb Dim server As New StaticFileServer(wwwrootPath, 58124) ``` ### "관리자 권한이 필요합니다" 오류 일부 환경에서는 HTTP.sys 리스너 등록에 관리자 권한이 필요할 수 있습니다. 다음 명령을 관리자 권한 명령 프롬프트에서 실행: ```cmd netsh http add urlacl url=http://+:58123/ user=Everyone ``` ### 패키지 설치 오류 .NET Framework 4.0 타겟 프로젝트이므로 반드시 2.x 버전의 OWIN 패키지를 사용해야 합니다. 최신 버전(4.x)은 .NET Framework 4.5 이상이 필요합니다. ## 예제 코드 위치 더 자세한 사용 예제는 `Example_WebServer_Usage.vb` 파일을 참고하세요. ## 참고 자료 - [OWIN 공식 문서](http://owin.org/) - [Microsoft.Owin 문서](https://docs.microsoft.com/en-us/aspnet/aspnet/overview/owin-and-katana/)