
AI 코드 에이전트를 사용하여 CFD를 독학한 방법
요약
작성자는 Claude Code와 같은 AI 에이전트를 활용하여 복잡한 전산유체역학(CFD)을 독학한 과정을 공유합니다. Python을 기반으로 기초부터 고급 물리 정보 신경망까지 단계별 커리큘럼을 구축하여 학습했습니다.
핵심 포인트
- Claude Code를 개인 멘토로 활용한 학습 방법론
- Python 기반의 구조화된 CFD 학습 커리큘럼 설계
- 수학적 방정식의 물리적 의미를 코드로 이해하는 접근법
- 유한차분법부터 난류 모델링까지 아우르는 단계별 모듈 구성
항공우주공학(Aerospace Engineering) 학사 과정 동안, 교수님들은 저에게 **전산유체역학 (CFD) 및 공기역학 (Aerodynamics)**과 같은 과목들을 소개해 주셨습니다. 저는 사람들이 우리 주변에서 일어나는 실제 현상들을 이해하기 위해 수학을 사용하는 방식에 진심으로 매료되었습니다. 저는 스스로 CFD를 공부하려고 노력했지만, 방정식 뒤에 숨겨진 물리적 의미를 이해할 방법을 찾을 수 없었습니다. 그래서 유체 및 열 시스템을 공부하면 지배 방정식 (governing equations)을 제대로 이해하는 데 도움이 될 것이라 믿고 열공학 (Thermal Engineering) 석사 과정에 진학했습니다.
석사 과정은 저에게 연속 방정식 (continuity equation), 운동량 방정식 (momentum equation), 그리고 에너지 방정식 (energy equation)의 중요성을 이해하도록 도와주었고, **Navier-Stokes 방정식 (Navier-Stokes equations)**을 소개해주었습니다. 처음에는 다룰 만해 보여서, 그 이후로는 CFD가 수월할 것이라고 생각했습니다. 하지만 저는 결국 다시 같은 문제에 직면했습니다. 방정식과 그 유도 과정 뒤에 숨겨진 물리적 의미를 이해하지 못하는 것이었습니다. 이는 노력이 부족해서가 아니었습니다. 진짜 문제는 제가 실제로 방정식을 보고 있는 그 순간, 제 의문점에 답해줄 수 있는 멘토나 리소스가 없었다는 점이었습니다.
그때 저는 Claude Code와 같은 AI 도구를 사용하여 저를 가르치게 하겠다는 아이디어를 얻었습니다. 저는 이미 Python에 매우 익숙했기 때문에, AI 에이전트를 사용하여 코드를 통해 기초부터 단계별로 CFD를 가르치기로 결정했습니다.
커리큘럼 구축하기
저는 학습 구조를 잡기 위해 참고 자료를 검색했고, _Lorena A. Barba의 저서 — CFD Python: 12 Steps to Navier-Stokes Equations_를 찾아냈습니다. 그것을 토대로, 저는 Claude Code와 함께 유한차분법 (Finite Difference Method)의 기초부터 난류 모델링 (turbulence modelling) 및 물리 정보 신경망 (Physics-Informed Neural Networks)과 같은 고급 개념에 이르기까지 24개의 레슨으로 구성된 구조화된 커리큘럼을 구축했습니다.
모듈 1 — 기초
- CFD란 무엇인가? — 물리적 직관, CFD의 활용 분야, 필요성
- CFD를 위한 Python — NumPy 배열, matplotlib, 벡터화 연산 (vectorized operations)
- 보존 법칙 (Conservation Laws) — 질량, 운동량, 에너지; 물리적 의미
- 연속 방정식 (The Continuity Equation) — 유도, 물리적 의미, 1D 예시
- 유한차분법 (Finite Difference Method) — 전방, 후방, 중앙 차분; 절단 오차 (truncation error); 정확도 차수 (order of accuracy)
- 1D 선형 이류 (1D Linear Advection) — CFL 조건; 업윈딩 (upwinding); 수치 확산 (numerical diffusion)
- 1D 확산 방정식 (1D Diffusion Equation) — 명시적 (Explicit) vs 암시적 (implicit) 스킴; 안정성 분석 (stability analysis)
- 1D Burgers' 방정식 (1D Burgers' Equation) — 비선형성; 충격파 형성; 보존 형식 (conservative form)
모듈 2 — 핵심 CFD 방법론 (Core CFD Methods)
- 2D 스칼라 수송 (2D Scalar Transport) — 2D로의 확장; 구조 격자 (structured grids); 경계 조건 (boundary conditions)
- 유한체적법 (Finite Volume Method) — 제어 체적 (control volumes), 플럭스 계산 (flux computation), 업윈드 스킴 (upwind scheme)
- 나비에-스토크스 방정식 (The Navier-Stokes Equations) — 유도, 물리적 의미, 무차원화 (non-dimensionalization)
- 압력-속도 결합 (Pressure-Velocity Coupling) — 비압축성 제약 조건 (incompressibility constraint)
- SIMPLE 알고리즘 — 압력 보정; 단계별 구현
- 덮개 구동 공동 유동 (Lid-Driven Cavity Flow) — CFD의 "Hello World"; 처음부터 직접 구현
- 물체 주위의 유동 (Flow Over Objects) — 실린더 유동; 항력 (drag) 및 양력 (lift); 폰 카르만 와열 (von Kármán vortex street)
- 경계 조건 (Boundary Conditions) — 디리클레 (Dirichlet), 노이만 (Neumann), 주기적 (periodic), 유출 (outflow); 고스트 셀 (ghost cells)
모듈 3 — 심화 주제 (Advanced Topics)
- 난류 기초 (Turbulence Basics) — 레이놀즈 분해 (Reynolds decomposition), RANS, 폐쇄 문제 (closure problem)
- 난류 모델 (Turbulence Models) — Spalart-Allmaras, k-ε, k-ω SST
- 격자 생성 (Mesh Generation) — 구조 격자 (structured) vs 비구조 격자 (unstructured); 품질 지표; y+ 추정
- 고차 스킴 (Higher-Order Schemes) — QUICK, TVD, MUSCL; 리미터 (limiters)
- 다중 격자법 (Multigrid Methods) — V-사이클 (V-cycle), W-사이클 (W-cycle); 수렴 가속
- 비정상 유동 (Unsteady Flows) — 시간 단계 설정 (time-stepping); 이중 시간 단계 (dual time-stepping); Courant 수
- 압축성 유동 (Compressible Flow) — 오일러 방정식 (Euler equations); 리만 문제 (Riemann problem); 충격파 포착 (shock capturing)
- 물리 정보 신경망 (Physics-Informed Neural Networks) — 머신러닝과 CFD의 만남
에이전트의 교수 방식
저는 Claude Code에게 소크라테스식 문답법 (Socratic method)과 파인만 기법 (Feynman technique)이라는 두 가지 구체적인 방법을 사용하여 CFD 튜터 역할을 수행하도록 지시했습니다.

