BIM독학기

레빗(Revit)에서 다이나모 노드 완벽 가이드— 비주얼 코딩의 모든 것

kai_lee 2026. 3. 14. 14:30

레빗 + 다이나모 · 비주얼 코딩 완전 정복

레빗(Revit)에서 다이나모 노드 완벽 가이드
— 비주얼 코딩의 모든 것

다이나모의 핵심 구성 요소인 노드를 처음부터 차근차근 설명합니다. 입력 노드부터 파이썬 스크립트 노드까지, BIM 실무에서 바로 써먹는 비주얼 프로그래밍 완전 정복.

2026년 3월읽기 시간 약 15분다이나모 · Revit · BIM · 비주얼코딩 · 파라메트릭 디자인
목차
  1. 레빗에서 비주얼 코딩이란?
  2. 다이나모 노드의 구조
  3. 7가지 핵심 노드 타입 완전 해설
  4. 실전 노드 워크플로우 만들기
  5. 파이썬 스크립트 노드
  6. 커스텀 노드와 패키지
  7. 깔끔하고 빠른 그래프를 위한 실무 팁
  8. 자주 묻는 질문 (FAQ)
01 — 개요

레빗에서 비주얼 코딩이란?

오토데스크 다이나모(Autodesk Dynamo)는 레빗, Civil 3D 등에 직접 연동되는 비주얼 프로그래밍 환경입니다. 텍스트 에디터 대신 캔버스에 노드를 배치하고 와이어로 연결합니다. 데이터는 왼쪽에서 오른쪽으로 흐르며 각 단계마다 변환되어 레빗 모델에 반영됩니다.

프로그래밍 경험이 없어도 수천 개의 요소 이름을 순식간에 바꾸거나, 파라메트릭 곡선을 따라 패밀리를 배치하거나, 룸 데이터를 자동으로 엑셀로 내보내는 스크립트를 만들 수 있습니다.

알아두기: 다이나모는 오픈소스이며 Revit 2014 이상에 기본 탑재됩니다. 별도 라이선스 없이 사용할 수 있고, 레빗 없이 실습할 수 있는 Dynamo Sandbox도 무료로 제공됩니다.

모든 다이나모 프로그램의 기본 단위는 노드(Node)입니다. 노드의 구조, 데이터 흐름, 카테고리별 역할을 이해하는 것이 다이나모 개발에서 가장 중요한 기술입니다.


02 — 핵심 개념

다이나모 노드의 구조

모든 노드는 왼쪽 입력 포트, 내부 함수, 오른쪽 출력 포트로 구성됩니다. 출력과 입력을 와이어로 이어 붙여 그래프를 만듭니다. 핵심 규칙은 다음과 같습니다:

  • 연결되지 않은 입력 포트는 기본값(또는 null)을 사용합니다.
  • 업스트림 입력이 바뀌면 노드가 자동으로 재실행됩니다.
  • 하나의 출력 포트를 여러 노드에 동시에 연결할 수 있습니다.
  • 이중 꺾쇠(>>) 포트는 단일값뿐 아니라 리스트도 받습니다.

레이싱(Lacing)이란: 두 리스트의 길이가 다를 때 항목을 어떻게 짝지을지 결정하는 규칙입니다. Shortest / Longest / Cross Product 중 포트 우클릭으로 선택합니다. 레이싱 설정 오류가 초보자 그래프 오류의 가장 흔한 원인입니다.


03 — 노드 분류

7가지 핵심 노드 타입 완전 해설

다이나모 기본 라이브러리에는 500개 이상의 노드가 7개 카테고리로 정리되어 있습니다.

입력 노드

그래프에 원시값 주입. Number Slider, Integer, String, Boolean, File Path.

지오메트리 노드

3D 객체 생성 및 변환. 점·선·곡선·면·솔리드·메시.

리스트 노드

정렬·필터·평탄화·전치·결합·인덱싱 등 모든 리스트 조작.

수학 노드

사칙연산·삼각함수·반올림·범위 매핑·수식 평가.

문자열 노드

연결·분리·치환·정규식·서식 지정.

Revit 노드

레빗 요소·매개변수·패밀리·뷰·시트 조회 및 수정.

Python / 커스텀

CPython 3 스크립트 삽입 또는 커스텀 노드(.dyf)로 패키징.

입력 노드 — 모든 그래프의 시작점

실무 스크립트에서 가장 강력한 입력 노드는 Min / Max / Step을 지정한 Number.Slider입니다. 사용자가 그래프 에디터를 열지 않고도 안전한 범위에서 값을 조절할 수 있습니다. 특정 레빗 객체에 작동해야 할 때는 Select Model Element나 Select Elements by Category를 활용합니다.

