서론
제조 엔지니어링 작업에서 시뮬레이션을 구축하고 3D 모델을 생성하는 것은 필수적인 과정입니다. 하지만 이러한 작업에는 전문 소프트웨어에 대한 숙련도와 그에 상응하는 시간이 필요합니다.
본 기사에서는 AWS의 AI 코딩 어시스턴트(AI coding assistant)인 "Kiro"를 사용하여 자연어 지시만으로 유체 시뮬레이션과 3D 모델을 구축하는 "Auto&Manufacturing - Kiro for Business Users" 워크숍을 소개합니다.
참고: 이 워크숍에서는 Kiro CLI의 파운데이션 모델(foundation model)로 Claude Opus 4.6이 사용됩니다. 생성된 코드의 품질과 동작은 모델 버전에 따라 다를 수 있습니다.
참고: 본 기사에서 보여주는 테스트에서는 Kiro가 기본적으로 Python에서 사용 가능한 라이브러리만을 사용하며, 특정 CAD 소프트웨어나 시뮬레이션 소프트웨어를 사용하지 않고 3D 모델링과 유체 시뮬레이션을 실행합니다.
워크숍은 다음 두 가지 모듈을 포함합니다.
| 모듈 | 내용 | 소요 시간 |
|---|
| 엔지니어링 (Engineering) | 격자 볼츠만 방법 (lattice Boltzmann method)을 사용한 CFD 시뮬레이션 구축 | 25분 |
| 제품 디자인 (Product Design) | NACA 익형(airfoil) 터빈 블레이드의 파라메트릭 디자인 (Parametric design) | 25분 |
두 모듈 모두 참가자가 단 한 줄의 코드도 작성하지 않고, 자연어 대화만을 사용하여 엔지니어링 결과물을 생성하는 경험을 제공합니다.
[이미지 1] 워크숍 결과물 개요
2×2 그리드로 배열된 CFD 속도장 (velocity field), 터빈 블레이드 비교, 제트 엔진 및 로봇 팔 이미지. 모두 자연어 지시만으로 생성되었습니다.
후속편이 게시되었습니다: 본 기사에서는 STL 형식의 출력을 다루었지만, 후속편에서는 한 단계 더 나아가 자연어 지시만으로 STEP 형식의 3D 모델 출력을 달성하고 FreeCAD에서 편집하는 과정을 다룹니다.
추가 후속편도 게시되었습니다: 위 후속편에서 STEP을 통해 편집된 로봇 팔을 사용하여, Kiro가 FreeCAD FEM을 통해 구조 해석 (CAE)을 수행하도록 하고 응력(stress)과 변위(displacement)를 정량적으로 평가했습니다. 이제 설계 → CAD 편집 → 강도 검증으로 이어지는 엔드 투 엔드 (end-to-end) 파이프라인이 완성되었습니다.
그리고 4번째 후속편도 발표되었습니다: 지금까지 설계, 편집 및 강도 검증을 마친 로봇 팔에 흡착식 그리퍼 (suction-cup gripper)를 추가하였으며, NVIDIA Isaac Sim / Isaac Lab에서 **4,096개의 병렬 환경을 활용한 강화학습 (PPO)**을 실행했습니다. 이제 AI가 설계한 로봇이 스스로의 움직임을 학습하고 있습니다 — 즉, 설계 → CAD 편집 → CAE → 강화학습 (reinforcement learning)으로 이어지는 엔드 투 엔드 (end-to-end) 파이프라인을 완성했습니다.
모듈 1: CFD 시뮬레이션 — 물리학을 이해하는 AI
개요
첫 번째 모듈에서는 2D 채널 내부에 배치된 실린더 주변의 유체 분석을 수행합니다. 참가자가 Kiro에 다음과 같은 자연어 프롬프트 (natural-language prompt)를 입력하기만 하면 CFD 시뮬레이션이 구축됩니다.
I want to build an interactive 2D fluid dynamics simulation in Python
that visualizes flow around a cylinder.
Setup:
...
용어 사전 (Glossary)
Lattice Boltzmann Method (LBM): 유체 운동을 계산하는 방법입니다.
Re=20은 안정적인 흐름에서 시작하는 설정입니다. 쉽게 말해, 이 프롬프트는 다음과 같이 말하고 있습니다: "2 m × 0.8 m 크기의 수로에 원형 기둥을 배치하고, 왼쪽에서 물을 흘려보낸 뒤, 격자 기반 방식 (grid-based approach)을 사용하여 이를 계산 및 시각화하세요." 참가자들은 이 프롬프트를 Kiro에 직접 붙여넣을 수 있으며, 코드는 자동으로 생성됩니다.
1단계: 시뮬레이션 탐색
생성된 시뮬레이션에는 슬라이더가 내장되어 있어, 입구 속도 (inlet velocity)와 실린더 직경을 실시간으로 변경할 수 있습니다.
| 입구 속도 (Inlet velocity) | 레이놀즈 수 (Reynolds number) | 관찰된 현상 |
|---|
| 0.05 m/s | ~10 | 안정적이고 대칭적인 흐름 |
| ... | | |
2단계: 시각화 모드 추가
동일한 채팅 세션 내에서 기존 시뮬레이션에 기능을 추가할 수 있습니다. Kiro는 코드를 처음부터 다시 쓰는 대신, 기존 코드에 기능을 추가합니다.
라디오 버튼을 통해 전환 가능한 세 가지 시각화 모드를 추가해 주세요.
어두운 배경 스타일을 유지하세요:
1. 속도 크기 (Velocity magnitude) (현재 — inferno 컬러맵 + 유선 (streamlines))
...
3단계: 출판 품질의 그림 생성
보고서 및 발표 자료에 사용하기 위해 고해상도 정적 이미지를 생성합니다.
generate_figures.py라는 이름의 스크립트를 생성해 주세요.
입구 속도 0.25 m/s (Re=50)에서 5000 타임 스텝 (time steps) 동안 시뮬레이션을 실행하고,
출판 품질의 그림 세 개를 PNG로 저장하세요.
...
[이미지 2] 속도장 (Velocity field) 시각화
inferno 컬러맵 (matplotlib 컬러맵 프리셋 — 값이 높을수록 밝음)을 사용한 속도장입니다. 실린더 뒤쪽의 후류 (wake) 구조가 명확하게 시각화되어 있습니다.
[이미지 3] 와도장 (Vorticity field) 시각화
RdBu_r 컬러맵을 사용한 와도장입니다. 빨간색과 파란색은 서로 다른 회전 방향을 나타냅니다.
4단계: 파라미터 연구 (Parameter study)
단일 명령으로 다양한 조건에 따른 비교 이미지를 생성할 수도 있습니다.
parameter_study.py라는 이름의 스크립트를 생성해 주세요.
다섯 가지 서로 다른 입구 속도 (0.05, 0.1, 0.2, 0.35, 0.5 m/s)에서 각각 4000 타임 스텝 동안 시뮬레이션을 실행하고,
...
[Image 4] 레이놀즈 수 (Reynolds number) 비교
다섯 가지 레이놀즈 수에서의 와도 (Vorticity) 필드. 레이놀즈 수 (Re)가 증가함에 따라 와류 방출 (Vortex shedding)이 더 뚜렷해집니다.
Step 5: HTML 보고서 생성
마지막으로, 모든 결과물을 수집하는 보고서를 생성합니다.
cfd_report.html이라는 이름의 HTML 보고서를 생성해 주세요. 내용:
1. 제목 "CFD 시뮬레이션 보고서 — 채널 내 실린더 주변의 유동"
2. 시뮬레이션 파라미터 (터널 크기, 실린더 위치, 유체
...```
시뮬레이션 구축부터 시각화 확장, 출판 품질의 도표 제작, 파라미터 연구 (Parameter study), 그리고 보고서 생성에 이르기까지 — 모든 과정이 단일 채팅 세션 내에서 다섯 번의 지시만으로 완료됩니다.
## Module 2: 제품 디자인 — 대화를 통한 디자인 반복 (Design Iteration)
### 개요
두 번째 모듈에서는 NACA 에어포일 (Airfoil) 단면을 가진 파라메트릭 터빈 블레이드 (Parametric turbine blade)를 설계하고 반복 개선합니다. 전통적인 CAD 워크플로우에서는 파라미터가 변경될 때마다 소프트웨어 내에서 수동 작업이 필요하지만, 본 워크숍에서는 대화를 통해 디자인을 발전시켜 나갑니다.
참고 — NACA: NASA의 전신인 National Advisory Committee for Aeronautics의 약어입니다. 수학적 공식으로 에어포일 단면을 정의하는 "NACA 에어포일" 시리즈는 잘 알려져 있습니다. 4자리 숫자는 두께 및 캠버 (Camber)와 같은 파라미터를 지정합니다. 여기서 "두께비가 12%인 NACA 대칭 에어포일"은 최대 두께가 시위 길이 (Chord length)의 12%인 대칭 에어포일 단면을 의미합니다.
### 디자인 반복 워크플로우
워크플로우는 다음 세 단계로 진행됩니다.
### Step 1: 기본 디자인 생성
첫 번째 프롬프트에서 모든 블레이드 파라미터가 지정됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
turbine-blade라는 폴더를 생성해 주세요.
파라메트릭 터빈 블레이드를 생성하고 이를 STL 파일로 저장하는
generate_blade.py라는 Python 스크립트를 작성해 주세요.
...```
[Image 5] 기본 블레이드의 4면도
생성된 기본 블레이드의 등각 투영도 (Isometric), 정면도, 평면도 및 측면도.
Step 2: STL 검사
우리는 생성된 형상에 대해 Kiro에게 질문합니다.
STL 파일을 로드하고 다음 내용을 알려주세요:
1. 삼각형(triangles) 및 정점(vertices)의 개수
2. 경계 상자(Bounding-box) 치수 (mm 단위의 X, Y, Z 범위)
...
Step 3: 대화형 설계 변경 (Conversational design changes)
동일한 세션 내에서, 비틀림 각도(twist angle)와 테이퍼(taper)를 변경한 수정 버전을 생성하고 비교 시각화(comparison visualization)를 생성합니다.
다음 변경 사항을 적용하여 두 번째 블레이드를 생성하도록 블레이드 생성기(blade generator)를 수정해 주세요:
- 비틀림 각도(twist angle)를 15°에서 25°로 증가 (유동 전환(flow turning) 개선)
...
[Image 6] 설계 변체(design variants) 비교
상단 행: 기본형(파란색) 대 수정형(주황색)의 등각 투영(isometric-view) 비교. 하단 행: 세 군데의 스팬 방향(spanwise) 위치에서의 단면(cross-section) 중첩.
Step 4: 루트 필렛(root fillet) 추가
기존 형상에 후처리(post-processing)를 추가하라는 지시입니다.
블레이드 루트 접합부(blade root junction)에 반경 3mm의 필렛(fillet)을 추가해 주세요.
필렛은 블레이드 표면에서 평평한 장착 플랫폼(z=0 위치의 50mm x 20mm 직사각형)으로 부드럽게 이어져야 합니다.
...
Step 5: 설계 보고서 생성 (Design report generation)
blade_report.html이라는 이름의 HTML 보고서를 생성해 주세요. 내용:
1. 제목: "Turbine Blade Design Iteration Report"
2. 기본형 대 수정형의 파라미터 비교 테이블 (블레이드 길이,
...
Step 6: 제조 데이터 내보내기 (Exporting manufacturing data)
export_manufacturing.py라는 이름의 스크립트를 생성해 주세요:
1. 두 STL 파일 모두 로드
2. 메쉬 품질(mesh quality) 검증 (퇴화된 삼각형(degenerate triangles) 및
...
이 모듈이 보여주는 것
"CAD 소프트웨어 실행 → 수동으로 파라미터 변경 → 재렌더링(re-render) → 비교 이미지 생성"으로 이어지는 전통적인 과정이 대화를 통해 단 몇 분 만에 완료됩니다. 특히 형상 탐색 및 파라미터 연구를 위한 설계 초기 단계에서 이 접근 방식은 상당한 시간 절약 효과를 제공합니다.
적용 사례: 더 복잡한 산업용 기계의 3D 모델링
우리는 워크숍 접근 방식을 더 복잡한 3D 모델링으로 확장했습니다. 여기에서 두 가지 사례를 소개합니다.
사례 1: 터보팬 제트 엔진 (Turbofan jet engine)
제트 엔진은 나셀 (nacelle), 팬 블레이드 (fan blades), 압축기 (compressor), 연소기 (combustor), 터빈 (turbine), 그리고 배기 노즐 (exhaust nozzle)을 포함한 많은 섹션으로 구성된 복잡한 형상입니다. 다음과 같은 프롬프트를 사용하여, 매개변수화된 섹션(parameterized sections)을 가진 3D 모델을 한 번에 생성했습니다.
나셀, 팬 블레이드, 압축기, 연소기, 터빈, 배기 노즐을 포함한 여러 섹션으로 구성된 터보팬 제트 엔진의 단순화된 3D 모델을 생성하는 generate_jet_engine.py라는 Python 스크립트를 작성해 주세요.
■ 전체 엔진 구성:
...
스크립트 상단의 매개변수(parameters)를 변경하는 것만으로, 팬 블레이드의 개수나 압축기 단(compressor stages)의 수가 다른 다양한 변형 모델을 즉시 생성할 수 있습니다.
[Image 7] 제트 엔진의 4면도
생성된 터보팬 제트 엔진의 3D 모델. 8개 섹션 구성, 4,120개 삼각형.
사례 2: 6축 다관절 로봇 팔 (Six-axis articulated robot arm)
산업용 로봇 팔의 독특한 특징은 관절 각도(joint angles)에 따라 포즈(pose)가 크게 변한다는 점입니다. 이 모델에서는 Kiro가 순기구학 (Forward Kinematics, FK)을 기반으로 포즈 계산을 구현하도록 했습니다.
산업용 6축 다관절 로봇 팔의 3D 모델을 생성해 주세요.
■ 포즈 매개변수 (스크립트 상단의 변수):
...
관절 각도의 조합을 변경하는 것만으로, 홈 포지션 (home position), 작업 포즈 (working pose), 접힌 포즈 (folded pose)와 같은 변형 모델을 자동으로 생성할 수 있습니다.
[Image 8] 세 가지 로봇 팔 포즈 비교
동일한 모델의 세 가지 포즈 비교. 관절 각도 매개변수만 변경하여 생성됨.
기술 노트: Python 기반 3D 형상 생성의 역할
왜 Python으로 초안을 작성하는가?
이 워크숍에서 사용된 방식은 numpy-stl 라이브러리를 사용하여 Python 코드로부터 STL (triangle mesh) 파일을 직접 생성합니다. 이 방식이 파라메트릭 디자인 (parametric design)에 잘 맞는 이유는 형상의 치수와 구성을 모두 코드 내의 변수로 관리할 수 있기 때문입니다.
FAN_BLADE_COUNT = 18 # → 변형 모델을 생성하려면 24로 변경
TURBINE_STAGES = 2 # → 3단 터빈을 위해 3으로 변경
STL과 STEP 중 선택하기
생성된 STL 파일은 거의 모든 CAD 소프트웨어와 3D 프린터 슬라이서 (Slicer)에서 읽을 수 있는 사실상의 표준 (de facto standard) 형식입니다. 하지만 STL은 삼각형 메쉬 (Triangle meshes)의 집합체이기 때문에, "구멍의 직경을 변경"하거나 "필렛 (Fillet)을 추가"하는 것과 같은 CAD 소프트웨어에서의 기능 기반 편집 (Feature-based editing)에는 적합하지 않습니다.
이러한 사용 사례의 경우, CadQuery와 같은 Python 라이브러리를 사용하여 STEP 형식으로 출력하는 것이 더 적합합니다.
| 사용 사례 | 권장 형식 | 라이브러리 |
|---|
| 형상 탐색 / 파라미터 연구 (Parameter studies) | STL | numpy-stl |
| ... | | |
설계 프로세스에서의 위치