Some checks failed
Multi-MDX Regression (IMP-91) / multi-mdx-regression (push) Failing after 22s
u1 KNOWN_AXES tuple gains slide_css entry in src/user_overrides_io.py
(snake_case parity with image_overrides); round-trip test extends
to 6 axes.
u2 src/mdx_normalizer.py surfaces nested slide_overrides.css from the
MDX frontmatter into the normalize_mdx_content return dict; absent
key -> {}, non-string css drops. 4 unit cases in tests/test_mdx_normalizer.py
(present / absent / non-string / title-only).
u3 src/slide_css_injector.py NEW (88 lines) mirrors the
inject_image_overrides_style contract from src/image_id_stamper.py:
marker pair <!--IMP45-SLIDE-CSS:OPEN--> / <!--IMP45-SLIDE-CSS:CLOSE-->,
idempotent re-injection, </head> > <body> > document-start three-tier
fallback, empty/None -> unchanged. 8 fixtures in
tests/test_slide_css_injector.py mirror test_image_id_stamper.py.
u4 run_phase_z2_mvp1 accepts override_slide_css: Optional[str] = None;
None -> frontmatter slide_overrides.css fallback. Step 13 calls
inject_slide_css after image override injection and before the
final.html disk write, so CLI/CI/regression renders observe the same
backend artifact.
u5 argparse adds mutually-exclusive --override-slide-css TEXT (inline
CSS, <style> wrapper optional) and --slide-css-file PATH (UTF-8 read,
fail-closed sys.exit(2) on missing path / decode error / both flags
present). Resolved string is forwarded as override_slide_css kwarg.
6 cases in tests/test_phase_z2_cli_overrides.py (inline / file / both
/ missing / non-utf8 / neither).
u6 samples/mdx_batch/04.mdx frontmatter gains slide_overrides.css
block (verbatim of the former MDX04_DEFAULT_OVERRIDE_CSS constant,
no sample/frame gate). Subprocess smoke in
tests/test_phase_z2_slide_css_smoke.py verifies the marker pair and
CSS substring land in final.html.
u7 Front/client removes the sample/frame-gated frontend-only injection:
Home.tsx drops the MDX04_DEFAULT_OVERRIDE_CSS constant and the
sample==="04"+frame==="process_product_two_way" branch (-28 lines);
SlideCanvas.tsx drops the iframe contentDocument.head injection of
that prop (-14 lines). Live preview now reads backend final.html only.
u8 tests/regression/fixtures/89a_pre_baseline_sha.json 04.mdx entry
resyncs to the live SHA ddb6bf2f... / 28042 bytes (overwrites the
earlier 5-byte-drift d02c76fd... / 28047). Other entries untouched.
Note: 01.mdx baseline drift (ad6f16a3... / 29089 -> live f26a7fac...
/ 29084) predates this branch and is split to a follow-up issue per
the closed-issue fresh validation rule.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
273 lines
10 KiB
Plaintext
273 lines
10 KiB
Plaintext
---
|
|
title: DX 지연 요인
|
|
sidebar:
|
|
order: 03
|
|
slide_overrides:
|
|
css: |
|
|
.slide-body {
|
|
grid-template-rows: 0.38fr 0.60fr !important;
|
|
gap: 1.5% !important;
|
|
}
|
|
.f29b__cell .text-line + .text-line { margin-top: 1px !important; }
|
|
.f29b__cell:nth-child(n+3) {
|
|
padding-top: 3px !important;
|
|
margin-top: 2px !important;
|
|
}
|
|
---
|
|
|
|
## 1. DX에 대한 인식
|
|
<br/>
|
|
<div style={{ display: 'flex', flexWrap: 'wrap', gap: '20px', justifycontent: 'center' }}>
|
|
|
|
<div style={{
|
|
width: '100%',
|
|
minWidth: '300px',
|
|
background: '#fff',
|
|
border: '1px solid #e1e4e8',
|
|
borderRadius: '12px',
|
|
padding: '20px',
|
|
boxShadow: '0 4px 6px rgba(0,0,0,0.05)',
|
|
position: 'relative',
|
|
transition: 'transform 0.2s, box-shadow 0.2s',
|
|
cursor: 'default'
|
|
}}
|
|
onMouseOver={(e) => {
|
|
e.currentTarget.style.transform = 'translateY(-3px)';
|
|
e.currentTarget.style.boxShadow = '0 6px 12px rgba(0,0,0,0.1)';
|
|
}}
|
|
onMouseOut={(e) => {
|
|
e.currentTarget.style.transform = 'translateY(0)';
|
|
e.currentTarget.style.boxShadow = '0 4px 6px rgba(0,0,0,0.05)';
|
|
}}
|
|
>
|
|
<div style={{ display: 'flex', alignitems: 'center', marginBottom: '15px' }}>
|
|
<h3 style={{ margin: 0, fontSize: '1.25rem'}}>기술 및 소프트웨어 이해도</h3>
|
|
</div>
|
|
<p style={{
|
|
background: '#f8f9fa',
|
|
borderLeft: '4px solid #1a73e8',
|
|
padding: '10px 15px',
|
|
margin: '0 0 15px 0',
|
|
fontSize: '1rem',
|
|
fontWeight: 'bold',
|
|
color: '#333'
|
|
}}>"무슨 말인지 잘 모르겠다, 어디까지 어떻게 해야 하는지 모르겠다"</p>
|
|
<ul style={{ margin: 0, paddingLeft: '20px', color: '#555', fontSize: '1.0rem', lineHeight: '1.8' }}>
|
|
<li>기본지침, 시행지침 등 새롭게 알아야 할 게 너무 많다.</li>
|
|
<li>3D 모델과 별 차이점을 모르겠다. S/W마다 사용법이 다르다.</li>
|
|
<li>필요한 것은 쉽고 간단한 건데, 왜 이렇게 복잡하게 만들까?</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div style={{
|
|
width: '100%',
|
|
minWidth: '300px',
|
|
background: '#fff',
|
|
border: '1px solid #e1e4e8',
|
|
borderRadius: '12px',
|
|
padding: '20px',
|
|
boxShadow: '0 4px 6px rgba(0,0,0,0.05)',
|
|
transition: 'transform 0.2s, box-shadow 0.2s',
|
|
cursor: 'default'
|
|
}}
|
|
onMouseOver={(e) => {
|
|
e.currentTarget.style.transform = 'translateY(-3px)';
|
|
e.currentTarget.style.boxShadow = '0 6px 12px rgba(0,0,0,0.1)';
|
|
}}
|
|
onMouseOut={(e) => {
|
|
e.currentTarget.style.transform = 'translateY(0)';
|
|
e.currentTarget.style.boxShadow = '0 4px 6px rgba(0,0,0,0.05)';
|
|
}}
|
|
>
|
|
<div style={{ display: 'flex', alignitems: 'center', marginBottom: '15px' }}>
|
|
<h3 style={{ margin: 0, fontSize: '1.25rem'}}>효과와 효율성</h3>
|
|
</div>
|
|
<p style={{
|
|
background: '#f8f9fa',
|
|
borderLeft: '4px solid #d93025',
|
|
padding: '10px 15px',
|
|
margin: '0 0 15px 0',
|
|
fontSize: '1rem',
|
|
fontWeight: 'bold',
|
|
color: '#333'
|
|
}}>"2D 설계 후 전환설계를 수행하는데 효과는 모르겠고, 효율은 낮다"</p>
|
|
<ul style={{ margin: 0, paddingLeft: '20px', color: '#555', fontSize: '1.0rem', lineHeight: '1.8' }}>
|
|
<li>성과품 작성은 기존과 같게 하고, 추가 업무만 발생해 효율이 낮다.</li>
|
|
<li>BIM으로 인해 가중되는 업무 대비 효과가 거의 없어 보인다.</li>
|
|
<li>결과적으로 큰 차이를 못 느끼겠고, 이런 노력이 정말 가치 있는 일이야?</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div style={{
|
|
width: '100%',
|
|
minWidth: '300px',
|
|
background: '#fff',
|
|
border: '1px solid #e1e4e8',
|
|
borderRadius: '12px',
|
|
padding: '20px',
|
|
boxShadow: '0 4px 6px rgba(0,0,0,0.05)',
|
|
transition: 'transform 0.2s, box-shadow 0.2s',
|
|
cursor: 'default'
|
|
}}
|
|
onMouseOver={(e) => {
|
|
e.currentTarget.style.transform = 'translateY(-3px)';
|
|
e.currentTarget.style.boxShadow = '0 6px 12px rgba(0,0,0,0.1)';
|
|
}}
|
|
onMouseOut={(e) => {
|
|
e.currentTarget.style.transform = 'translateY(0)';
|
|
e.currentTarget.style.boxShadow = '0 4px 6px rgba(0,0,0,0.05)';
|
|
}}
|
|
>
|
|
<div style={{ display: 'flex', alignitems: 'center', marginBottom: '15px' }}>
|
|
<h3 style={{ margin: 0, fontSize: '1.25rem'}}>인력 및 교육</h3>
|
|
</div>
|
|
<p style={{
|
|
background: '#f8f9fa',
|
|
borderLeft: '4px solid #f9ab00',
|
|
padding: '10px 15px',
|
|
margin: '0 0 15px 0',
|
|
fontSize: '1rem',
|
|
fontWeight: 'bold',
|
|
color: '#333'
|
|
}}>"수행 인력이 부족하고, 기존 직원들은 어떻게 교육해야 하나"</p>
|
|
<ul style={{ margin: 0, paddingLeft: '20px', color: '#555', fontSize: '1.0rem', lineHeight: '1.8' }}>
|
|
<li>교육시간 손실로 일손이 더 필요해지고, 적응하는데도 시간이 걸린다.</li>
|
|
<li>신입사원은 없고 BIM 수행을 할 수 있는 기술자가 부족하다.</li>
|
|
<li>여러 회사의 S/W별 사용법이 달라 새로운 S/W에 적용에 시간이 필요하다.</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div style={{
|
|
width: '100%',
|
|
minWidth: '300px',
|
|
background: '#fff',
|
|
border: '1px solid #e1e4e8',
|
|
borderRadius: '12px',
|
|
padding: '20px',
|
|
boxShadow: '0 4px 6px rgba(0,0,0,0.05)',
|
|
transition: 'transform 0.2s, box-shadow 0.2s',
|
|
cursor: 'default'
|
|
}}
|
|
onMouseOver={(e) => {
|
|
e.currentTarget.style.transform = 'translateY(-3px)';
|
|
e.currentTarget.style.boxShadow = '0 6px 12px rgba(0,0,0,0.1)';
|
|
}}
|
|
onMouseOut={(e) => {
|
|
e.currentTarget.style.transform = 'translateY(0)';
|
|
e.currentTarget.style.boxShadow = '0 4px 6px rgba(0,0,0,0.05)';
|
|
}}
|
|
>
|
|
<div style={{ display: 'flex', alignitems: 'center', marginBottom: '15px' }}>
|
|
<h3 style={{ margin: 0, fontSize: '1.25rem'}}>경제적 부담</h3>
|
|
</div>
|
|
<p style={{
|
|
background: '#f8f9fa',
|
|
borderLeft: '4px solid #34a853',
|
|
padding: '10px 15px',
|
|
margin: '0 0 15px 0',
|
|
fontSize: '1rem',
|
|
fontWeight: 'bold',
|
|
color: '#333'
|
|
}}>"S/W 구독료만 크게 발생되고, 비용 보전은 안 된다"</p>
|
|
<ul style={{ margin: 0, paddingLeft: '20px', color: '#555', fontSize: '1.0rem', lineHeight: '1.8' }}>
|
|
<li>사용해야 할 S/W의 종류가 너무 많고 복잡한데 모두 필요한가?</li>
|
|
<li>모든 Project에 적용되는 것도 아닌데, 다수의 S/W 구독료를 내야 한다.</li>
|
|
<li>디지털전환 하기 위해 이 비용을 쓰는게 정말 경제적인 이득이 있는 거야?</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div style={{
|
|
width: '100%',
|
|
background: '#fff',
|
|
border: '1px solid #e1e4e8',
|
|
borderRadius: '12px',
|
|
padding: '20px',
|
|
boxShadow: '0 4px 6px rgba(0,0,0,0.05)',
|
|
transition: 'transform 0.2s, box-shadow 0.2s',
|
|
cursor: 'default',
|
|
marginTop: '10px'
|
|
}}
|
|
onMouseOver={(e) => {
|
|
e.currentTarget.style.transform = 'translateY(-3px)';
|
|
e.currentTarget.style.boxShadow = '0 6px 12px rgba(0,0,0,0.1)';
|
|
}}
|
|
onMouseOut={(e) => {
|
|
e.currentTarget.style.transform = 'translateY(0)';
|
|
e.currentTarget.style.boxShadow = '0 4px 6px rgba(0,0,0,0.05)';
|
|
}}
|
|
>
|
|
<div style={{ display: 'flex', alignitems: 'center', marginBottom: '15px' }}>
|
|
<h3 style={{ margin: 0, fontSize: '1.25rem'}}>실무 및 적용성</h3>
|
|
</div>
|
|
<p style={{
|
|
background: '#f8f9fa',
|
|
borderLeft: '4px solid #8e24aa',
|
|
padding: '10px 15px',
|
|
margin: '0 0 15px 0',
|
|
fontSize: '1rem',
|
|
fontWeight: 'bold',
|
|
color: '#333'
|
|
}}>"실무적 사용에 의한 효율성 증진보다는 홍보, PQ용으로 사용한다"</p>
|
|
<ul style={{ margin: 0, paddingLeft: '20px', color: '#555', fontSize: '1.0rem', lineHeight: '1.8' }}>
|
|
<li>구체적 적용에 의한 비용, 시간, 품질 등의 효과 사례가 없다.</li>
|
|
<li>지형, 선형, 도로, 교량 Model을 만드는 S/W가 모두 달라 적용이 어렵다.</li>
|
|
<li>속성정보를 반영하지 않은 형상 위주의 3D 모델 제작에만 초점이 맞춰져 있다.</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<br/>
|
|
---
|
|
<br/>
|
|
## 2. DX 추진의 실태
|
|
|
|
<br/>
|
|
|
|
### 2.1 정책 및 발주 체계
|
|
- **실질적 기술 경쟁을 저해하는 정책 집행**
|
|
- 모든 설계사가 수행 능력을 갖추었다는 전제하에 정책 시행
|
|
- 수행 능력이 없는 업체 선정 후 성과품의 수준을 낮추어 시행
|
|
<br/>
|
|
- **적용 효과가 있는 사례도 없이 방침부터 도입**
|
|
- DX/BIM 적용에 따른 실무적 이득이 있다고 판단된 사례 부족
|
|
- BIM 지침/방침 등을 시행 경험과 효과 검증도 없이 남발
|
|
<br/>
|
|
- **엔지니어링 S/W에 대한 개념 부재**
|
|
- 다양한 엔지니어링 S/W의 특성에 대한 깊은 이해 없이 범용 S/W 선택
|
|
- 대형 Global S/W 회사에 과도한 의존과 이에 예속되는 방침 남발로 전용 S/W 소멸
|
|
<br/>
|
|
- **기술투자(R&D) 없는 성과 창출 기대**
|
|
- 단순 BIM S/W만 구입하면 될 것이라는 안일한 생각
|
|
- 실질적 기술 개발 투자 노력 없이 남들이 하는 대로 하면 된다는 착각
|
|
<br/>
|
|
<details>
|
|
<summary style={{cursor: 'pointer', fontWeight: 'bold', color: '#555'}}>발주처 반응</summary>
|
|
<img src="/assets/images/발주처반응.png" />
|
|
</details>
|
|
|
|
### 2.2 조직 및 수행 역량
|
|
- **공학적 개념 정립 부재**
|
|
- DX와 BIM의 차이점을 명확히 구분하지 못하고 접근 방식과 기술적 도구 사이의 혼란만 가중
|
|
- 단순히 기술적 도구의 사용에 초점을 맞추느라 3D모델 제작 S/W에 과도하게 의존
|
|
<br/>
|
|
- **‘본업 기술력 확보’ 우선의 개념 부재**
|
|
- 고도의 전문지식과 현장 경험이 축적된 Manual의 중요성과 필요성에 대한 이해 부족
|
|
- 국가·발주처의 지침·방침에만 의존한 업체의 기술력
|
|
<br/>
|
|
- **DX/BIM의 근본 취지와 목표의 이해 부족**
|
|
- DX에 의한 과정의 혁신과 결과물의 변화에 대한 고민 부재
|
|
- 기술자가 직접 3D모델을 만들고 수정하며 설계를 수행하지 않고, 별도로 외주 처리하여 본질 회피
|
|
<br/>
|
|
- **과거의 타성에 머무르고 있는 기술자 집단**
|
|
- 설계/감리/시공 임직원들의 Digital 무지와 전략적 무지
|
|
- 교육과 학습을 통한 인재 양성보다 당장 실무 활용이 가능한 타사 인력 빼오기에 집중
|
|
<br/>
|
|
<details>
|
|
<summary style={{cursor: 'pointer', fontWeight: 'bold', color: '#555'}}>설계·시공업계 반응</summary>
|
|
<img src="/assets/images/설계시공업계반응.png" />
|
|
</details>
|
|
<br/>
|
|
---
|
|
|
|
:::note[핵심 요약]
|
|
* 검증 없는 정책의 일방적 추진과 조직의 회피, 이해 부족은 DX 지연을 반복시키고 있다.
|
|
::: |