지오메트리 노드 — 공간 처리의 핵심

실제 BIM 작업에서 자주 쓰이는 노드:

  • Point.ByCoordinates — X, Y, Z 값으로 3D 점 생성
  • Line.ByStartPointEndPoint — 두 점 사이 선분 생성
  • NurbsCurve.ByPoints — 점 목록을 통과하는 부드러운 곡선
  • Surface.ByLoft — 여러 곡선을 로프트해 면 생성
  • Solid.ByUnion / ByIntersection — 불리언 솔리드 연산
  • Geometry.Translate / Rotate / Scale — 지오메트리 변환

리스트 노드 — 숨겨진 핵심 무기

꼭 익혀야 할 핵심 노드:

  • List.Flatten — 중첩 리스트를 단일 레벨로 평탄화
  • List.FilterByBoolMask — true/false 리스트로 분리
  • List.Transpose — 2D 리스트 행·열 교환
  • List.GroupByKey — 공통 속성 기준 그룹화
  • List.Chop — 단일 리스트를 고정 길이 서브리스트로 분할

Revit 노드 — BIM 데이터의 다리

조회 노드(Element.GetParameterValueByName)와 액션 노드(Element.SetParameterByName)를 명확히 구분하는 것이 중요합니다. 쓰기 노드를 Freeze된 브랜치 안에 두면 실행되지 않고 조용히 실패합니다.


04 — 실전 예제

실전 노드 워크플로우 만들기

파라메트릭 그리드 위에 레빗 패밀리 인스턴스를 배치하는 패턴은 파사드, 구조 그리드, 조명 배치에서 가장 자주 사용됩니다.

워크플로우 — 파라메트릭 그리드 → 레빗 패밀리 배치
Number.Slider
Point.ByCoordinates
List.Flatten
FamilyInstance.ByPoint
Element.SetParameterByName
파란 노드 = 입력 제어  /  회색 노드 = 처리·Revit 액션

1단계: 슬라이더 두 개로 행·열 수를 제어합니다. 값 변경 즉시 하위 그래프 전체가 실시간 업데이트됩니다.

2단계: Point.ByCoordinates에 Cross Product 레이싱을 적용하면 모든 X/Y 조합이 자동으로 생성되어 2D 점 그리드가 만들어집니다.

3단계: Cross Product 결과는 중첩 리스트입니다. 배치 노드 전달 전에 List.Flatten으로 단일 레벨로 평탄화합니다.

4단계: FamilyInstance.ByPoint가 모든 점에 패밀리 인스턴스를 배치합니다. 수백 번의 수동 작업이 이 노드 하나로 대체됩니다.

5단계: Element.SetParameterByName으로 새 인스턴스에 마크 번호나 유형 코멘트를 즉시 자동 부여합니다.


05 — 고급 활용

파이썬 스크립트 노드

기본 노드로 해결이 안 되는 경우, Python Script 노드를 추가하면 됩니다. Dynamo 2.13 이상에서 기본 엔진은 CPython 3으로 표준 라이브러리 전체와 pip 패키지를 사용할 수 있습니다. 입력값은 IN[0], IN[1]으로, 결과는 OUT으로 반환합니다.

Python Script 노드 — 요소 마크 일괄 이름 변경
# IN[0] — 레빗 요소 리스트
# IN[1] — 접두어 문자열 (예: "FAC-")
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import Transaction, BuiltInParameter

elements = IN[0]
prefix   = IN[1]
doc      = elements[0].Document
results  = []

with Transaction(doc, "일괄 이름 변경") as t:
    t.Start()
    for i, el in enumerate(elements):
        new_mark = f"{prefix}{i+1:03d}"
        el.get_Parameter(
            BuiltInParameter.ELEM_MARK_PARAM
        ).Set(new_mark)
        results.append(new_mark)
    t.Commit()

OUT = results

반드시 Transaction을 사용하세요. 기본 Revit 노드는 내부적으로 트랜잭션을 관리하지만 Python Script 노드는 직접 관리해야 합니다. Transaction 없이 .Set()을 호출하면 즉시 예외가 발생합니다.


06 — 생태계

커스텀 노드와 커뮤니티 패키지

유용한 서브그래프를 완성했다면 우클릭 → Create Custom Node로 .dyf 파일로 저장합니다. 라이브러리에 직접 나타나며 팀 전체와 공유하거나 Package Manager에 게시할 수 있습니다.

