
Dynamo는 Revit에 기본 내장된 노드 기반 비주얼 프로그래밍 도구다. 코드를 한 줄씩 타이핑하는 대신, 기능이 담긴 사각형 노드(node)를 캔버스에 올리고 선(wire)으로 연결해 데이터가 흐르는 경로를 만든다. 왼쪽에서 입력을 받은 노드가 결과를 내보내고, 그 결과가 다음 노드의 입력으로 이어지는 방식이라, 프로그래밍 언어를 몰라도 데이터가 어떻게 변형되는지 눈으로 따라갈 수 있다. 수백 개의 방에 규칙에 맞춰 이름을 한 번에 붙이거나, 외부 엑셀 값을 읽어 매개변수에 채워 넣는 반복 작업을 노드 몇 개로 처리할 수 있어, 설계자가 직접 자동화를 시작해 볼 수 있는 진입점이 된다. 이 글은 Dynamo의 세 가지 뼈대 개념인 노드·와이어·데이터 흐름과, 리스트·레이싱, 그리고 파이썬 노드까지 실제 예제와 함께 정리한다.
■ 노드, 와이어, 그리고 데이터 흐름
Dynamo 그래프의 최소 단위는 노드다. 각 노드는 왼쪽에 입력 포트, 오른쪽에 출력 포트를 가지며, 출력 포트에서 나온 와이어를 다음 노드의 입력 포트에 연결하면 데이터가 그 방향으로 흐른다. 노드는 실행되면 자기 몫의 계산을 마치고 결과를 아래에 미리보기로 보여준다. 그래프 전체는 왼쪽(입력)에서 오른쪽(결과)으로 읽으면 되고, 이 흐름이 곧 프로그램의 로직이다. 노드 종류는 크게 라이브러리에서 꺼내 쓰는 함수형 노드와, 숫자·문자열·불리언 같은 값을 직접 넣는 입력 노드로 나뉜다. 값을 코드로 짧게 적고 싶을 때는 Code Block 노드에 DesignScript 한 줄을 써서 여러 노드를 대체할 수도 있다.
■ 주요 노드 카테고리
라이브러리는 기능별로 묶여 있다. 자주 쓰는 카테고리를 표로 정리하면 다음과 같다.
| 카테고리 | 대표 노드 | 하는 일 |
|---|---|---|
| Input | Number, String, Boolean, File Path | 사용자가 직접 값을 입력 |
| List | List.Create, List.GetItemAtIndex, List.Filter | 여러 값의 묶음을 만들고 다루기 |
| Geometry | Point.ByCoordinates, Line.ByStartPointEndPoint | 점·선·면 등 형상 생성 |
| Revit > Selection | Categories, All Elements of Category, Select Model Element | 모델에서 요소 골라오기 |
| Revit > Elements | Element.GetParameterValueByName, Element.SetParameterValueByName | 요소의 파라미터 읽기·쓰기 |
| Core > Script | Python Script, Code Block | 코드로 로직 확장 |
Revit 계층은 크게 Category(벽·문·방 등) → Family → Type → Instance로 내려간다. 자동화의 출발점은 보통 <Categories> 노드로 대상 카테고리를 고르고, <All Elements of Category> 노드로 그 카테고리의 모든 요소를 한 리스트로 가져오는 것이다.

