# CLAUDE.md 이 파일은 Claude Code (claude.ai/code)가 이 저장소에서 작업할 때 참고할 가이드를 제공합니다. ## 프로젝트 개요 **ECO2 (Energy Calculation Optimization 2)**는 한국 건축물 에너지효율등급 인증 기준(녹색건축인증)에 따라 건물의 1차 에너지 소요량, CO2 배출량, 신재생에너지 생산량을 계산하는 VB.NET 및 WinForms 기반 응용 프로그램입니다. **주 언어**: Visual Basic .NET (VB.NET) with .NET Framework 4.0 **추가 언어**: C# (유틸리티 라이브러리만) **플랫폼**: Windows 데스크톱 응용 프로그램 (x86 타겟) ## 솔루션 구조 솔루션 `ArinWareT4.sln`은 모듈화된 아키텍처로 구성된 6개의 프로젝트를 포함합니다: ### 메인 응용 프로그램 - **ECO2_2025V1** (`ArinWarev1/`) - 주 WinForms 응용 프로그램 - 진입점: `MdiMain.vb` - 메뉴 시스템을 갖춘 MDI 부모 폼 - `Calculator/` 하위 디렉토리의 핵심 계산 엔진 - 기능별 폼 구성: `Forms/`, `Forms_Input/`, `Forms_Report/`, `Forms_Basic/` - `Data/`의 기상 데이터 (XML 형식) - 타입 데이터셋: `eco2DataSet.xsd` (데이터 모델링용) ### 지원 라이브러리 (SubProject 폴더 그룹) - **CEnergy** (`CEnergy/ArinClassV2/`) - 핵심 비즈니스 로직 라이브러리 - 공통 유틸리티, 데이터베이스 액세스, INI 파일 처리 - 여러 프로젝트에서 공유 - **ArinNet** - 네트워크 통신 유틸리티 - **ArinLogin** - 인증 및 사용자 관리 - 라이선스 검증, 암호화/복호화 - **ArinLog** - 로깅 기능 - **Utility** (C#) - 압축 유틸리티 - 데이터 압축을 위한 MiniLZO 구현 ### 배포 - **Setup1** - 설치 프로그램 프로젝트 (`.vdproj`) ## 빌드 및 실행 ### 솔루션 빌드 ```bash # Visual Studio에서 솔루션 열기 start ArinWareT4.sln # 명령줄에서 빌드 (Visual Studio 필요) msbuild ArinWareT4.sln /p:Configuration=Debug /p:Platform="Any CPU" msbuild ArinWareT4.sln /p:Configuration=Release /p:Platform="Any CPU" ``` ### 출력 경로 - **Debug**: `..\..\..\..\..\eco2\debug_2016\` (프로젝트 기준 상대 경로) - **Release**: `c:\eco2\debug_2016\` ### 플랫폼 설정 - 타겟 플랫폼: **x86** (32비트) - 프레임워크: **.NET Framework 4.0** - Option Strict: **Off** (VB.NET 특성) ### 빌드 구성 - Debug / Release (표준) - CD_ROM / DVD-5 / SingleImage (배포 구성) ## 아키텍처 개요 ### 계산 엔진 (`ArinWarev1/Calculator/`) 계산 엔진은 건물 에너지 계산을 수행하는 전문 모듈로 구성됩니다: **핵심 계산기 클래스**: - `Calculator.vb` - 모든 계산 모듈을 조율하는 메인 오케스트레이터 - `CZone.vb` - 존 레벨 계산 (열존, 난방/냉방 부하) - `CAirHandling.vb` - 공조 시스템 계산 - `CHeating.vb` - 난방 시스템 계산 (기기, 분배, 공급) - `CCooling.vb` - 냉방 시스템 계산 (기기, 분배) - `CRenewable.vb` - 신재생에너지 생산량 계산 - `CSummary.vb` - 결과 집계 및 요약 생성 - `CShared.vb` - 공유 계산 변수 및 유틸리티 **결과 처리** (`Calculator/Result/`): - `CResult.vb` - 결과 데이터 구조 - `C1차소요량.vb` - 1차 에너지 소요량 계산 - `CCo2발생량.vb` - CO2 배출량 계산 - `C생산에너지.vb` - 에너지 생산량 계산 - `C사용면적.vb` - 사용 면적 계산 - `CZones.vb` - 존 결과 집계 ### 데이터 흐름 ``` 사용자 입력 폼 (Forms_Input/) ↓ DataSet (eco2DataSet - DS, DSR) ↓ 계산 엔진 (Calculator) ↓ 결과 클래스 (CResult, DSR) ↓ 리포트 폼 (Forms_Report/) ``` ### 주요 데이터셋 - `DS` (DSET) - 입력 데이터 (사용자 입력 건물 정보) - `DSR` (DSETR) - 결과 데이터 (계산된 에너지 값) - `CResult` - 구조화된 계산 결과 ### 폼 구성 **Forms_Input/** - 데이터 입력 폼 - `Frm_Desc.vb` - 건물 개요 - `Frm_kongjo.vb` - 공조 처리 입력 - `Frm_Bunbae.vb` - 분배 시스템 입력 - `Frm_custom_profile.vb` - 커스텀 사용 프로파일 **Forms_Report/** - 출력 및 보고 - `Frm_Upload.vb` - 인증 서버 업로드 - `Frm_Macro.vb`, `Frm_Macro2.vb` - Excel 리포트 생성 - `Frm_Export.vb` - 데이터 내보내기 기능 **Forms_Basic/** - 유틸리티 폼 - `Frm_Calc.vb` - 계산 트리거 - `Frm_Filter.vb` - 데이터 필터링 - `Frm_FileInfo.vb` - 파일 메타데이터 **Forms/** - 일반 응용 프로그램 폼 - `Frm_About.vb` - About 대화상자 - `Frm_Common.vb` - 공통 대화상자 ### 메뉴 시스템 (MdiMain.vb) `E_MenuIdx` 열거형에 정의된 메뉴 인덱스: - 입력존 - 입력면 - 공조처리 - 난방기기/공급/분배 - 냉방기기/분배 - 신재생및열병합 - 열관류율 - 건물개요 - 월별에너지사용량 ### 사용자 권한 `Prj.UserAuthType`을 통해 제어되는 사용자 유형: - `ADMIN` - 전체 액세스 - `BOTH` - 전문 사용자 (계산 + 인증) - `BOTH0` - 일반 사용자 (제한된 액세스) - `BOTH1` - 확장 전문 사용자 액세스 ## 외부 종속성 ### FarPoint Spread (v5.0.3505.2008) - 데이터 입력을 위한 Excel 형식의 스프레드시트 컨트롤 - 구성 요소: CalcEngine, Excel, PDF, Win, Chart - 입력 폼에서 광범위하게 사용 ### Microsoft ReportViewer - `Microsoft.ReportViewer.Common.dll` - `Microsoft.ReportViewer.WinForms.dll` - 형식화된 보고서 생성에 사용 ### Excel Interop - `Interop.Excel.dll` - Excel 자동화를 위한 COM interop - 매크로/내보내기 기능에 사용 ### LOV 구성 요소 - `Lov.dll` - 값 목록 컨트롤 라이브러리 ## 파일 형식 및 데이터 저장 ### 프로젝트 파일 (.tpl 파일) - LZO 압축 바이너리 형식 (Utility 프로젝트 사용) - 건물 데이터, 계산 입력값, 결과 포함 - 사용자 지정 위치에 저장 - 최근 파일은 응용 프로그램 설정에서 추적 ### 기상 데이터 (Data/*.xml) - `weather_temp.xml` - 온도 데이터 - `weather_supdo.xml` - 습도 데이터 - `weather_ilsa.xml` - 일사량 데이터 - `weather_group.xml` - 기상 관측소 그룹 - `tbl_weather.xml` - 기상 위치 테이블 ### 구성 파일 - `Frm_Setting.ini` - UI 상태 지속성 (창 크기, 위치) - `login.dat` - 사용자 자격 증명 (암호화됨) - `app.config` - 응용 프로그램 설정 ## 한국 건축물 에너지 기준 이 응용 프로그램은 한국 건축물 에너지효율등급 인증 기준을 구현합니다: ### 주요 용어 - 건물개요 - 1차 에너지 소요량 - CO2 발생량 - 난방 / 냉방 - 급탕 - 조명 / 환기 - 신재생에너지 - 열관류율 - 공조 - 용도지역 ### 계산 버전 관리 `StartVersion` 상수를 통한 버전 제어: - 규제 준수를 위한 계산 엔진 버전 관리 - `Calculator.New()` 생성자에서 버전 확인 - 기준 버전 "2009123100" ## 개발 가이드라인 ### VB.NET 규칙 - Option Strict는 OFF - 암시적 형식 변환 허용 - 한글 주석 및 변수명은 표준 관행 - 명명: 클래스, 메서드는 PascalCase; 로컬 변수는 엄격한 규칙 없음 ### DataSet 사용 - 항상 타입 데이터셋 (`DS`, `DSR`) 사용 - 모듈 수준 변수 `DSET1`, `DSETR1`을 통해 액세스 - 타입 안전 액세스를 위해 DataRow 객체 사용 ### 폼 관리 - `MdiMain`을 통한 MDI 자식 폼 관리 - `OpenedForm` 속성을 통해 열린 폼 추적 - `Prj.Opened`를 사용하여 프로젝트 파일 로드 여부 확인 ### 계산 흐름 1. 프로젝트 파일 로드 → `DSET` 채우기 2. 사용자가 입력 폼 수정 → `DSET` 업데이트 3. 계산 트리거 → `Calculator` 클래스가 `DSET` 처리 → `DSETR` 및 `CResult` 채우기 4. 리포트 폼에 결과 표시 ### 파일 작업 - 항상 MdiMain의 `Save_File()` / `Load_File()` 메서드 사용 - Utility 라이브러리를 통한 파일 압축 처리 - `PrjChanged` 플래그를 통한 파일 변경 추적 ## 일반 작업 ### 계산 실행 계산은 메뉴 또는 폼 버튼에서 트리거되고 `Calculator` 클래스를 통해 처리됩니다: ```vb ' 데이터셋 및 결과 객체로 계산기 초기화 Dim calc As New Calculator(version, DSET1, DSETR1, Result2, isSimulation) ' 초기화 오류 확인 If calc.IsError Then ' 오류 처리 Return End If ' DSETR1 및 Result2에서 계산 결과 사용 가능 ``` ### 새 입력 필드 추가 1. 적절한 테이블에 열을 추가하도록 `eco2DataSet.xsd` 수정 2. 해당 입력 폼(`Forms_Input/*.vb`) 업데이트 3. 관련 `Calculator/*.vb` 클래스의 계산 로직 업데이트 4. 필요한 경우 리포트 폼 업데이트 ### 새 계산 모듈 추가 1. `Calculator/` 디렉토리에 새 클래스 생성 2. 기존 모듈의 계산 패턴 상속 3. 생성자에서 `DS`, `DSR`, `CResult` 수락 4. `Calculator.vb` 오케스트레이터에 연결 5. `CSummary.vb`의 요약 집계 업데이트 ### FarPoint Spread 컨트롤 작업 FarPoint 컨트롤은 그리드 기반 입력에 광범위하게 사용됩니다: ```vb ' Spread 컨트롤 액세스 Dim spread As FarPoint.Win.Spread.FpSpread = Me.FpSpread1 ' 셀 값 설정 spread.ActiveSheet.Cells(row, col).Value = value ' 셀 값 읽기 Dim value = spread.ActiveSheet.Cells(row, col).Value ' 셀 속성 설정 spread.ActiveSheet.Cells(row, col).BackColor = Color.Yellow ``` ## 알려진 패턴 및 규칙 ### 전역 모듈 변수 - `DSET1` - 전역 입력 데이터셋 (DS 타입) - `DSETR1` - 전역 결과 데이터셋 (DSR 타입) - `Result2` - 전역 결과 객체 (CResult 타입) - `Prj` - 전역 프로젝트 상태 객체 - `CLang` - 언어/지역화 문자열 ### 오류 처리 - 계산 클래스의 `IsError` 속성 패턴 - 사용자 대면 오류에 대한 메시지 박스 - `On Error Resume Next`를 사용한 VB.NET 오류 처리 (레거시 패턴) ### 이벤트 처리 - 클래스 수준 이벤트 핸들러를 위한 WithEvents 패턴 - `Handles` 키워드를 통한 폼 이벤트 처리 ### INI 파일 액세스 ```vb Dim ini As New MyINI(filePath) Dim value = ini.Read(section, key, defaultValue) ini.Write(section, key, value) ``` ## 테스트 및 디버깅 ### 디버그 모드 - Debug 구성으로 빌드 - 로컬 디버그 폴더로 출력 - 전체 심볼 정보 사용 가능 ### 테스트 데이터 사용 가능한 샘플 프로젝트 파일: - `sample.tpl` - 표준 샘플 건물 - `sample_0307.tpl` - 대체 샘플 - `sample_200.tpl` - 대형 건물 샘플 ### 로깅 응용 프로그램 로깅에 ArinLog 라이브러리 사용: ```vb pLog.Add("이벤트 설명", includeStackTrace) ``` ## 언어 관련 참고사항 응용 프로그램은 한국 사용자를 위해 설계되었습니다: - 모든 UI 텍스트는 한글 - 사용자 문서는 한글 - 한국 건축 기준 및 용어 - 날짜/시간 형식: 한국 표준 - 인코딩: 소스 파일은 UTF-8 주석 및 변수명은 한글과 영어를 혼용합니다 - 이는 의도적이며 이 코드베이스의 표준입니다. ## 배포 참고사항 ### 설치 - 설치 프로그램 프로젝트: `Setup1/Setup1.vdproj` - 메인 프로젝트에 구성된 ClickOnce 배포 - 게시 URL: `ftp://tindevil.com/www/mynetapp/t4/` - 설치 URL: `http://tindevil.com/mynetapp/t4/` ### 버전 관리 - AssemblyInfo의 버전 정보 - ArinLogin 라이브러리를 통한 버전 확인 - 서버 측 버전 검증 ### 업데이트 - 시작 시 업데이트 확인 - Foreground 업데이트 모드 (실행 전 업데이트) - 7일 업데이트 간격 구성 ## 보안 참고사항 ### 인증 - ArinLogin 라이브러리를 통한 사용자 인증 - MAC 주소 검증 (상태 표시줄의 `lbl_mac`) - 라이선스 관리 시스템 - `login.dat`의 암호화된 자격 증명 ### 데이터 보호 - 데이터 보호를 위한 파일 압축 - ArinLogin.EnDec 클래스를 통한 암호화/복호화 - 라이선스 준수를 위한 네트워크 검증