OPC UA Manager
원본 Program.cs (단일 파일)를 ASP.NET Core Web API + 프론트엔드 프로젝트로 분리한 버전입니다.
프로젝트 구조
OpcUaManager/
├── OpcUaManager.csproj
├── Program.cs ← ASP.NET Core 진입점, DI 등록
├── appsettings.json
├── init_db.sql ← PostgreSQL 테이블 초기화
│
├── Models/
│ └── Models.cs ← DTO / 도메인 모델 전체
│
├── Services/
│ ├── CertService.cs ← X.509 인증서 생성 (pki/ 폴더 체계 유지)
│ ├── OpcSessionService.cs ← OPC UA 세션 관리 (Singleton)
│ ├── OpcCrawlerService.cs ← HoneywellCrawler 로직 → Service 분리
│ └── DatabaseService.cs ← PostgreSQL 저장/조회 (SaveToDatabase 패턴 유지)
│
├── Controllers/
│ ├── CertController.cs ← POST /api/cert/generate
│ ├── SessionController.cs ← POST /api/session/connect|disconnect
│ ├── CrawlerController.cs ← POST /api/crawler/start
│ └── DatabaseController.cs ← POST /api/database/write|query|test
│
└── wwwroot/
└── index.html ← 프론트엔드 (단일 HTML, 백엔드 API 연결)
원본 코드와의 대응 관계
| 원본 코드 위치 | 분리된 위치 |
|---|---|
Directory.CreateDirectory("pki/...") |
CertService.EnsurePkiDirectories() |
new X509Certificate2(pfxPath, ...) |
CertService.LoadPfx() |
ApplicationConfiguration { ... } |
OpcSessionService.ConnectAsync() |
DiscoveryClient → Session.Create |
OpcSessionService.ConnectAsync() |
HoneywellCrawler.BrowseRecursiveAsync |
OpcCrawlerService.CrawlAsync() |
HoneywellCrawler.SaveToCsv |
OpcCrawlerService.SaveToCsvAsync() |
SaveToDatabase(tagName, val, status) |
DatabaseService.SaveToDatabaseAsync() |
for (int i = 0; i < 5; i++) { ... } |
DatabaseService.WriteLoopAsync() |
원본 인증서 체계 유지 항목:
pki/own/certs/,pki/trusted/certs/,pki/issuers/certs/,pki/rejected/certs/폴더 구조X509KeyStorageFlags.Exportable | MachineKeySetAutoAcceptUntrustedCertificates = true,AddAppCertToTrustedStore = true- OPC UA SAN(Subject Alternative Name) 에
ApplicationUri포함 (필수 요구사항)
실행 방법
1. PostgreSQL 초기화
createdb opcdb
psql -U postgres -d opcdb -f init_db.sql
2. 백엔드 실행
cd OpcUaManager
dotnet restore
dotnet run
# → http://localhost:5000
# → Swagger: http://localhost:5000/swagger
3. 프론트엔드 접속
브라우저에서 http://localhost:5000 접속
(또는 wwwroot/index.html 을 별도 Live Server로 열고 API URL을 http://localhost:5000 으로 설정)
API 엔드포인트 요약
POST /api/cert/generate 인증서 생성
GET /api/cert/list PFX 목록 조회
GET /api/cert/download/{name} PFX 다운로드
POST /api/session/connect OPC 연결
POST /api/session/disconnect OPC 연결 해제
GET /api/session/status 세션 상태
POST /api/crawler/start 노드 탐사 시작
GET /api/crawler/csv CSV 다운로드
POST /api/database/test DB 연결 테스트
POST /api/database/init 테이블 초기화
POST /api/database/write OPC 읽기 + DB 저장 (N회)
POST /api/database/query 최근 레코드 조회
의존 패키지
OPCFoundation.NetStandard.Opc.Ua.Client 1.5.x
Npgsql 8.0.x
Swashbuckle.AspNetCore 6.6.x