이 글에서 Ari Mahpour는 DelphiScript 언어로 Altium 스크립팅을 할 때 ChatGPT를 가장 효과적으로 활용하는 방법에 대해 설명합니다.
이제 사람들은 생성형 AI, 그리고 특히 ChatGPT에 익숙해질 몇 달의 시간을 가졌습니다. 지난 글 Using ChatGPT for Automated Testing에서는 ChatGPT 서비스를 소개하고, 이를 익히는 방법과 하드웨어에서 테스트를 실행하는 코드를 생성하는 데 활용하는 방법을 보여드렸습니다. 이번 글에서는 Altium Scripting을 사용해 Altium 자체 내에서 자동화 기능을 실행할 수 있도록 ChatGPT를 최대한 효과적으로 활용해 DelphiScript 코드를 작성하는 방법을 살펴보겠습니다.
구현에 들어가기 전에, 먼저 우리가 다루는 대상이 무엇인지 이해하는 것이 중요합니다. Altium Scripting은 다른 언어보다 DelphiScript로 가장 잘 지원됩니다. 온라인에서 간단히 검색해 보면 “2022년인데, 이제는 Delphi로 코딩을 시작할 때 아닌가요?” 같은 문구나 “Delphi에서 사용되는 Pascal 언어는 가장 대중적이고 범용적인 프로그래밍 언어 중 하나입니다” 같은 눈길을 끄는 제목을 볼 수 있습니다. 하지만 저는 Altium Designer 외부에서 Delphi가 사용되는 것을 본 적이 없습니다. 그렇다고 해서 나쁜 언어라는 뜻은 아닙니다. 다만 Python, C++ 등만큼 널리 쓰이지 않을 뿐입니다. 새로운 언어를 배우려면 익혀야 할 것이 많고, 특히 전업 프로그래머가 아니라면 더더욱 그렇습니다. 그래서 Altium은 DelphiScript 코딩을 위한 다양한 자료와 도구까지 여기에 마련해 두었습니다. 이 언어를 본격적으로 익히고 싶다면 그 자료들이 도움이 될 수 있습니다.
Altium Scripting을 시작하면 저장하거나 공유하고 싶은 스크립트가 금방 많이 쌓이게 됩니다. Altium Designer에서 새 Scripting 프로젝트를 만들려면 File > New > Script > Script Project로 이동하세요. 새로 만든 프로젝트를 마우스 오른쪽 버튼으로 클릭한 뒤 Add New to Project > Script Unit으로 이동합니다. 그러면 스크립트 파일이 될 새 .pas 파일이 생성됩니다:
그림 1: 기존 프로젝트에 스크립트 파일 추가
이제 이를 Altium 365 워크스페이스에 저장해 보겠습니다. 먼저 프로젝트를 로컬에 저장했는지 확인하세요. 그다음 프로젝트를 다시 마우스 오른쪽 버튼으로 클릭하고 History & Version Control > Add Project to Version Control…로 이동합니다.
그림 2: 프로젝트를 Altium 365 Workspace에 추가
이후 표시되는 안내에 따라 프로젝트를 Altium 365 Workspace에 저장하면 됩니다. Altium Designer 내에서 DelphiScript 코드를 작성하고, 실행하고, 디버깅하는 방법에 대한 자세한 내용은 Altium documentation을 참고하세요.
이제 설정이 모두 끝났으니 본격적으로 시작해 보겠습니다. ChatGPT는 처음부터 끝까지 DelphiScript를 완전히 작성할 “잠재력”이 있습니다. 여기서 “capability” 대신 “potential”이라는 표현을 쓰는 이유는, 항상 정확한 결과를 내는 것은 아니기 때문입니다. 예를 들어, 프로젝트의 모든 net을 나열하는 DelphiScript를 생성해 달라고 ChatGPT에 요청하는 간단한 사례를 보겠습니다. 제가 처음 사용한 프롬프트는 솔직히 말해 매우 모호했습니다:
그림 3: ChatGPT의 초기 응답
ChatGPT는 제가 PcbDoc의 모든 net을 나열하고 싶어 한다고 자동으로 이해했습니다. 하지만 제가 원했던 것은 schematic 기준이었기 때문에 이를 바로잡았습니다:
그림 4: ChatGPT가 올바른 스크립트를 작성하기 위해 여러 차례 시도한 사례 중 하나
ChatGPT가 생성한 코드를 모두 보여드리지는 않았지만, 이후 제가 한 일은 코드를 여러 번 실행해 보고 Altium Designer에서 “Undeclared Identifier: eNet” 또는 “Expected: in For Pin in Component. Pins Do.” 같은 오류를 계속 마주한 것이었습니다. 저는 그 오류 메시지를 여러 번 ChatGPT에 그대로 알려주었고, 다섯 번째 시도 끝에 원하는 코드를 얻을 수 있었습니다.
분명한 것은 ChatGPT가 DelphiScript를 처음부터 생성하는 데 아주 뛰어난 것은 아니지만, 해낼 수는 있다는 점입니다. 답답해서 키보드를 벽에 집어던지고 싶어지기 전에 이 점을 기억해 두세요.
ChatGPT는 조수나 페어 프로그래머 같은 역할로도 활용할 수 있습니다. ChatGPT를 사용해 코드를 분석하고, 버그를 찾고, 특정 함수를 조정하는 데 도움을 받을 수 있습니다. 기존 Altium Scripting 예제를 가져와 ChatGPT가 우리의 요구에 맞게 수정하도록 할 수도 있습니다.
Altium Scripting 예제를 제공하는 자료는 꽤 많이 있으며, 특히 GitHub에서 쉽게 찾을 수 있습니다. 저는 Altium에서 공식적으로 제공하는 예제를 사용하겠습니다. 해당 자료는 여기에서 찾을 수 있습니다.
저는 \DelphiScript Scripts\SCH\Sch_Scripts.PrjScr 아래에 있는 PlaceAPort 예제로 시작했습니다. ChatGPT에는 아주 사소한 작업을 요청했습니다:
ChatGPT는 이 요청에 정확히 부합하는 코드를 제공했습니다. 솔직히 말하면 프로그래밍에 어느 정도 익숙하다면 이는 꽤 간단한 작업입니다. 이제 Altium Scripting에 대한 맥락 지식이 필요한 조금 더 어려운 예로 넘어가 보겠습니다.
다음은 ChatGPT에 보낸 수정된 프롬프트입니다:
첫 시도에서는 Undeclared Identifier 오류와 함께 실패했습니다:
그림 5: Altium Designer의 디버거 오류
제가 그 사실을 알려주자, 물론 ChatGPT는 사과했습니다. 이후 “Undeclared identifier: Name” 오류로 또 한 번 실패했지만, 세 번째 시도에서는 net label이 정확히 있어야 할 위치에 생성되었습니다:
그림 6: 수정된 스크립트로 생성된 새 net label과 port
복잡성이 높아질수록 ChatGPT가 첫 시도에 스크립트를 정확히 맞출 가능성은 낮아진다는 점은 분명합니다. 하지만 제 경험상 끈기 있게 시도하면 결국 올바른 결과에 도달할 수 있었고, 특히 사용자가 조금만 도와줄 수 있다면(즉, 생성된 코드를 이해하고 있다면) 더욱 그렇습니다.
이번 글에서는 Altium Scripting 소개부터 프로젝트 생성 방법, 그리고 이를 Altium 365 워크스페이스에 저장하는 방법까지 살펴보았습니다. 이어서 ChatGPT가 스크립트를 처음부터 완전히 생성한 사례와, 우리가 제공한 스크립트를 수정한 사례를 함께 다뤘습니다. 이를 통해 ChatGPT의 기능과, 동시에 항상 정확하지는 않다는 점도 확인했습니다. 완벽하지는 않지만, Altium Scripting을 배우고 활용하는 여정 전반에서 분명 유용한 길잡이 역할을 할 수 있습니다. 무엇보다도, 없는 것보다는 있는 편이 확실히 낫습니다.