Add direct Gitea issue helper and refresh run-001 outputs
This commit is contained in:
11
README.md
11
README.md
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
## 구성
|
## 구성
|
||||||
- `docs/`: 방향성 문서, Stage 1 문서, run 기록, 입력 원문, 실행 결과
|
- `docs/`: 방향성 문서, Stage 1 문서, run 기록, 입력 원문, 실행 결과
|
||||||
- `scripts/`: 후반부 실행과 실험을 위한 스크립트
|
- `scripts/`: 후반부 실행과 실험, Gitea 이슈 등록을 위한 스크립트
|
||||||
- `issues/`: Gitea 이슈 탭에 등록할 step별 이슈 본문 초안
|
- `issues/`: Gitea 이슈 탭에 등록할 step별 이슈 본문 초안
|
||||||
|
|
||||||
## 현재 포함된 항목
|
## 현재 포함된 항목
|
||||||
@@ -25,3 +25,12 @@
|
|||||||
- 실행 계획: `docs/run-001/04-plan/execution-plan.md`
|
- 실행 계획: `docs/run-001/04-plan/execution-plan.md`
|
||||||
- 최종 결과: `docs/run-001/05-execution/final.html`
|
- 최종 결과: `docs/run-001/05-execution/final.html`
|
||||||
- 검증 결과: `docs/run-001/06-validation/validation-result.md`
|
- 검증 결과: `docs/run-001/06-validation/validation-result.md`
|
||||||
|
|
||||||
|
## Gitea 이슈 자동 등록
|
||||||
|
- `scripts/gitea_issue_sync.py`는 Gitea REST API로 이슈 생성, 이슈 본문 수정, 코멘트 등록을 수행한다.
|
||||||
|
- 필요 환경변수:
|
||||||
|
- `GITEA_URL`
|
||||||
|
- `GITEA_TOKEN`
|
||||||
|
- 예시:
|
||||||
|
- `python scripts/gitea_issue_sync.py create-issue --repo Kyeongmin/C.E.L._slide_test --title "Step 1 / 입력 확인" --body-file issues/Step-1-Input-Review.md`
|
||||||
|
- `python scripts/gitea_issue_sync.py create-comment --repo Kyeongmin/C.E.L._slide_test --issue-number 2 --body-file docs/run-001/comments/step-1.md`
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -153,30 +153,24 @@
|
|||||||
<div class="slide-title" style="grid-area: header;">건설산업 DX의 올바른 이해</div>
|
<div class="slide-title" style="grid-area: header;">건설산업 DX의 올바른 이해</div>
|
||||||
|
|
||||||
<div class="area-body" style="overflow:hidden;">
|
<div class="area-body" style="overflow:hidden;">
|
||||||
<div style="width:100%; height:104px; overflow:hidden; background:#f8fafc; border:1px solid #e2e8f0; border-radius:6px; padding:10px 14px;">
|
<div style="width:100%; height:91px; overflow:hidden; background:#f8fafc; border:1px solid #e2e8f0; border-radius:6px; padding:10px 14px;">
|
||||||
<div style="font-size:12px; font-weight:bold; color:#334155; margin-bottom:4px;">용어 혼용 문제</div>
|
<div style="font-size:12px; font-weight:bold; color:#334155; margin-bottom:4px;">DX와 BIM의 혼용 문제</div>
|
||||||
|
|
||||||
<div style="display:flex; gap:8px; height:100%;">
|
<div style="display:flex; gap:8px; height:100%;">
|
||||||
<div style="flex:1; background:#ffffff; border-left:2px solid #94a3b8; padding:6px 8px;">
|
<div style="background:#ffffff; border-left:2px solid #94a3b8; padding:6px 8px; flex:1;">
|
||||||
<div style="font-size:10px; font-weight:bold; color:#334155; margin-bottom:2px;">용어의 혼용</div>
|
<div style="font-size:10px; font-weight:bold; color:#334155; margin-bottom:2px;">용어의 혼용</div>
|
||||||
<div style="font-size:9px; color:#64748b; line-height:1.3;">
|
<div style="font-size:9px; color:#64748b; line-height:1.3;">
|
||||||
<div style="padding-left:14px; text-indent:-14px;">• 건설산업의 디지털 전환 논의에서 <strong style="color:#1e293b">DX(Digital Transformation)</strong>와 <strong style="color:#1e293b">BIM(Building Information Modeling)</strong>이 개념적으로 명확히 정립되지 않은채 혼용되어 사용되고 있음</div>
|
<div style="padding-left:14px; text-indent:-14px;">• 건설산업의 디지털 전환 논의에서 <strong style="color:#1e293b">DX(Digital Transformation)</strong>와 <strong style="color:#1e293b">BIM(Building Information Modeling)</strong>이 개념적으로 명확히 정립되지 않은채 혼용되어 사용되고 있음</div>
|
||||||
<div style="padding-left:14px; text-indent:-14px;">• 이로인해 BIM기술의 도입을 DX의 완성으로 오인하거나, DX를 BIM 기술 도입 수준으로 한정하는 인식 확산</div>
|
<div style="padding-left:14px; text-indent:-14px;">• 이로인해 BIM기술의 도입을 DX의 완성으로 오인하거나, DX를 BIM 기술 도입 수준으로 한정하는 인식 확산</div>
|
||||||
|
<div style="padding-left:14px; text-indent:-14px;">• 건설산업의 DX를 올바르게 이해하기 위해 각 용어의 정의, 역할, 상호관계에 대한 체계적 정립 필요</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style="flex:1; background:#ffffff; border-left:2px solid #94a3b8; padding:6px 8px;">
|
<div style="background:#ffffff; border-left:2px solid #94a3b8; padding:6px 8px; flex:1;">
|
||||||
<div style="font-size:10px; font-weight:bold; color:#334155; margin-bottom:2px;">혼용 대표 사례</div>
|
<div style="font-size:10px; font-weight:bold; color:#334155; margin-bottom:2px;">혼용 대표 사례</div>
|
||||||
<div style="font-size:9px; color:#64748b; line-height:1.3;">
|
<div style="font-size:9px; color:#64748b; line-height:1.3;">
|
||||||
<div><strong style="color:#1e293b">스마트 건설 활성화 방안(2022.07)</strong> - 추진과제: 건설산업 디지털화, 실행과제: BIM 전면 도입</div>
|
<div style="padding-left:14px; text-indent:-14px;">• <strong style="color:#1e293b">스마트 건설 활성화 방안(2022.07)</strong>: 추진과제는 건설산업 디지털화이나 실행과제는 BIM 전면 도입, BIM 전문인력 양성</div>
|
||||||
<div><strong style="color:#1e293b">제7차 건설기술진흥 기본계획(2023.12)</strong> - 추진방향: 디지털 전환을 통한 스마트 건설 확산</div>
|
<div style="padding-left:14px; text-indent:-14px;">• <strong style="color:#1e293b">제7차 건설기술진흥 기본계획(2023.12)</strong>: 디지털 전환을 통한 스마트 건설 확산이 추진방향이나 추진과제는 BIM 도입으로 건설산업 디지털화</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div style="flex:1; background:#ffffff; border-left:2px solid #94a3b8; padding:6px 8px;">
|
|
||||||
<div style="font-size:10px; font-weight:bold; color:#334155; margin-bottom:2px;">해결 방향</div>
|
|
||||||
<div style="font-size:9px; color:#64748b; line-height:1.3;">
|
|
||||||
<div style="padding-left:14px; text-indent:-14px;">• 건설산업의 DX를 올바르게 이해하기 위해 각 용어의 정의, 역할, 상호관계에 대한 체계적 정립 필요</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -184,69 +178,64 @@
|
|||||||
<div style="height:12px;"></div>
|
<div style="height:12px;"></div>
|
||||||
<div class="core">
|
<div class="core">
|
||||||
<div class="core-header">
|
<div class="core-header">
|
||||||
<div class="core-label">용어 정의</div>
|
<div class="core-label">DX와 BIM 관계</div>
|
||||||
<div class="popup-link">DX와 BIM 구분표 보기</div>
|
<div class="popup-link">DX vs BIM 비교표</div>
|
||||||
<details style="position: absolute; top: 40px; right: 18px; width: 400px; z-index: 10;">
|
|
||||||
<summary style="display: none;"></summary>
|
|
||||||
<div style="background: white; border: 1px solid #cbd5e1; border-radius: 6px; padding: 12px; box-shadow: 0 4px 12px rgba(0,0,0,0.15); max-height: 300px; overflow-y: auto;">
|
|
||||||
<table style="width: 100%; font-size: 10px; border-collapse: collapse;">
|
|
||||||
<tr style="background: #f1f5f9;">
|
|
||||||
<th style="padding: 4px; border: 1px solid #cbd5e1; font-weight: 700;">DX</th>
|
|
||||||
<th style="padding: 4px; border: 1px solid #cbd5e1; font-weight: 700;">구분</th>
|
|
||||||
<th style="padding: 4px; border: 1px solid #cbd5e1; font-weight: 700;">BIM</th>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style="padding: 4px; border: 1px solid #cbd5e1;"><b>BIM << DX</b>(Engineering + Management 통합)</td>
|
|
||||||
<td style="padding: 4px; border: 1px solid #cbd5e1; text-align: center;"><b>범위</b></td>
|
|
||||||
<td style="padding: 4px; border: 1px solid #cbd5e1;"><b>Only 3D</b>(형상 구현 중심)</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style="padding: 4px; border: 1px solid #cbd5e1;"><b>제작 및 운영</b>(상용 + 전용 40~80개)[Rhino, Sketchup, Blender..] + [EG-BIM 등]</td>
|
|
||||||
<td style="padding: 4px; border: 1px solid #cbd5e1; text-align: center;"><b>S/W</b></td>
|
|
||||||
<td style="padding: 4px; border: 1px solid #cbd5e1;"><b>모델 제작용 상용 SW</b>[Revit, Civil 3D, Navisworks, Autocad]</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style="padding: 4px; border: 1px solid #cbd5e1;"><b>근본적 문제의식을 통한 개선</b></td>
|
|
||||||
<td style="padding: 4px; border: 1px solid #cbd5e1; text-align: center;"><b>프로세스</b></td>
|
|
||||||
<td style="padding: 4px; border: 1px solid #cbd5e1;"><b>기존 2D 설계 방식 유지</b></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</details>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="core-text">
|
<div class="core-text">
|
||||||
<div class="fi">
|
<div class="fi">
|
||||||
<img id="slide-img-DX1" src="/assets/images/DX1.png">
|
<img id="slide-img-dx1" src="/assets/images/DX1.png">
|
||||||
<div class="cap">DX와 핵심기술간 상호관계</div>
|
<div class="cap">DX와 핵심기술간 상호관계</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="bp"><b>건설산업</b></div>
|
<div class="bp"><b>건설산업</b>: 다양한 시설물을 각 산업마다의 광범위한 기술을 통합 및 융합하여 만들어내는 종합산업</div>
|
||||||
<div class="sp">다양한 시설물을 각 산업마다의 광범위한 기술을 통합 및 융합하여 만들어내는 종합산업</div>
|
|
||||||
<div class="sp">목적 시설물의 품질 욕구를 충족시키면서 최단기간내에 최소 비용으로 편리하고 안전하며 우수한 성능의 시설물 완성을 목표로 함</div>
|
<div class="sp">목적 시설물의 품질 욕구를 충족시키면서 최단기간내에 최소 비용으로 편리하고 안전하며 우수한 성능의 시설물 완성을 목표로 함</div>
|
||||||
|
<div class="bp"><b>BIM(Building Information Modeling)</b>: 디지털 전환을 위한 핵심 기술</div>
|
||||||
<div class="bp"><b>BIM(Building Information Modeling) : 디지털 전환을 위한 핵심 기술</b></div>
|
|
||||||
<div class="sp">시설물의 생애주기동안 발생한 모든 정보를 3차원 모델 기반으로 통합·관리하는 정보 관리 도구</div>
|
<div class="sp">시설물의 생애주기동안 발생한 모든 정보를 3차원 모델 기반으로 통합·관리하는 정보 관리 도구</div>
|
||||||
<div class="sp">건설 정보와 절차를 표준화된 방식으로 연계하고 디지털 협업이 가능하도록 하는 핵심 인프라 기술</div>
|
<div class="sp">건설 정보와 절차를 표준화된 방식으로 연계하고 디지털 협업이 가능하도록 하는 핵심 인프라 기술</div>
|
||||||
<div class="sp">출처: 건설산업 BIM 기본지침, 국토교통부, 2020</div>
|
<div class="bp"><b>DX(Digital Transformation)</b>: 산업 패러다임의 변화</div>
|
||||||
|
|
||||||
<div class="bp"><b>DX(Digital Transformation) : 산업 패러다임의 변화</b></div>
|
|
||||||
<div class="sp">디지털 기술을 기반으로 산업 전반의 업무방식과 가치 창출 구조를 전환하는 과정 및 결과</div>
|
<div class="sp">디지털 기술을 기반으로 산업 전반의 업무방식과 가치 창출 구조를 전환하는 과정 및 결과</div>
|
||||||
<div class="sp">단순한 기술 도입이 아닌, 고객 가치와 의사결정 방식의 근본적인 변화로 산업의 새로운 방향을 정립하는 것을 의미함</div>
|
<div class="sp">단순한 기술 도입이 아닌, 고객 가치와 의사결정 방식의 근본적인 변화로 산업의 새로운 방향을 정립하는 것을 의미함</div>
|
||||||
<div class="sp">출처: Digital Transformation, IBM Institute for Business Value, 2011 / What is Digital Transformation?, Agile Elephant, 2015</div>
|
|
||||||
|
|
||||||
<div class="bp">DX는 BIM과 같은 디지털기술을 기반으로 산업 전반의 프로세스를 혁신하는 상위개념</div>
|
<div class="bp">DX는 BIM과 같은 디지털기술을 기반으로 산업 전반의 프로세스를 혁신하는 상위개념</div>
|
||||||
<div class="bp">건설산업의 DX는 GIS(공간정보), BIM, 디지털 트윈(가상환경)의 기술융합을 통해서만 실현 또는 구현 가능</div>
|
<div class="bp">건설산업의 DX는 GIS(공간정보), BIM, 디지털 트윈(가상환경)의 기술융합을 통해서만 실현 또는 구현 가능</div>
|
||||||
<div class="sp"><b>GIS의 역할</b> : 지리적 데이터를 공간 분석하여 시각적으로 표현, 위치기반 정보 제공</div>
|
<div class="sp">GIS의 역할: 지리적 데이터를 공간 분석하여 시각적으로 표현, 위치기반 정보 제공</div>
|
||||||
<div class="sp"><b>BIM의 역할</b> : 형상정보와 내용정보가 포함된 3D모델로, 건설 정보 기반의 Process와 Product를 제공</div>
|
<div class="sp">BIM의 역할: 형상정보와 내용정보가 포함된 3D모델로, 건설 정보 기반의 Process와 Product를 제공</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="key-msg">
|
<div class="key-msg">
|
||||||
건설산업에서 DX는 상위 개념이고 BIM은 그 디지털 전환을 가능하게 하는 핵심 기술 중 하나다.
|
건설산업에서 DX는 상위 개념이고 BIM은 그 디지털 전환을 가능하게 하는 핵심 기술 중 하나다.
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<details class="dx-bim-comparison" style="display: none; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: white; border: 2px solid #e2e8f0; border-radius: 8px; padding: 20px; max-width: 90vw; max-height: 80vh; overflow-y: auto; z-index: 1000; box-shadow: 0 10px 25px rgba(0,0,0,0.2);">
|
||||||
|
<summary style="font-size: 14px; font-weight: 700; margin-bottom: 15px; cursor: pointer;">DX와 BIM의 구분</summary>
|
||||||
|
<table style="width: 100%; border-collapse: collapse; font-size: 11px;">
|
||||||
|
<thead>
|
||||||
|
<tr style="background: #f8f9fa;">
|
||||||
|
<th style="border: 1px solid #dee2e6; padding: 8px; text-align: center; font-weight: 700;">DX</th>
|
||||||
|
<th style="border: 1px solid #dee2e6; padding: 8px; text-align: center; font-weight: 700;">구분</th>
|
||||||
|
<th style="border: 1px solid #dee2e6; padding: 8px; text-align: center; font-weight: 700;">BIM</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr><td style="border: 1px solid #dee2e6; padding: 6px;"><b>BIM << DX</b>(Engineering + Management 통합)</td><td style="border: 1px solid #dee2e6; padding: 6px; text-align: center; font-weight: 700;">범위</td><td style="border: 1px solid #dee2e6; padding: 6px;"><b>Only 3D</b>(형상 구현 중심)</td></tr>
|
||||||
|
<tr><td style="border: 1px solid #dee2e6; padding: 6px;"><b>제작 및 운영</b>(상용 + 전용 40~80개)[Rhino, Sketchup, Blender..] + [EG-BIM 등]</td><td style="border: 1px solid #dee2e6; padding: 6px; text-align: center; font-weight: 700;">S/W</td><td style="border: 1px solid #dee2e6; padding: 6px;"><b>모델 제작용 상용 SW</b>[Revit, Civil 3D, Navisworks, Autocad]</td></tr>
|
||||||
|
<tr><td style="border: 1px solid #dee2e6; padding: 6px;"><b>근본적 문제의식을 통한 개선</b></td><td style="border: 1px solid #dee2e6; padding: 6px; text-align: center; font-weight: 700;">프로세스</td><td style="border: 1px solid #dee2e6; padding: 6px;"><b>기존 2D 설계 방식 유지</b></td></tr>
|
||||||
|
<tr><td style="border: 1px solid #dee2e6; padding: 6px;"><b>공학 정보 및 콘텐츠 연계에 집중</b> 도면, 수량, 시공계획 등 일식</td><td style="border: 1px solid #dee2e6; padding: 6px; text-align: center; font-weight: 700;">성과품</td><td style="border: 1px solid #dee2e6; padding: 6px;"><b>3D 모델 중심</b> 기존 성과품 유지</td></tr>
|
||||||
|
<tr><td style="border: 1px solid #dee2e6; padding: 6px;"><b>설계/시공 생산성 혁신</b>(개념의 재정립)</td><td style="border: 1px solid #dee2e6; padding: 6px; text-align: center; font-weight: 700;">활용</td><td style="border: 1px solid #dee2e6; padding: 6px;"><b>3D 모델에 의한 일반적 이해 향상</b></td></tr>
|
||||||
|
<tr><td style="border: 1px solid #dee2e6; padding: 6px;"><b>전 생애주기 활용 시스템</b></td><td style="border: 1px solid #dee2e6; padding: 6px; text-align: center; font-weight: 700;">확장성</td><td style="border: 1px solid #dee2e6; padding: 6px;"><b>(설계/시공/운영) 분야별 단절</b></td></tr>
|
||||||
|
<tr><td style="border: 1px solid #dee2e6; padding: 6px;"><b>구체화(복잡) - 적극적/구체적 실현 방안</b></td><td style="border: 1px solid #dee2e6; padding: 6px; text-align: center; font-weight: 700;">수행 개념</td><td style="border: 1px solid #dee2e6; padding: 6px;"><b>단순화(오류) - 수동적/집단적 동질화</b></td></tr>
|
||||||
|
<tr><td style="border: 1px solid #dee2e6; padding: 6px;"><b>적극적, 주체적인 기술 접목/융합</b></td><td style="border: 1px solid #dee2e6; padding: 6px; text-align: center; font-weight: 700;">CIVIL + IT</td><td style="border: 1px solid #dee2e6; padding: 6px;"><b>소극적, 상용 기술에 의존</b></td></tr>
|
||||||
|
<tr><td style="border: 1px solid #dee2e6; padding: 6px;"><b>자체 수행 능력 - 지속가능성 확보</b></td><td style="border: 1px solid #dee2e6; padding: 6px; text-align: center; font-weight: 700;">주체</td><td style="border: 1px solid #dee2e6; padding: 6px;"><b>S/W 제작사 판매 정책에 의존</b></td></tr>
|
||||||
|
<tr><td style="border: 1px solid #dee2e6; padding: 6px;"><b>차별화 및 경쟁력 확보, 해외 진출</b></td><td style="border: 1px solid #dee2e6; padding: 6px; text-align: center; font-weight: 700;">발주처</td><td style="border: 1px solid #dee2e6; padding: 6px;"><b>평준화, 국내 중심</b></td></tr>
|
||||||
|
<tr><td style="border: 1px solid #dee2e6; padding: 6px;"><b>IT + CIVIL ENG 220명 운영 + 기술 개발</b></td><td style="border: 1px solid #dee2e6; padding: 6px; text-align: center; font-weight: 700;">설계사</td><td style="border: 1px solid #dee2e6; padding: 6px;"><b>소규모 BIM팀 운영 + 단순교육에 집중</b></td></tr>
|
||||||
|
<tr><td style="border: 1px solid #dee2e6; padding: 6px;"><b>분야 확장 모델 및 시스템</b></td><td style="border: 1px solid #dee2e6; padding: 6px; text-align: center; font-weight: 700;">시공사</td><td style="border: 1px solid #dee2e6; padding: 6px;"><b>국내 토목 소극적/해외 토목증가</b></td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<button style="margin-top: 10px; padding: 5px 10px; background: #dc3545; color: white; border: none; border-radius: 4px; cursor: pointer;">닫기</button>
|
||||||
|
</details>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.core {
|
.core {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
max-height: 358px;
|
max-height: 371px;
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
font-family: 'Pretendard Variable', sans-serif;
|
font-family: 'Pretendard Variable', sans-serif;
|
||||||
background: #ffffff;
|
background: #ffffff;
|
||||||
@@ -328,7 +317,7 @@
|
|||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
padding: 5px 12px;
|
padding: 5px 12px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 14px;
|
font-size: 12px;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
color: #0c4a6e;
|
color: #0c4a6e;
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
@@ -344,7 +333,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="area-sidebar" style="overflow:hidden;">
|
<div class="area-sidebar" style="overflow:hidden;">
|
||||||
<div style="width:380px; height:474px; overflow:hidden; padding:14px; box-sizing:border-box; font-family:sans-serif;">
|
<div style="width:380px; height:474px; overflow:hidden; padding:16px; background:#ffffff; font-family:sans-serif;">
|
||||||
<div style="font-size:10px; color:#64748b; margin-bottom:12px; text-align:left;">용어 정의</div>
|
<div style="font-size:10px; color:#64748b; margin-bottom:12px; text-align:left;">용어 정의</div>
|
||||||
|
|
||||||
<div style="background:#f8fafc; border:1px solid #e2e8f0; border-radius:8px; padding:14px; margin-bottom:10px;">
|
<div style="background:#f8fafc; border:1px solid #e2e8f0; border-radius:8px; padding:14px; margin-bottom:10px;">
|
||||||
@@ -357,14 +346,14 @@
|
|||||||
<div style="font-size:11px; font-weight:bold; color:#1e293b; margin-bottom:8px;">BIM(Building Information Modeling) : 디지털 전환을 위한 핵심 기술</div>
|
<div style="font-size:11px; font-weight:bold; color:#1e293b; margin-bottom:8px;">BIM(Building Information Modeling) : 디지털 전환을 위한 핵심 기술</div>
|
||||||
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 시설물의 생애주기동안 발생한 모든 정보를 3차원 모델 기반으로 통합·관리하는 정보 관리 도구</div>
|
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 시설물의 생애주기동안 발생한 모든 정보를 3차원 모델 기반으로 통합·관리하는 정보 관리 도구</div>
|
||||||
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 건설 정보와 절차를 표준화된 방식으로 연계하고 디지털 협업이 가능하도록 하는 핵심 인프라 기술</div>
|
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 건설 정보와 절차를 표준화된 방식으로 연계하고 디지털 협업이 가능하도록 하는 핵심 인프라 기술</div>
|
||||||
<div style="font-size:9px; color:#94a3b8; font-style:italic; margin-top:8px; border-top:1px solid #e2e8f0; padding-top:6px;">출처: 건설산업 BIM 기본지침, 국토교통부, 2020</div>
|
<div style="font-size:10px; color:#94a3b8; margin-top:6px; font-style:italic;">출처: 건설산업 BIM 기본지침, 국토교통부, 2020</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style="background:#f8fafc; border:1px solid #e2e8f0; border-radius:8px; padding:14px;">
|
<div style="background:#f8fafc; border:1px solid #e2e8f0; border-radius:8px; padding:14px;">
|
||||||
<div style="font-size:11px; font-weight:bold; color:#1e293b; margin-bottom:8px;">DX(Digital Transformation) : 산업 패러다임의 변화</div>
|
<div style="font-size:11px; font-weight:bold; color:#1e293b; margin-bottom:8px;">DX(Digital Transformation) : 산업 패러다임의 변화</div>
|
||||||
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 디지털 기술을 기반으로 산업 전반의 업무방식과 가치 창출 구조를 전환하는 과정 및 결과</div>
|
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 디지털 기술을 기반으로 산업 전반의 업무방식과 가치 창출 구조를 전환하는 과정 및 결과</div>
|
||||||
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 단순한 기술 도입이 아닌, 고객 가치와 의사결정 방식의 근본적인 변화로 산업의 새로운 방향을 정립하는 것을 의미함</div>
|
<div style="padding-left:14px; text-indent:-14px; margin-bottom:4px; font-size:10px; color:#475569; line-height:1.6;">• 단순한 기술 도입이 아닌, 고객 가치와 의사결정 방식의 근본적인 변화로 산업의 새로운 방향을 정립하는 것을 의미함</div>
|
||||||
<div style="font-size:9px; color:#94a3b8; font-style:italic; margin-top:8px; border-top:1px solid #e2e8f0; padding-top:6px;">출처: Digital Transformation, IBM Institute for Business Value, 2011 / What is Digital Transformation?, Agile Elephant, 2015</div>
|
<div style="font-size:10px; color:#94a3b8; margin-top:6px; font-style:italic;">출처: Digital Transformation, IBM Institute for Business Value, 2011 / What is Digital Transformation?, Agile Elephant, 2015</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
104
scripts/gitea_issue_sync.py
Normal file
104
scripts/gitea_issue_sync.py
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
from urllib import error, parse, request
|
||||||
|
|
||||||
|
|
||||||
|
def _required_env(name: str) -> str:
|
||||||
|
value = os.getenv(name, '').strip()
|
||||||
|
if not value:
|
||||||
|
raise SystemExit(f'Missing required environment variable: {name}')
|
||||||
|
return value
|
||||||
|
|
||||||
|
|
||||||
|
def _headers(token: str) -> dict[str, str]:
|
||||||
|
return {
|
||||||
|
'Authorization': f'token {token}',
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'Accept': 'application/json',
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def _call_json(method: str, url: str, token: str, payload: dict) -> dict:
|
||||||
|
data = json.dumps(payload, ensure_ascii=False).encode('utf-8')
|
||||||
|
req = request.Request(url, data=data, headers=_headers(token), method=method)
|
||||||
|
try:
|
||||||
|
with request.urlopen(req, timeout=30) as resp:
|
||||||
|
return json.loads(resp.read().decode('utf-8'))
|
||||||
|
except error.HTTPError as exc:
|
||||||
|
body = exc.read().decode('utf-8', errors='replace')
|
||||||
|
raise SystemExit(f'Gitea API error {exc.code}: {body}') from exc
|
||||||
|
except error.URLError as exc:
|
||||||
|
raise SystemExit(f'Failed to reach Gitea API: {exc}') from exc
|
||||||
|
|
||||||
|
|
||||||
|
def _load_text(path: Path) -> str:
|
||||||
|
return path.read_text(encoding='utf-8')
|
||||||
|
|
||||||
|
|
||||||
|
def _repo_api_base(base_url: str, repo: str) -> str:
|
||||||
|
owner, name = repo.split('/', 1)
|
||||||
|
return f"{base_url.rstrip('/')}/api/v1/repos/{parse.quote(owner)}/{parse.quote(name)}"
|
||||||
|
|
||||||
|
|
||||||
|
def create_issue(base_url: str, token: str, repo: str, title: str, body: str) -> dict:
|
||||||
|
url = f'{_repo_api_base(base_url, repo)}/issues'
|
||||||
|
return _call_json('POST', url, token, {'title': title, 'body': body})
|
||||||
|
|
||||||
|
|
||||||
|
def create_comment(base_url: str, token: str, repo: str, issue_number: int, body: str) -> dict:
|
||||||
|
url = f'{_repo_api_base(base_url, repo)}/issues/{issue_number}/comments'
|
||||||
|
return _call_json('POST', url, token, {'body': body})
|
||||||
|
|
||||||
|
|
||||||
|
def update_issue(base_url: str, token: str, repo: str, issue_number: int, title: str | None, body: str | None) -> dict:
|
||||||
|
payload: dict[str, str] = {}
|
||||||
|
if title is not None:
|
||||||
|
payload['title'] = title
|
||||||
|
if body is not None:
|
||||||
|
payload['body'] = body
|
||||||
|
url = f'{_repo_api_base(base_url, repo)}/issues/{issue_number}'
|
||||||
|
return _call_json('PATCH', url, token, payload)
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
parser = argparse.ArgumentParser(description='Create or update Gitea issues/comments.')
|
||||||
|
sub = parser.add_subparsers(dest='command', required=True)
|
||||||
|
|
||||||
|
common = argparse.ArgumentParser(add_help=False)
|
||||||
|
common.add_argument('--repo', required=True, help='owner/repo')
|
||||||
|
common.add_argument('--body-file', required=True, help='UTF-8 markdown file path')
|
||||||
|
|
||||||
|
p_issue = sub.add_parser('create-issue', parents=[common])
|
||||||
|
p_issue.add_argument('--title', required=True)
|
||||||
|
|
||||||
|
p_comment = sub.add_parser('create-comment', parents=[common])
|
||||||
|
p_comment.add_argument('--issue-number', type=int, required=True)
|
||||||
|
|
||||||
|
p_update = sub.add_parser('update-issue', parents=[common])
|
||||||
|
p_update.add_argument('--issue-number', type=int, required=True)
|
||||||
|
p_update.add_argument('--title')
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
base_url = _required_env('GITEA_URL')
|
||||||
|
token = _required_env('GITEA_TOKEN')
|
||||||
|
body = _load_text(Path(args.body_file))
|
||||||
|
|
||||||
|
if args.command == 'create-issue':
|
||||||
|
result = create_issue(base_url, token, args.repo, args.title, body)
|
||||||
|
elif args.command == 'create-comment':
|
||||||
|
result = create_comment(base_url, token, args.repo, args.issue_number, body)
|
||||||
|
else:
|
||||||
|
result = update_issue(base_url, token, args.repo, args.issue_number, args.title, body)
|
||||||
|
|
||||||
|
json.dump(result, sys.stdout, ensure_ascii=False, indent=2)
|
||||||
|
sys.stdout.write('\n')
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user