feat: ExperionCrawler IIoT OPC UA Data Bridge Infrastructure

Major project initialization and feature implementation:

**Core Features:**
- OPC UA client for Honeywell Experion HS R530 integration
- Real-time data streaming and history data retrieval
- Text-to-SQL query engine with TimeScaleDB
- JSON-based node configuration system
- SQLite database with migration support

**Architecture:**
- Clean architecture with Domain, Application, Infrastructure layers
- ASP.NET Core Web API frontend
- Web UI with real-time visualization
- PKI-based OPC UA authentication (TLS)

**Infrastructure Components:**
- ExperionOpcClient: OPC UA connection management
- ExperionRealtimeService: Real-time data streaming
- ExperionHistoryService: Historical data queries
- TextToSqlService: Natural language to SQL queries
- SqlValidator: SQL injection prevention

**Database:**
- TimescaleDB integration (recommended) or SQLite fallback
- Entity Framework Core with Extenstion methods
- OPCTag, KeyValue tables for data storage

**Security:**
- Certificate-based OPC UA endpoint security
- SSL/TLS encryption for database connections
- Output param binding injection prevention

**Testing:**
- Unit tests for TextToSqlService and SqlValidator
- Integration tests for Korean time range extraction

See REVIEW_REQUEST.md for detailed code review information.
This commit is contained in:
windpacer
2026-04-26 19:28:56 +09:00
parent e34ec08001
commit 77bdcf1f7f
60 changed files with 10948 additions and 227 deletions

145
.roo.md
View File

