개발/AutoCAD .NET(C#)

[개발] AutoLISP vs C# .NET: 무엇을 배워야 할까? (역사와 역할의 차이)

JAEYUN249 2025. 12. 20. 19:49
반응형

서론: "리습을 버려야 할까요?"

오토캐드 자동화에 관심을 갖게 된 설계자들이 가장 먼저 마주하는 질문이 있다.

 

"전통의 강자 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();
        }
    }
}

결론

  1. AutoLISP: 즉각적인 문제를 해결할 때 쓴다.
  2. C# .NET: 자동화 시스템을 구축할 때 쓴다.

기존에 Lisp을 다룰 줄 아는 사람이 C#과 AutoCAD API의 구조(Database, Transaction 등)를 익히게 되면,

 

도면 내부(Lisp)와 외부 시스템(C#)을 자유자재로 연결하는 유일무이한 개발자가 될 수 있다.

 

이 블로그의 [Theory]시리즈는 그것을 다루는 기술을 익히는 과정이다.

 

Lisp이라는 기초 체력 위에 .NET이라는 날개를 달아보자.

반응형