Clockwork
800개+ 추가 노드. Revit 요소 조회와 매개변수 처리에 특히 강력합니다.
springs nodes
리스트 관리·UI 컨트롤·문자열 서식·모델 데이터 내보내기 유틸리티.
Data-Shapes
파이썬 없이 드롭다운·체크박스·다중 선택 UI 폼을 다이나모 안에서 구성.
MEPover
덕트 라우팅·케이블 트레이 사이징·커넥터 관리 등 MEP 전용 노드.
Rhythm
레빗·라이노 상호운용·리스트/수학 유틸리티를 포함한 범용 패키지.
BimorphNodes
대규모 요소 선택·매개변수 일괄 작업·일람표 조작용 고성능 노드.

07 — 실무 팁

깔끔하고 빠른 그래프를 위한 실무 팁

01
그룹화와 색상 코딩을 습관화하세요

Ctrl+G로 관련 노드를 그룹화하고, 입력=노란색·Revit 액션=초록색·지오메트리=파란색·출력=빨간색으로 일관되게 색상을 부여하면 누구나 한눈에 구조를 파악합니다.

02
Python 루프보다 리스트 처리를 선호하세요

다이나모는 레플리케이션으로 리스트를 네이티브하게 처리합니다. Element.SetParameterByName 하나가 10,000개 요소를 처리합니다. 명령형 흐름이 꼭 필요할 때만 Python을 사용하세요.

03
느린 브랜치는 Freeze 처리하세요

노드 우클릭 → Freeze하면 변경마다 재실행되지 않습니다. 한 번만 실행하면 되는 무거운 레빗 조회를 Freeze해 두면 그래프 속도가 크게 향상됩니다.

04
수식은 Code Block 노드를 활용하세요

수학 노드 여러 개를 체이닝하는 대신 Code Block 하나로: width / 2 + offset * Math.Sin(angle);. DesignScript 문법을 지원하며 훨씬 가독성이 좋습니다.

05
복사본 모델에서 먼저 테스트하세요

다이나모 쓰기 작업은 저장 후 되돌릴 수 없습니다. 파괴적인 스크립트는 반드시 분리된(Detached) 복사본에서 결과를 확인한 후 실제 모델에 적용하세요.


08 — FAQ

자주 묻는 질문

다이나모는 어떤 버전의 파이썬을 사용하나요?
Dynamo 2.13 이상은 기본으로 CPython 3.9+를 사용합니다. 이전 버전은 IronPython 2.7입니다. Python Script 노드 설정에서 엔진을 전환할 수 있으며, CPython에서는 pip 패키지도 사용 가능합니다.
레빗 라이선스 없이 다이나모를 쓸 수 있나요?
네. Dynamo Sandbox는 레빗 없이 단독 실행되며 지오메트리·수학·리스트·문자열 노드를 모두 사용할 수 있습니다. Revit 전용 노드는 레빗 연결 시에만 활성화됩니다.
레이싱(Lacing)이 왜 중요한가요?
길이가 다른 두 리스트가 노드에 들어올 때 항목을 짝짓는 규칙입니다. Shortest는 짧은 쪽에서 멈추고, Longest는 마지막 항목을 반복하며, Cross Product는 모든 조합을 만들어냅니다. 잘못된 레이싱이 초보자 그래프 오류의 가장 흔한 원인입니다.
다이나모 스크립트를 팀원과 공유하려면?
.dyn 파일을 공유합니다. 커스텀 노드를 사용했다면 .dyf 파일도 함께 전달하거나 Package Manager 동일 패키지 설치를 안내하세요. 다이나모 버전과 패키지 버전도 문서화해 두는 것이 중요합니다.
다이나모는 유료인가요?
아니요. 완전한 오픈소스(GitHub: DynamoDS/Dynamo)이며 Revit에 기본 탑재됩니다. Dynamo Sandbox도 무료입니다. 별도 구독이나 라이선스는 필요 없습니다.
노드와 Code Block 노드의 차이는?
일반 노드는 고정 입출력 포트를 가진 미리 만들어진 함수입니다. Code Block은 DesignScript 문법으로 여러 줄 로직을 자유롭게 작성하고 변수를 정의할 수 있는 에디터입니다. 수학 연산과 문자열 서식에 특히 유용합니다.
#다이나모#Dynamo노드#Revit#BIM#비주얼코딩#파라메트릭디자인#AutodeskDynamo#DynamoBIM#레빗자동화#건축BIM#코딩없는프로그래밍

지금 바로 다이나모를 시작해 보세요

Dynamo Sandbox를 무료로 다운로드하고 레빗 없이도 노드 실습을 시작할 수 있습니다.

Dynamo Sandbox 다운로드 ↗패키지 둘러보기 ↗초보자 예제 보기 ↗