■ 리스트와 레이싱(lacing)
Dynamo에서 대량 작업의 열쇠는 리스트다. 요소 하나가 아니라 방 300개를 한 번에 다루려면, 그 300개가 하나의 리스트로 묶여 노드를 통과해야 한다. 문제는 길이가 다른 두 리스트를 한 노드에 넣을 때 생긴다. 예를 들어 이름 3개와 요소 5개를 짝지으면 어떻게 매칭할지 규칙이 필요한데, 이것을 정하는 것이 레이싱(lacing)이다. 노드 오른쪽 아래를 우클릭하면 세 가지 옵션을 고를 수 있다.
| 레이싱 | 동작 | 결과(리스트 [A,B,C] × [1,2,3,4,5]) |
|---|---|---|
| Shortest(최단) | 짧은 리스트 기준으로 1:1 짝, 남는 항목 무시 | A-1, B-2, C-3 (3쌍) |
| Longest(최장) | 긴 리스트 기준, 짧은 쪽 마지막 값 재사용 | A-1, B-2, C-3, C-4, C-5 (5쌍) |
| Cross Product(교차곱) | 모든 조합을 만들어 중첩 리스트 반환 | A-1..5, B-1..5, C-1..5 (15쌍) |
기본값은 Shortest다. 결과 개수가 예상과 다르면 십중팔구 레이싱 설정이 원인이므로, 그래프가 이상하게 동작할 때 가장 먼저 확인해야 한다.
■ 간단 예제: 요소 선택 → 파라미터 읽고 쓰기
모델의 모든 방을 골라 면적을 읽고, 그 값을 참고해 “비고” 파라미터를 채우는 흐름을 노드 순서로 적으면 다음과 같다. Dynamo 그래프는 그림이지만, 노드 이름과 연결을 글로 옮기면 이렇게 읽힌다.
[Categories: Rooms]
│ (category)
▼
[All Elements of Category] → rooms (리스트)
│
├─▶ [Element.GetParameterValueByName]
│ parameterName = "Area" → areas (리스트)
│
└─▶ [Element.SetParameterValueByName]
element = rooms
parameterName = "Comments"
value = "면적 " + areas + " m2"
같은 로직을 Code Block 노드 하나에 DesignScript로 압축해 쓸 수도 있다. 아래 한 줄은 위 그래프의 값 계산 부분과 동일하게 동작한다.
// Code Block 노드 (DesignScript)
areas = rooms.GetParameterValueByName("Area");
notes = "면적 " + areas + " m2"; // 리스트 전체에 자동 적용(자동 맵)
여기서 rooms가 리스트이므로 GetParameterValueByName은 각 방마다 알아서 반복 적용된다. 이것이 Dynamo가 “반복문 없이” 대량 작업을 처리하는 방식이다.
■ Python Script 노드 기초
기본 노드로 안 되는 세밀한 제어가 필요하면 Python Script 노드로 Revit API에 직접 접근한다. 노드를 더블클릭하면 편집기가 열리고, 입력 포트는 IN[0], IN[1] … 리스트로, 결과는 OUT 변수에 담아 반환한다. 아래는 입력 숫자 리스트에 100을 더해 돌려주는 최소 예시다.
# Python Script 노드 — IN[0]에 숫자 리스트 연결 import clr numbers = IN[0] # 입력 포트 0번의 값(리스트) result = [n + 100 for n in numbers] OUT = result # OUT에 담아야 노드 밖으로 나감
Revit 요소를 직접 만들거나 트랜잭션을 여는 본격적인 스크립트는 RevitServices와 Autodesk.Revit.DB 네임스페이스를 불러와야 하지만, 처음에는 위처럼 IN·OUT의 개념만 잡아도 충분하다. 노드로 만든 로직 중 반복되는 부분만 파이썬으로 옮겨 그래프를 단순화하는 식으로 점진적으로 넓혀 가면 된다.

■ 눈여겨볼 것
Dynamo의 값어치는 화려한 자동화보다, 사람이 반복하면 반드시 실수하는 단순 작업을 기계에 넘기는 데 있다. 방 이름 붙이기, 태그 정리, 데이터 입력 같은 일은 양이 많아질수록 오류가 쌓이는데, 규칙만 명확하면 노드로 옮겨 놓는 편이 안전하다. 다만 노드가 20~30개만 넘어가도 그래프 자체가 복잡해져 나중에 남이 이해하기 어려워진다. 잘 만든 Dynamo 그래프는 화려한 것이 아니라, 무엇을 하는지 한눈에 읽히도록 그룹으로 묶고 이름을 단 것이다. 파라미터에 값을 쓰는 노드는 실행 즉시 모델을 바꾸고 Ctrl+Z로 한 번에 되돌리기 어려우므로, 작은 샘플에서 먼저 검증하고 원본을 백업한 뒤 돌리는 습관이 중요하다.
■ 이런 분께 도움이 됩니다
- 반복 작업에 지친 Revit 사용자 — 코드를 몰라도 노드 연결로 자동화를 시작해 볼 수 있다
- BIM 매니저 — 팀의 반복 업무를 표준 그래프로 만들어 두면 품질과 속도를 함께 높일 수 있다
- BIM 자동화를 배우는 학생 — 비주얼 스크립트는 프로그래밍 논리를 익히는 부담 없는 출발점이 된다
■ 참고
노드 이름이 기억나지 않으면 캔버스 빈 곳을 더블클릭하거나 라이브러리 검색창에 기능 이름(예: “parameter”, “excel”)을 넣어 찾는다. 결과 개수가 이상하면 레이싱을, 값이 비어 나오면 파라미터 이름의 철자와 대소문자를 먼저 의심한다. 공식 학습 자료는 Dynamo Primer(primer.dynamobim.org)가 가장 체계적이며, 노드가 20~30개를 넘어가면 관련 노드를 그룹으로 묶고 이름을 달아 두는 것이 유지보수를 좌우한다.
공식 참고 자료 및 적용 범위
이 글은 Dynamo 비주얼 스크립트의 기본 개념을 설명합니다. 노드·패키지·실행 결과는 Revit·Dynamo 버전, 패키지 의존성, 모델 상태와 조직 표준에 따라 달라질 수 있습니다.
아래 자료는 확인일 기준의 제조사·표준기구 또는 공공기관 공식 문서입니다. 제품 기능·표준·정책은 개정될 수 있으므로 실제 프로젝트 적용 전에는 사용 중인 버전의 최신 원문과 프로젝트 기준을 확인하세요.
확인일: 2026-08-15




