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

191 lines
5.4 KiB
Markdown

# 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/)