@@ -1,94 +1,61 @@
[CONTENT_MANAGEMENT_RULES]
1. 작업 시작 시 반드시 Todo List를 작성하세요. 각 항목은 독립 실행 가능해야 합니다.
2. 단일 응답에서 다음 중 하나라도 만족하면 작업을 중단하고 이관 신호를 생성하세요:
- 처리 파일 수 ≥ 5개
- 코드 변경/생성 라인 수 ≥ 200줄
- 논리적 모듈 단위 완료
3. 이관 시 반드시 아래 형식으로 응답을 종료하세요:
[TASK_MIGRATION]
✅ 완료: [목록]
📦 현재 상태: [요약]
🎯 다음 하위작업 지시문: [명확한 프롬프트]
[/TASK_MIGRATION]
4. 이관 신호 이후에는 추가 코딩/분석을 중단하고 사용자의 계속 지시를 기다리세요.
[/CONTENT_MANAGEMENT_RULES]
# Roo 작업 시작 가이드
## 작업 시작 시 필수 절차
1. **`CLAUDE.md` 파일 반드시 읽기**
- 프로젝트 루트의 `CLAUDE.md` 파일을 먼저 읽어서 이전 작업 이력 확인
- 완료된 작업, 현재 진행 중인 작업, 알려진 문제점 파악
- 최근 작업 내용을 바탕으로 현재 작업과 충돌하지 않도록 주의
2. **todo 목록 생성**
- 복잡한 작업은 반드시 `update_todo_list` 도구로 todo 목록 생성
- 각 단계별로 명확한 목표 설정
3. **파일 수정 시 주의**
- `apply_diff` 도구는 정확한 검색/교체 블록 사용
- `read_file` 도구로 정확한 내용 확인 후 수정
## 데이터베이스 연결 정보
### docker container : iiot-timescaledb (주요 목적 DB)
- **Host**: localhost
- **Port**: 5432
- **Database**: iiot_platform
- **Username**: postgres
- **Password**: postgres
- **용도**: TimescaleDB 확장, 시계열 데이터 저장, Text-to-SQL 기능
### Experion DB (데이터 소스)
- **Host**: localhost
- **Port**: 5432
- **Database**: postgres
- **Username**: postgres
- **Password**: postgres
- **용도**: Experion HS R530 메타데이터 조회
## 프로젝트 개요
# 🎯 PROJECT CONTEXT
- **이름**: ExperionCrawler
- **기술 스택**: .NET 8 (C#), PostgreSQL, OPC UA
- **주요 기능**:
- Experion HS R530 DCS 시스템에서 실시간 데이터 크롤링
- OPC UA Client로 Experion HS R530 연결
- OPC UA Server로 외부 시스템 연결 지원
- 데이터 PostgreSQL DB 저장
- CSV 내보내기 기능
- Text-to-SQL 기능 (TimescaleDB)
- **스택**: .NET 8 (C#), PostgreSQL (TimescaleDB), OPC UA
- **아키텍처**: Clean Architecture (`src/Core`, `src/Infrastructure`, `src/Web`)
- **주요 DB**:
- 도커 컨테이너`iiot-timescaledb` 의 (localhost:5432/iiot_platform 테이블): 시계열 저장, Text-to-SQL
## 디렉토리 구조
# 📋 MANDATORY WORKFLOW (최우선 준수)
1. **시작 전 상태 파악**: 프로젝트 루트의 `todo.md`를 먼저 읽고 이력/미완료 작업 확인
2. **Todo List 생성**: 복잡도 ≥2 단계인 작업은 반드시 더 작은 단위로 `todo list` 를 만들것
3. 'todo list'를 완료시 까지, 작은 단위 작업 완료시에는 다음 작은 단위 작업은 반드시 새 작업으로 작업할 것
4. **수정전 백업**: 파일을 수정할 시에는 반드시 파일명에 현재 날짜와 시간을 붙여서 /.rooBackup 폴더에 복사후 수정
5. **안전한 파일 수정**: `apply_diff` 사용 전 무조건 `read_file`로 현재 내용 검증. 정확한 검색/교체 블록만 사용
6. **단계 완료 처리**: 각 Todo 항목 완료 시 즉시 `completed` 표시
# 🔄 CONTEXT MANAGEMENT & TASK MIGRATION (핵심 규칙)
## 1. 이관 트리거 (하단 조건 중 하나라도 충족 시 즉시 중단)
- 논리적 모듈/기능 단위 완료
- 자가 평가 기준: 컨텍스트 누적 부하가 약 70% 이상으로 판단될 때
## 이관 실행 프로토콜
- 현재 상태를 압축 요약하고 **반드시 아래 형식으로 응답을 종료**
- 이관 신호 출력 후 추가 코딩/분석/설명 절대 금지.
## 3. 이관 직전 필수 저장 항목
이관 신호 출력 전 반드시:
1. `task_state.md` 최신화 (미완료 파일 목록, 발견된 문제 전체)
2. 다음 작업자(새 컨텍스트)를 위한 첫 문장 명시:
> "task_state.md를 읽고 [미완료 파일명]부터 이어서 분석하세요"
3. 이관 후 첫 응답에서 task_state.md 확인 없이 작업 시작 금지
# 🧠 LARGE TASK ANTI-CORRUPTION RULES
## 대규모 작업 (파일 5개 이상 분석/수정) 필수 규칙
### 반드시 외부 파일을 진행 상태 저장소로 사용
- 분석/수정 작업 시작 즉시 `task_state.md` 생성
- 각 파일 처리 완료마다 즉시 결과를 `task_state.md`에 기록
- 컨텍스트 압축/이관 발생 시 **첫 번째 행동은 `task_state.md` 읽기**
- 기억(컨텍스트)을 절대 진실 소스로 사용 금지
### task_state.md 형식
```
src/
├── Core/
│ ├── Application/ (DTOs, Services, Interfaces)
│ └── Domain/ (Entities)
├── Infrastructure/ (Certificates, Csv, Database, OpcUa)
└── Web/ (Controllers, Program.cs, wwwroot)
## 작업명:
## 시작시각:
## 전체 대상: [파일 목록]
### 완료된 파일
- [x] src/Core/xxx.cs → 문제없음
- [x] src/Infrastructure/yyy.cs → HIGH: DB연결 미해제
### 미완료 파일
- [ ] src/Web/zzz.cs
### 발견된 문제 누적
| 파일 | 심각도 | 내용 |
|------|--------|------|
```
## 작업 규칙
- 복잡한 작업은 항상 todo 목록 먼저 생성
- 각 단계 시작 전 todo 목록 확인
- 단계 완료 후 즉시 completed 표시
- 코드 수정 전 반드시 `read_file`으로 현재 내용 확인
## 컨텍스트 관리
### 컨텍스트 캐시 최적화
- 컨텍스트 캐시가 70%를 넘으면 작업중이던 정보를 새로운 하위작업에게 넘기고 시작
- 정보의 질 저하를 방지하기 위해 컨텍스트 압축 수행
- 단일 항목 작업 중에도 컨텍스트가 가득차면 하위작업으로 분할
### 작업 분할 원칙
1. 모든 새로운 작업을 시작하기 전 todo list 생성 (`update_todo_list` 도구 사용)
2. 단일 항목 작업 중 컨텍스트 캐시 70% 초과 시:
- 현재 작업 상태를 하위작업에게 명확히 전달
- 하위작업에서 이어받아 작업 진행
- 완료 후 상위 작업에 결과 보고
3. 하위작업은 `new_task` 도구로 생성하고 mode은 현재 모드 유지 또는 적절히 선택
# 🚫 COMMAND LOOP PREVENTION
- 명령 실행 후 결과가 이전과 동일하면 → 재시도 금지, 원인 분석 먼저
- --no-build 옵션은 빌드 완료 확인 후에만 사용
- 테스트 0개 실행 시 → 테스트 프로젝트/필터 조건 재확인, 재실행 금지