
서론: "리습을 버려야 할까요?"
오토캐드 자동화에 관심을 갖게 된 설계자들이 가장 먼저 마주하는 질문이 있다.
"전통의 강자 AutoLISP을 배워야 하나, 아니면 강력한 최신 기술인 C# .NET을 배워야 하나?"
결론부터 말하자면, 이것은 짜장면과 짬뽕 중 하나를 고르는 문제가 아니다.
망치와 전동 드릴의 관계다.
못 하나 박는데 전동 드릴을 꺼내는 건 비효율적이고, 집을 짓는데 망치만 들고 덤비는 건 무모하다.
오늘은 오토캐드 개발의 양대 산맥인 AutoLISP과 .NET(C#)의 역사를 짚어보고,
왜 진정한 전문가가 되려면 "결국 둘 다 해야 하는지"에 대해 이야기해 본다.
1. AutoLISP: 30년을 버텨온 불멸의 "게릴라"
역사와 특징
AutoLISP은 1986년(AutoCAD R2.18)에 처음 도입되었다.
무려 40년 가까이 된 언어다.
파이썬이나 자바가 태어나기도 전부터 캐드와 함께했다.
오래되었다고 무시하면 안 된다.
그만큼 캐드 친화적이고, 생존력이 강하다.
개발에서의 역할 (Light & Fast)
- 기동성: 메모장 하나만 있으면 코드를 짜고 바로 실행할 수 있다. 컴파일(빌드) 과정도 필요 없다.
- 접근성: (command "line" ...) 처럼 직관적이다. 비전공 설계자도 며칠이면 배운다.
- 용도: 단순 반복 작업, 단축키 만들기, 리어 변경 등 "가려운 곳을 빠르게 긁어주는 효자손" 역할이다.
한계: UI를 예쁘게 만들기 어렵고, 운영체제(Windows) 깊숙한 곳을 건드리거나 엑셀, DB와 연동하기에는 너무나 벅차다.
2. C# .NET: 강력한 화력을 지닌 "정규군"
역사와 특징
2000년대 중반, 오토캐드는 마이크로소프트의 .NET Framework를 받아들이며 'Managed API'를 열었다.
기존에 C++(ObjectARX)만 가능했던 심층적인 개발을 C#이라는 현대적인 언어로 가능하게 만든 혁명이었다.
개발에서의 역할 (Heavy & Powerful)
- 확장성: 윈도우 프로그램, 엑셀, 데이터베이스, 웹 크롤링 등 컴퓨터가 할 수 있는 모든 것을 할 수 있다.
- 퍼포먼스: 수만 개의 객체를 처리할 때 Lisp보다 압도적으로 빠르다.
- UI/UX: 우리가 흔히 쓰는 일반 프로그램처럼 세련된 창(Window)을 만들 수 있다.
- 용도: 사내 도면 관리 시스템, 자동 설계 프로그램, 복잡한 계산이 필요한 구조 해석 등 "시스템(System)을 구축하는" 역할이다.
한계: Visual Studio를 켜야 하고, 빌드하고, 로드하는 과정이 번거롭다. 선 하나 긋는데도 10줄 이상의 코드가 필요하다. (진입 장벽이 높다.)
3. 왜 결국 둘 다 해야 하는가? (Hybrid Strategy)
진정한 오토캐드 개발 고수는 상황에 따라 무기를 바꿔 든다.
[상황 A] 단순 업무: "레이어 색상 좀 빨간색으로 바꿔줘."
- C#으로 할 경우: 프로젝트 켜고, 참조 추가하고, 트랜잭션 열고, 레이어 테이블 열고... (배보다 배꼽이 더 크다.)
- Lisp으로 할 경우: (command "layer" "c" "1" ...) 끝. 10초 컷.
- 승자: AutoLISP
[상황 B] 복잡한 업무: "도면 100장의 부품 리스트를 뽑아서, 엑셀에 정리하고, ERP 서버에 전송해줘."
- Lisp으로 할 경우: 엑셀 연동부터 막힌다. 코드가 수천 줄이 되고, 속도가 느려 캐드가 멈춘다.
- C#으로 할 경우: 엑셀 라이브러리와 DB 연결 기능을 써서 안정적으로 처리한다. 멋진 진행바(Progress Bar)도 띄워준다.
- 승자: C# .NET
시작 점 절대 좌표 (0,0), 끝 점 (100,100) 을 가지는 선 객체 하나를 그리는 코드 비교.
LISP
(defun c:LL ()
(command "LINE" "0,0" "100,100" "") ;
(princ)
)

C#
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
public class MyCommands
{
// 명령어: CN
[CommandMethod("CN")]
public void DrawLineNet()
{
// 1. 현재 도면과 DB 가져오기
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
// 2. 트랜잭션 시작 (작업 시작 알림)
using (Transaction tr = db.TransactionManager.StartTransaction())
{
// 3. 블록테이블(서랍) 열기
BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
// 4. 모형공간(파일철) 열기 - 쓰기 모드
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
// 5. 선(Line) 객체 생성 (메모리 상에 만듦)
Line line = new Line(new Point3d(0, 0, 0), new Point3d(100, 100, 0));
// 6. 도면에 등록 (Append)
btr.AppendEntity(line);
tr.AddNewlyCreatedDBObject(line, true);
// 7. 트랜잭션 완료 (저장)
tr.Commit();
}
}
}

결론
- AutoLISP: 즉각적인 문제를 해결할 때 쓴다.
- C# .NET: 자동화 시스템을 구축할 때 쓴다.
기존에 Lisp을 다룰 줄 아는 사람이 C#과 AutoCAD API의 구조(Database, Transaction 등)를 익히게 되면,
도면 내부(Lisp)와 외부 시스템(C#)을 자유자재로 연결하는 유일무이한 개발자가 될 수 있다.
이 블로그의 [Theory]시리즈는 그것을 다루는 기술을 익히는 과정이다.
Lisp이라는 기초 체력 위에 .NET이라는 날개를 달아보자.
'개발 > AutoCAD .NET(C#)' 카테고리의 다른 글
| [Theory] #2 오토캐드 Transaction 이해 (0) | 2025.12.19 |
|---|---|
| [Theory] #1 AutoCAD DB 구조의 이해 (0) | 2025.12.19 |
| [Setting] #1 .NET(C#) 개발 환경설정(기본) (0) | 2025.12.19 |
| VB.NET(C#)-DLL 파일 autocad 사용자 지정 버튼 만들기 (0) | 2022.01.13 |