Files
ECO2/ArinWarev1/WebServer
2025-10-04 22:13:51 +09:00
..
2025-10-04 22:13:51 +09:00
2025-10-04 22:13:51 +09:00
2025-10-04 22:13:51 +09:00
2025-10-04 22:13:51 +09:00
2025-10-04 22:13:51 +09:00
2025-10-04 22:13:51 +09:00

OWIN 정적 파일 호스팅 서버

ECO2 프로젝트에 OWIN 기반 내장 웹 서버를 추가하여 HTML 리포트 및 정적 파일을 호스팅할 수 있습니다.

설치 방법

1. NuGet 패키지 설치

Visual Studio에서 Package Manager Console을 열고 다음 명령을 실행하세요:

# 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에서 프로젝트를 다시 로드하면 자동으로 인식됩니다.

사용 방법

기본 사용법

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에 다음 코드를 추가:

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 리포트 생성 및 표시

' 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 포트를 사용 중일 수 있습니다. 다른 포트를 사용하세요:

Dim server As New StaticFileServer(wwwrootPath, 58124)

"관리자 권한이 필요합니다" 오류

일부 환경에서는 HTTP.sys 리스너 등록에 관리자 권한이 필요할 수 있습니다. 다음 명령을 관리자 권한 명령 프롬프트에서 실행:

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 파일을 참고하세요.

참고 자료