# 성능 검사 모니터링 시스템 기술 지식베이스 (Knowledge Base) 본 문서는 **양산형 테스트 기기 모니터링 시스템**의 소프트웨어 아키텍처, 주요 기능 변경 사항(저항 테스트 및 로그인 프로시저 연동), 그리고 유지보수 및 릴리즈를 위한 가이드를 정리한 지식베이스 문서입니다. --- ## 1. 시스템 개요 및 구성 (System Overview) 본 시스템은 제조 라인 최종 단계에서 제품(전기차 부품 등)의 전기적 성능 계측 데이터(전압, 전류, 저항)를 실시간으로 모니터링하고 최종 합격/불합격(PASS/FAIL) 판정을 내린 후 결과를 데이터베이스에 기록하고 설비 제어 완료 신호를 전달하는 WPF 기반 윈도우 애플리케이션입니다. ### 1.1. 디렉터리 및 주요 파일 구조 - **[Models/](file:///C:/Users/COMPUTER1/Desktop/mobi/marking_gui/marking_gui/Models)** - `Product.cs`: 제품 정보 및 이전 공정(Housing, Calibration, EOL) 이력 정보 관리 모델 - `MeasurementLimits.cs`: 전압, 전류, 저항의 판정 기준 최소/최대 임계치를 저장하고 유효성을 검증하는 모델 - **[Services/](file:///C:/Users/COMPUTER1/Desktop/mobi/marking_gui/marking_gui/Services)** - `MockMeasurer.cs`: 2초 계측 효과 시뮬레이션용 요동치는 노이즈 생성 및 합격/불합격 최종 결정값 반환 모사 서비스 - `MssqlDatabaseService.cs`: 소수점 이하 2자리 반올림 및 최종 판정 값을 MSSQL DB에 적재하기 위한 데이터 액세스 서비스 (로그 출력) - `MemoryReaderService.cs`: 메모리(바코드 스캐너 연동 등)로부터 제품의 Serial Number를 자동으로 읽어오는 서비스 - `LoginServicesStub.cs`: `Database.ini` 파일로부터 로그인 프로시저 설정을 읽고 DB 저장 프로시저(`StoredProcedure`) 호출 검증을 수행하는 서비스 - **[UI Windows]** - `App.xaml` / `App.xaml.cs`: 애플리케이션 리소스 및 OnStartup 구동 진입점 정의 - `MainWindow.xaml` / `MainWindow.xaml.cs`: 메인 실시간 모니터링 모듈 (계측 전압/전류/저항 카드, 판정 화면, 이전 이력 그리드 표출) - `SettingsWindow.xaml` / `SettingsWindow.xaml.cs`: 검사 판정 기준(전압, 전류, 저항 최소/최대값)을 실시간 수정할 수 있는 환경 설정 팝업 창 - `StartupLoginWindow.xaml` / `StartupLoginWindow.xaml.cs`: 작업자 인증 및 모델 configuration 세팅 시작 모달 화면 --- ## 2. 세부 개발 및 구현 이력 (Development History) ### 2.1. 저항(Resistance) 테스트 검사 추가 전압과 전류에 국한되었던 기존 시스템에 저항 검사 프로세스를 추가하여 3대 전기 파라미터를 완성했습니다. - **물리적 개연성 반영:** V = I * R 연계를 고려하여, 전압(4~6V) 및 전류(8~10A) 조건에서 저항 기본 범위를 **0.4Ω ~ 0.8Ω**으로 세팅했습니다. - **UI 및 환경설정 연동:** 메인 화면에 세 번째 Column으로 `측정 저항 (Resistance)` 카드를 시각적으로 추가하고 설정 창(SettingsWindow)의 세로 크기를 늘려 저항 판정 임계치 입력란을 통합했습니다. - **판정 결합:** `isFinalPass = isVoltageOk && isCurrentOk && isResistanceOk` 조건을 통해 세 항목 중 하나라도 이탈 시 자동으로 빨간색 텍스트 및 대형 FAIL 판정이 출력되도록 비즈니스 로직을 보강했습니다. ### 2.2. 로그인 저장 프로시저 호출 연동 인라인 SQL 질의 구조를 탈피하여 외부 설정에 명시된 SQL Server 저장 프로시저를 직접 호출하도록 구현했습니다. - **외부 설정 로딩:** [Database.ini](file:///C:/Users/COMPUTER1/Desktop/mobi/marking_gui/marking_gui/Database.ini) 파일을 통해 런타임에 호출할 프로시저명과 오프라인 모드 여부를 읽어옵니다. ```ini [Login] Procedure=dbo.CheckOperator ProcessName=Marking OfflinePreview=false ``` - **ADO.NET StoredProcedure 연동:** `SqlCommand.CommandType = CommandType.StoredProcedure` 설정을 사용하여 `@Operator`, `@Password`, 그리고 선택적으로 `@ProcessName` 파라미터를 매핑하여 계정 검증 프로시저를 안전하게 가동합니다. --- ## 3. 유지보수 및 릴리즈 가이드 (Release & Maintenance) ### 3.1. 데모용 시뮬레이션 격리 코드 제거 방법 (중요) 로컬 데모 실행을 위해 실제 DB 서버 접속이 실패하더라도 프로시저 성공 여부를 모사하여 로그인을 즉시 통과시키는 임시 시뮬레이션 코드가 구현되어 있습니다. 실제 상용(Production) 배포 시에는 보안 및 실 데이터 검증을 위해 아래의 지침을 따라 **데모 코드를 반드시 삭제**해야 합니다. 1. **[LoginServicesStub.cs](file:///C:/Users/COMPUTER1/Desktop/mobi/marking_gui/marking_gui/Services/LoginServicesStub.cs)** 파일을 엽니다. 2. `ExistsAsync` 메서드 내 `catch (Exception ex)` 블록 내부로 이동합니다. 3. 아래의 **DEMO MODE 주석 배너**로 둘러싸인 영역을 완전히 삭제하거나 주석 처리합니다. ```csharp // ==================== [DEMO MODE START] ==================== // 데모 시뮬레이션용 프로시저 성공 연출 코드 // 상용 릴리즈 시 이 블록은 완전히 제거(삭제)할 수 있습니다. if (!string.IsNullOrWhiteSpace(_loginSettings.Procedure)) { System.Diagnostics.Debug.WriteLine(string.Format("[데모 시뮬레이션] 프로시저 '{0}' 호출 모사 (ID: {1}, PW: {2}, Process: {3})", _loginSettings.Procedure, operatorId, password, _loginSettings.ProcessName)); return IsDefaultAccount(operatorId, password); } // ==================== [DEMO MODE END] ==================== ``` 4. 삭제 후 빌드를 다시 수행하면, DB 통신 실패 시 로그인이 우회되지 않고 정상적으로 "로그인 DB 확인 실패" 경고가 발생하게 됩니다. ### 3.2. 빌드 실행 방법 본 프로젝트는 레거시 .NET Framework 4.7.2 타깃의 WPF 애플리케이션으로, XAML 마크업 빌드가 정상 동작하기 위해서는 Visual Studio 환경의 MSBuild 엔진이 필요합니다. - **MSBuild 권장 경로:** `C:\Program Files\Microsoft Visual Studio\18\Insiders\MSBuild\Current\Bin\MSBuild.exe` (설치 버전에 따라 Insiders, Community, Professional 등으로 달라질 수 있음) - **빌드 명령어 (터미널):** ```powershell & "C:\Program Files\Microsoft Visual Studio\18\Insiders\MSBuild\Current\Bin\MSBuild.exe" /t:rebuild ``` - **출력 경로:** 빌드 완수 후 `marking_gui\bin\Debug\` 또는 `Release\` 폴더에 실행 바이너리 및 `Database.ini` 파일이 함께 생성됩니다. --- ## 4. 데이터베이스 구성 가이드 (Database Configuration) 본 시스템은 **Microsoft SQL Server 2012** 이상의 버전에 완전히 호환되도록 구성되었습니다. 데이터베이스 구성 시 [docs/database_setup.sql](file:///C:/Users/COMPUTER1/Desktop/mobi/marking_gui/docs/database_setup.sql) 스크립트를 활용할 수 있습니다. ### 4.1. 데이터베이스 및 스키마 구조 - **데이터베이스명:** `MarkingDb` - **[Users] (작업자 및 비밀번호 관리 테이블):** - 작업자의 고유 ID(`OperatorId`), 패스워드(`Password`), 이름(`Name`) 및 계정 상태(`IsActive`)를 관리합니다. - 로그인 조회 속도를 향상시키기 위해 `OperatorId` 컬럼에 UNIQUE 제약 조건을 할당했습니다. - **[dbo].[Marking] (공정 메타데이터 및 성능 계측값 저장 테이블):** - 바코드 S/N(`IC_SN`, 기본키)을 키로 하며, 고유 식별을 위해 메타데이터와 날짜 조합의 고유 키 `Marking_QR` (Unique Key)이 생성됩니다. - 공정 정보(`Maker`, `Model`, `Variant_1`, `Variant_2`, `Operator`, `Production_Date`, `Line`, `Lot_No`, `Jig_No`) 및 최종 판정(`Result`)이 통합 적재됩니다. - 3단계에 걸친 전압/전류/저항 컬럼(`PT_Vol_1~3`, `PT_Current_1~3`, `PT_Resistance_1~3`)이 존재하며, 현재는 1번 컬럼들에 최종 계측 수치(소수점 2자리 반올림)를 저장하고 2, 3번 컬럼은 `0.00`으로 기본값을 보정하여 저장합니다. - DB 필드 크기 한계를 초과하여 적재 에러가 나지 않도록, `Line` 컬럼은 최대 5자, `Lot_No` 컬럼은 최대 8자 등으로 자르는(Truncate) 방어적 코드 처리가 수행됩니다. ### 4.2. 로그인 검증 저장 프로시저 ([CheckOperator]) - **프로시저 기능:** 입력된 ID와 패스워드가 활성 상태인 작업자 테이블에 매칭되는지 대소문자 구분 없이 카운팅합니다. - **매개변수 정보:** - `@Operator` (VARCHAR(50)): 작업자 ID - `@Password` (VARCHAR(50)): 비밀번호 - `@ProcessName` (VARCHAR(50)): 호출 프로세스명 (선택사항, 기본값 NULL) - **리턴:** 매칭되는 활성 사용자가 존재할 시 `1`, 존재하지 않을 시 `0`을 스칼라 결과로 반환합니다.