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

노드와 와이어로 데이터 흐름을 구성한 Dynamo 비주얼 스크립트 화면
노드와 와이어로 데이터 흐름을 구성한 Dynamo 비주얼 스크립트 화면 — AI로 만든 예시 이미지

Dynamo는 Revit에 기본 내장된 노드 기반 비주얼 프로그래밍 도구다. 코드를 한 줄씩 타이핑하는 대신, 기능이 담긴 사각형 노드(node)를 캔버스에 올리고 선(wire)으로 연결해 데이터가 흐르는 경로를 만든다. 왼쪽에서 입력을 받은 노드가 결과를 내보내고, 그 결과가 다음 노드의 입력으로 이어지는 방식이라, 프로그래밍 언어를 몰라도 데이터가 어떻게 변형되는지 눈으로 따라갈 수 있다. 수백 개의 방에 규칙에 맞춰 이름을 한 번에 붙이거나, 외부 엑셀 값을 읽어 매개변수에 채워 넣는 반복 작업을 노드 몇 개로 처리할 수 있어, 설계자가 직접 자동화를 시작해 볼 수 있는 진입점이 된다.

■ 노드, 와이어, 그리고 데이터 흐름

Dynamo 그래프의 최소 단위는 노드다. 각 노드는 왼쪽에 입력 포트, 오른쪽에 출력 포트를 가지며, 출력 포트에서 나온 와이어를 다음 노드의 입력 포트에 연결하면 데이터가 그 방향으로 흐른다. 노드는 실행되면 자기 몫의 계산을 마치고 결과를 아래에 미리보기로 보여준다. 그래프 전체는 왼쪽(입력)에서 오른쪽(결과)으로 읽으면 되고, 이 흐름이 곧 프로그램의 로직이다. 노드 종류는 크게 라이브러리에서 꺼내 쓰는 함수형 노드와, 숫자·문자열·불리언 같은 값을 직접 넣는 입력 노드로 나뉜다. 값을 코드로 짧게 적고 싶을 때는 Code Block 노드에 DesignScript 한 줄을 써서 여러 노드를 대체할 수도 있다.

Dynamo는 데이터가 노드를 통과합니다
Dynamo는 데이터가 노드를 통과합니다

■ 주요 노드 카테고리

라이브러리는 기능별로 묶여 있다. 자주 쓰는 카테고리를 표로 정리하면 다음과 같다.

카테고리 대표 노드 하는 일
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> 노드로 그 카테고리의 모든 요소를 한 리스트로 가져오는 것이다.

Dynamo로 생성한 파라메트릭 3D 건물 모델 형상
Dynamo로 생성한 파라메트릭 3D 건물 모델 형상 — AI로 만든 예시 이미지

■ 리스트와 레이싱(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의 개념만 잡아도 충분하다. 노드로 만든 로직 중 반복되는 부분만 파이썬으로 옮겨 그래프를 단순화하는 식으로 점진적으로 넓혀 가면 된다.

멀티 모니터 워크스테이션에서 3D 모델을 다루는 설계자
멀티 모니터 워크스테이션에서 3D 모델을 다루는 설계자 — AI로 만든 예시 이미지

■ 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 같은 커뮤니티 패키지는 편리하지만, 팀에서 공유하는 그래프는 사용하는 패키지와 버전을 함께 기록해 두는 것이 안전합니다.

같은 주제의 글