**소크라테스식 문답법 (The Socratic method)**은 에이전트가 무언가를 설명하기 전에 항상 저에게 질문을 던지는 것을 의미합니다. 예를 들어, 업윈딩 (upwinding)을 가르치기 전에 에이전트는 다음과 같이 물었습니다: "만약 정보가 오른쪽으로 이동하고 있다면, 플럭스 (flux)를 추정하기 위해 어떤 인접 셀 (neighbouring cell)을 살펴봐야 할까요?" 저는 어떤 방정식이 제시되기 전에 물리적 직관 (physical intuition)을 바탕으로 답변해야 했습니다. 이는 제가 단순히 읽기만 하는 것이 아니라 스스로 생각하도록 강제했습니다.
**파인만 기법 (The Feynman technique)**은 매 수업이 끝날 때마다 제가 마치 다른 사람을 가르치는 것처럼 해당 개념을 쉬운 말로 다시 설명해야 함을 의미합니다. 만약 제가 틀리거나 무언가를 놓치면, 에이전트는 저를 교정해주고 그 격차를 추적합니다. 개념이 명확해질 때까지 에이전트는 절대 다음 단계로 넘어가지 않습니다.
에이전트는 차분하고 인내심이 있습니다. 방정식 이전에 비유를 제공하고, 코드 이전에 방정식을 제공하며, 다음 단계로 넘어가기 전에 연습 문제를 제공합니다. 제가 저지르는 모든 실수는 기록되고 다시 검토됩니다.
실제로 효과가 있는 것 — 그리고 효과가 없는 것
효과적인 것: 질문 우선 방식 (question-first approach)은 학습 내용에 참여하는 방식을 진정으로 변화시킵니다. 설명을 듣기 전에 답변을 해야 하기 때문에, 수동적으로 읽으면서 이해했다고 착각할 수 없습니다. 알거나 모르거나 둘 중 하나이며, 그 격차는 즉시 눈에 보이게 됩니다.
방정식 순서를 정하기 전에 물리적 유추 (physical analogy)를 먼저 진행한 것도 실질적인 차이를 만들었습니다. FTBS (Forward-Time Backward-Space) 공식을 보기 전에 왜 업윈딩 (upwinding)이 상류 (upstream)를 바라보는지 이해함으로써, 공식이 나타났을 때 단순히 암기해야 할 대상이 아니라 논리적으로 납득할 수 있는 내용이 되었습니다.
솔직한 한계점: 에이전트는 세션 간의 메모리 (memory)가 없습니다. 모든 새로운 세션은 백지 상태에서 시작되므로, 본인의 진행 상황을 기록한 파일을 직접 유지 관리하고 매 세션 시작 시 에이전트에게 다시 전달해야 합니다. 이는 생각보다 번거로운 작업입니다. 만약 이 과정을 건너뛴다면, 에이전트는 당신이 이미 무엇을 학습했는지 알지 못합니다.
또한 에이전트는 당신이 실제로 코드를 실행했는지, 아니면 실행했다고 말만 하는 것인지 확인할 수 없습니다. 책임은 전적으로 당신에게 있습니다.
리포지토리 (Repos) 구조화 방법
이 시스템이 작동하게 만드는 두 가지 요소를 유지합니다:
리포지토리 루트에 있는 CLAUDE.md 파일은 에이전트에게 정확히 어떻게 가르칠지 지시합니다 — 소크라테스식 질문법 (Socratic method) + 파인만 기법 (Feynman technique) 순서, 물리적 유추 우선 접근 방식, 그리고 학생의 배경 지식 수준 등을 포함합니다. 이 파일은 매 세션 시작 시 읽힙니다.
LEARNING_PROGRESS.md 파일은 학습한 모든 레슨, 퀴즈 점수, 발견된 버그, 교정된 오개념, 그리고 다음 학습 내용을 추적합니다. 이것은 세션 간의 인수인계 문서입니다. 이 파일이 없으면 에이전트는 매번 처음부터 다시 시작합니다.
두 파일 모두 저의 GitHub 리포지토리에서 공개되어 있습니다: harishragul/cfd
3개월 동안 구축한 것
이 글을 쓰는 시점에 저는 모듈 1과 2를 완전히 완료했으며 모듈 3의 중간 단계에 있습니다. 그동안 저는 다음을 처음부터 구축했습니다:
- 1D 이류 (Advection), 확산 (Diffusion), 그리고 Burgers' equation을 위한 유한차분법 (Finite Difference) 솔버
- 투영법 (Projection method)과 SIMPLE 알고리즘을 사용한 2D Navier-Stokes 솔버
- 표준 CFD 벤치마크인 Ghia et al. (1982)를 통해 검증된 lid-driven cavity 솔버
- k-ω SST 모델을 처음부터 구현한 난류 채널 유동 (Turbulent channel flow) 시뮬레이션
- OpenFOAM의 snappyHexMesh를 사용하여 구형 기하 구조 (Sphere geometry)에 적용한 격자 생성 (Mesh generation) 연습
또한 저는 이 커리큘럼을 설명하는 논문을 Journal of Open Source Education (JOSE)에 제출하였으며, 현재 심사 중입니다.
대상 독자
이 방식은 읽기보다는 직접 구축하며 배우는 스타일이고, Python에 익숙하며, 학습 세션 사이의 자기 관리가 가능한 분들에게 효과적입니다. 만약 누군가가 실제로 코드를 실행했는지 확인해 주기를 원하거나, 지식의 공백 없이 빠르게 진도를 나가고 싶다면 이 방식은 맞지 않을 것입니다.
저장소와 커리큘럼은 harishragul/cfd에서 공개적으로 확인할 수 있습니다. 만약 CFD를 처음부터 배우려고 시도 중이며, 저와 마찬가지로 물리적 의미를 알 수 없는 방정식들 사이에서 막혀 있다면, 이것이 여러분이 찾고 있는 구조가 될 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기
