업데이트 2026년 10월 15일읽는 시간 약 8분

Dynamo는 Revit에 기본 내장된 노드 기반 비주얼 프로그래밍 도구다. 코드를 한 줄씩 타이핑하는 대신, 기능이 담긴 사각형 노드(node)를 캔버스에 올리고 선(wire)으로 연결해 데이터가 흐르는 경로를 만든다. 왼쪽에서 입력을 받은 노드가 결과를 내보내고, 그 결과가 다음 노드의 입력으로 이어지는 방식이라, 프로그래밍 언어를 몰라도 데이터가 어떻게 변형되는지 눈으로 따라갈 수 있다. 수백 개의 방에 규칙에 맞춰 이름을 한 번에 붙이거나, 외부 엑셀 값을 읽어 매개변수에 채워 넣는 반복 작업을 노드 몇 개로 처리할 수 있어, 설계자가 직접 자동화를 시작해 볼 수 있는 진입점이 된다.
■ 노드, 와이어, 그리고 데이터 흐름
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 Player로 배포하기
그래프를 다 만들어도 팀원 모두가 Dynamo를 열어 노드를 이해할 필요는 없다. Dynamo Player는 완성된 그래프를 Revit 리본에서 목록으로 보여 주고, 재생 버튼 하나로 실행하게 해 주는 배포 도구다. 그래프의 입력 노드를 “Is Input”으로 지정해 두면, Player 화면에 파일 경로·숫자·옵션 같은 입력란만 노출되어, Dynamo를 모르는 사람도 값만 바꿔 돌릴 수 있다. 배포 절차는 다음과 같다.
| 단계 | 내용 |
|---|---|
| 1 | Dynamo에서 사용자 입력이 필요한 노드를 우클릭 → “Is Input” 체크 |
| 2 | 그래프에 설명 이름을 붙여 공용 폴더에 저장(.dyn) |
| 3 | Revit 리본의 Dynamo Player에서 그 폴더를 지정 |
| 4 | 목록에서 그래프 선택 → 입력값 조정 → 재생 버튼으로 실행 |
이렇게 하면 한 사람이 만든 자동화를 팀 전체가 안전하게 재사용할 수 있다. 사내 표준 그래프를 공용 폴더에 모아 두는 것이 배포의 핵심이다.
■ 노드 라이브러리를 넓히는 패키지
기본 노드로 부족하면 Package Manager에서 커뮤니티 패키지를 설치해 기능을 확장한다. 실무에서 널리 쓰이는 것들을 정리하면 다음과 같다.
| 패키지 | 강점 |
|---|---|
| Clockwork | 요소·뷰·파라미터를 다루는 범용 유틸 노드가 방대해 거의 필수 |
| Rhythm | 시트·뷰·문서화 작업을 간결하게 처리하는 실무형 노드 |
| archi-lab.net | 데이터 관리·엑셀·워크셋 등 코디네이션 작업에 강함 |
| Data-Shapes | 실행 중 사용자 입력 대화상자(UI)를 띄워 대화형 그래프 제작 |
| spring nodes | 지오메트리 변환·형상 처리 보강 |
| Bumblebee | 엑셀 양방향 연동을 안정적으로 처리 |
패키지는 편리하지만, 버전 업데이트로 노드가 사라지면 그래프가 깨질 수 있다. 팀에서 공유하는 그래프는 사용하는 패키지와 버전을 함께 기록해 두는 것이 안전하다.
■ 남이 읽을 수 있는 그래프
Dynamo가 가장 쓸모 있는 곳은 방 이름 붙이기, 태그 정리, 데이터 입력처럼 사람이 반복하면 실수가 쌓이는 단순 작업이다. 다만 노드가 20~30개를 넘으면 그래프 자체가 복잡해져 만든 사람 외에는 읽기 어렵다. 관련 노드를 그룹으로 묶고 그룹마다 무엇을 하는지 이름을 달아 두면 유지보수가 쉬워진다.
- 파라미터에 값을 쓰는 노드는 실행 즉시 모델을 바꾸고 한 번에 되돌리기 어렵다. 작은 샘플에서 검증하고 원본을 백업한 뒤 돌린다.
- 노드 이름이 기억나지 않으면 캔버스 빈 곳을 더블클릭하거나 라이브러리 검색창에 기능 이름(“parameter”, “excel”)을 넣는다.
- 결과 개수가 이상하면 레이싱을, 값이 비어 나오면 파라미터 이름의 철자와 대소문자를 먼저 의심한다.
체계적인 학습 자료로는 Dynamo Primer(primer.dynamobim.org)가 있다.
참고 문헌
자주 묻는 질문
Dynamo는 프로그래밍을 몰라도 쓸 수 있나요?
쓸 수 있습니다. Dynamo는 Revit에 기본 내장된 노드 기반 비주얼 프로그래밍 도구로, 노드를 캔버스에 올리고 선으로 연결해 데이터 흐름을 만들기 때문에 프로그래밍 언어를 몰라도 데이터가 어떻게 변형되는지 눈으로 따라갈 수 있습니다.
Dynamo의 레이싱(lacing)은 무엇인가요?
길이가 다른 두 리스트를 한 노드에 넣을 때 어떻게 짝지을지 정하는 규칙입니다. Shortest, Longest, Cross Product 세 가지가 있고 기본값은 Shortest이며, 결과 개수가 예상과 다르면 레이싱 설정을 가장 먼저 확인해야 합니다.
Dynamo를 모르는 팀원도 그래프를 실행할 수 있나요?
Dynamo Player를 쓰면 가능합니다. 완성된 그래프를 Revit 리본에서 목록으로 보여 주고 재생 버튼으로 실행하게 해 주는 배포 도구이며, 입력 노드를 Is Input으로 지정해 두면 입력란만 노출되어 값만 바꿔 돌릴 수 있습니다.
Dynamo 패키지를 쓸 때 주의할 점은 무엇인가요?
버전 업데이트로 노드가 사라지면 그래프가 깨질 수 있다는 점입니다. Clockwork, Rhythm 같은 커뮤니티 패키지는 편리하지만, 팀에서 공유하는 그래프는 사용하는 패키지와 버전을 함께 기록해 두는 것이 안전합니다.







