9.3 KiB
| name | description |
|---|---|
| optimize-ptop-build | ILSOS_PrismaticRD_PTOP의 빌드 최적화 및 CI/CD 자동화. 멀티 구성 빌드(Debug/Release — Simulation·UserDefineUnit은 sln에서 Release로 매핑되어 별도 구성이 아니다) 분석, 의존성 최적화, 빌드 시간 단축, CI/CD 파이프라인 설계. "빌드 최적화", "PTOP 빌드 성능", "CI/CD 자동화 설계", "배포 파이프라인" 요청 시 사용. 구분 — 계층 구조는 `analyze-ptop-architecture`, 시퀀스 내부 로직은 `analyze-ptop-implementation`, 셋을 함께 보려는 종합 요청은 `orchestrate-ptop-harness`. 이 스킬은 분석·제안 전용이며 프로젝트 파일을 수정하지 않는다. 맨손 "업데이트"·"다시 실행"만으로는 이 스킬을 고르지 않는다 — 대상을 먼저 확인한다. |
Optimize PTOP Build Skill
목표
ILSOS_PrismaticRD_PTOP의 빌드 성능 및 자동화를 최적화한다.
분석 영역
1단계: 현재 빌드 상태 분석
수집 대상:
- 솔루션 내 프로젝트 목록 (ILSOS_All.sln)
- PTOP이 참조하는 프로젝트
- 각 프로젝트의 빌드 시간 측정
측정 방법:
msbuild는 PATH에 없을 수 있다. 먼저 탐색하고, 못 찾으면 측정을 포기하되 그 사실을 명시한다.
# 1) PATH 확인
command -v msbuild MSBuild.exe
# 2) 없으면 vswhere로 탐색 (VS 2022 설치 시)
"/c/Program Files (x86)/Microsoft Visual Studio/Installer/vswhere.exe" \
-latest -products '*' -find 'MSBuild/**/Bin/MSBuild.exe'
# 3) 찾았으면 구성별 측정 (time으로 소요시간 확보)
time "<MSBUILD>" ILSOS_All.sln -p:Configuration=Release -p:Platform=x64
셋 다 실패하면 2개 구성의 시간 칸을 전부
미측정으로 확정하고, 보고서 "미측정·미검증"에 "MSBuild 미탐색 — 빌드 시간 측정 불가"를 사유와 함께 남긴다. 추정치를 채우지 않는다. 이 하네스는 빌드를 실행만 하고 프로젝트 파일을 고치지 않는다.
수집 항목: (§3단계 참조 — PTOP의 실질 구성은 2개다)
| 구성 | 총 소요시간 | 병목 프로젝트 (상위 3) | 캐시 효율 |
|---|---|---|---|
| Debug|x64 | ? | ? | ? |
| Release|x64 | ? | ? | ? |
Simulation|x64·UserDefineUnit|x64는ILSOS_All.sln:413-416에서 PTOP이Release|x64로 매핑되어 바이너리가 동일하다. 별도 측정 대상이 아니므로 표에 행을 만들지 않는다.
2단계: 의존성 분석
PTOP의 최소 필수 의존성 파악:
의존성 트리를 소스에서 직접 만든다. 미리 적힌 필수/선택 판정을 그대로 옮기지 않는다 — 잘못된 판정을 따라 참조를 지우면 빌드가 깨진다.
Machines/ILSOS_PrismaticRD_PTOP/*.csproj의<ProjectReference>/<Reference>전수 수집- 각 참조에 대해 심볼이 실제로 쓰이는지 검색 (
using문만으로 판단하지 말 것 — 죽은 using이 있다) - 판정 근거를 기록:
필수 — <어느 코드가 쓰는가 파일:라인>/미사용 후보 — <검색 결과>
| 참조 | 종류 | 사용 근거(파일:라인) | 판정 | 제거 시 위험 |
|---|---|---|---|---|
| ProjectReference / NuGet | 필수 / 미사용 후보 / 불명확 |
분석 시 주의:
- 조건부 컴파일 심볼로만 쓰이는 참조가 있는지 확인한다. 단 이 프로젝트의
DefineConstants는DEBUG;TRACE/TRACE뿐이고#if SIMULATION류는 0건이므로(csproj 확인), 새 심볼을 가정하지 말 것. - 리플렉션·DI 등록으로만 쓰이면 정적 검색에 안 잡힌다.
EquipmentSetup.cs의 디바이스 등록부를 반드시 확인한다.
산출물: _workspace/04a_dependency_analysis.csv
3단계: 빌드 구성별 최적화
Debug|x64 최적화
- 기호 생성 필요 (유지)
- 최적화 비활성화 (유지)
- 증분 빌드 활용
Release|x64 최적화
.csproj는 legacy 형식 + .NET Framework 4.8.1이다. PublishTrimmed·TieredCompilation·
DebugType=embedded 같은 SDK 스타일(.NET Core/5+) 속성은 동작하지 않는다. 제안 전에
해당 속성이 이 프로젝트 형식에서 유효한지 먼저 확인하라.
Simulation|x64 / UserDefineUnit|x64 — 별도 컴파일 구성이 아니다
ILSOS_All.sln:413-416에서 PTOP({8BB07B4C-…})의 Simulation|x64·UserDefineUnit|x64가
Release|x64로 매핑된다. 즉 PTOP은 Release와 동일한 바이너리이며 출력도 x64-Release/다.
다만 솔루션의 다른 프로젝트 상당수는 Simulation|x64 → Debug|x64이므로
최소 빌드 집합을 논할 때 프로젝트별 매핑을 각각 확인해야 한다.
시뮬레이션은 조건부 컴파일이 아니라 런타임 플래그로 갈린다 —
Device/PLC/PLCContoller.Config.cs의 isSimul 계열. Machines/ 전체에 #if SIMULATION은 0건이고
DefineConstants는 DEBUG;TRACE / TRACE뿐이다(csproj 확인).
이 사실을 모르고 "Simulation 구성만 따로 최적화"를 제안하면 존재하지 않는 빌드를 대상으로 삼게 된다. 구성별 차이를 논하기 전에 sln의
ActiveCfg매핑을 먼저 읽어라.
4단계: CI/CD 파이프라인 설계
목표:
- 자동 빌드 (commit, PR)
- 자동 테스트 — Simulation은 별도 구성이 아니므로(§3단계) 테스트 잡을 Simulation 구성으로 나누지 않는다.
시뮬 동작은 런타임
isSimul플래그로 켠다. - 자동 배포 (수동 승인)
추천 플랫폼:
- GitHub Actions (GitHub 저장소 사용 중 가정)
- Azure Pipelines (Microsoft 클라우드)
- Jenkins (온프레미스)
파이프라인 구조: references/cicd-pipeline-template.yml
를 시작점으로 삼아 _workspace/05_cicd_pipeline.yml에 프로젝트 맞춤 버전을 쓴다.
템플릿은 미검증 초안이다. 실제로 러너에서 돌려본 적이 없으므로, 검증 없이 "CI/CD 설계 완료"라고 보고하지 않는다. 검증 여부를 보고서에 명시한다.
5단계: 배포 패키징
산출물:
- 실행 가능 파일 (Aurora.exe)
- 필수 DLL (AuroraDevices, WeldingComponents, etc.)
- 설정 파일 (app.config)
- 리소스 파일 (이미지, 데이터)
- 배포 설명서
패키징 형식:
- ZIP 아카이브 (간단)
- NSIS 설치 프로그램 (사용자 친화적)
- Chocolatey 패키지 (자동 업데이트)
통합 산출물
최종 보고서: _workspace/06_ptop_build_optimization.md
(보조 산출물: _workspace/04_build_analysis.md, _workspace/05_cicd_pipeline.yml)
보고서 골격은 references/report-template.md 참조.
빌드 시간·크기·개선율을 지어내지 않는다. 실제로 측정했을 때만 수치를 적고 측정 명령어를 병기한다. 측정하지 않았으면
미측정이라고 쓴다. "이 의존은 제거 가능해 보인다" 같은 미검증 판단에는[추론]을 붙인다 (rules.md#15·#16). 심볼 참조를 실제로 검색해 확인한 뒤에만 표기를 떼고 근거를 병기한다.미측정(측정 못 함)과 축이 다르니 대체하지 말고 필요하면 병기한다.
입력 조건
단독 호출 시: 생성할
_workspace/파일 목록을 사용자에게 제시하고 승인받은 뒤 시작한다 (rules.md#2). 오케스트레이터(orchestrate-ptop-harness)를 통해 호출된 경우는 이미 승인을 받았으므로 생략한다.
사용자 요청 시:
- "PTOP 빌드 최적화"
- "빌드 시간 단축"
- "CI/CD 파이프라인 설계"
- "배포 자동화"
- "Release 빌드 성능"
출력 결과
- 빌드 성능 분석 보고서
- 의존성 맵핑 CSV
- CI/CD 파이프라인 (YAML/JSON)
- 빌드 최적화 설정 (PropertyGroup)
- 배포 패키징 스크립트
- 최종 보고서
주의사항
- .NET Framework 4.8.1 호환성 — 최신 .NET 기능 사용 불가
- Visual Studio 2022 기준 — MSBuild 경로 확인
- Windows 플랫폼 전용 — x64 아키텍처 명시
- 빌드 머신 사양 — CI 환경의 OS/RAM 확인
- 라이선스 확인 — NuGet 패키지, 외부 도구의 라이선스
- 주석·프로퍼티명을 맹신하지 않는다 (
rules.md#1) — 구성 이름(Simulation·UserDefineUnit)이 별도 컴파일을 뜻하지 않는 것이 그 예다. 판단 근거는.sln·.csproj실제 매핑이다.
단독 기동으로
04~06을 갱신했으면 stale 표기 의무는 네게 있다. "빌드 분석만 다시"는docs/harness-ptop.md가 후속 트리거로 열거한 발화라 이 스킬로 직접 들어올 수 있고, 그때는 오케스트레이터가 표기해 주지 않는다. 갱신한 파일 첫 줄에이번 실행에서 갱신됨(YYYY-MM-DD), 재사용한 기존 산출물 첫 줄에이전 실행 결과 재사용 — 정합성 미확인(YYYY-MM-DD)을 남긴다 (문구 3종 →orchestrate-ptop-harness/references/data-protocol.md).
이 스킬은 10분을 넘긴다 — 단계 전환마다 지금 어느 단계인지 한 줄로 보고한다(
rules.md#10).단독 호출로 마무리할 때: 보고는
rules.md#11~13 출력 형식(수정 줄=초록 화살표, 단어=주황, 미변경=기본색)을 따르고, 끝에 관련.md를 갱신할 부분이 있는지 묻는다(rules.md#6).