이 글에 대하여
회로도를 그리고, SPICE로 시뮬레이션하고, PCB(Printed Circuit Board)를 만들고, 발주용 Gerber 파일까지 뽑아내는 모든 과정을 하나의 소프트웨어로 구현한 일본어 회로 CAD인 'circuitCad'을 Rust와 egui를 사용하여 제작했습니다.
이 소프트웨어는 코드의 거의 전부를 Claude Code (Claude Sonnet 5.5)에게 작성하게 함으로써 완성되었습니다. 저는 사용하고 테스트하는 것, 테스트 확인, UI 개선 제안을 담당했습니다. 이 글에서는 그 제작 과정과, 직접 해보니 유용했던 아이디어 및 어려웠던 점을 실제 리포지토리의 수치와 함께 기록합니다.
回路図に電圧と電流を重ねて表示した画面
완성된 기능
| 항목 | 수 |
|---|
| 개발 기간 | 2026-10-08 ~ 10-14 (달력상 7일. 작업 시간은 합산하지 않았습니다) |
| ... | |
| 기능으로는 회로도 에디터, DC/과도(Transient)/AC/노이즈 등 시뮬레이션, 고장 시뮬레이션, PCB 에디터(자동 배선・밀어내기 배선・다층 기판・3D 표시), 발주 전 체크, Gerber 출력 등이 있습니다. 초보자용이라 화면은 일본어로 되어 있고, 버튼에 포인터를 올리면 설명이 나옵니다. '학습 경로'에서는 안정화 전원 공급 장치를 만드는 과정까지 순서대로 배울 수 있습니다. | |
제작 동기
동기는 간단히 말해 무언가를 만들어보고 싶다는 호기심이었습니다. 소재로는 시각적으로 이해하기 쉽고, 작동했을 때 성취감이 큰 전자 회로를 선택했습니다.
이전에 전문 소프트웨어를 몇 가지 만져본 경험이 있습니다. 그때의 인상은 '사용하기 어렵다'였고, 당시 저 자신도 지식이 얕았기에 초보자에게는 다루기 어려운 소프트웨어라고 기억하고 있었습니다. 그래서 초심자의 어려움을 고려한 소프트웨어를 목표로 삼았습니다.
역할 분담: AI에 맡긴 것과 내가 한 것
솔직히 말하자면, 코드는 사실상 전부 AI가 작성했습니다. 제가 담당한 것은 다음 사항들입니다.
- 결정: 무엇을 만들지 (대상은 초보자, 일본어, 학습 경로, 발주까지). 우선순위. 공개 및 태그 지정은 반드시 직접 확인 후 진행한다는 규칙 설정.
- 직접 시도 및 테스트: 실제로 소프트웨어를 조작하며 사용하기 어렵거나 이해하기 어려운 부분을 찾아냄.
- 테스트 검토: 테스트가 통과했는지, 무엇을 확인하고 있는지 살펴봄.
- UI 개선 제안:
그리고 cargo clippy를 돌려 테스트 케이스의 수와 결과가 변하지 않음을 확인했습니다. - 공개된 함수는 pub use로 재내보내어 호출하는 쪽 코드를 변경할 필요가 없게 했습니다 (drc::check는 외부에서 약 90곳에서 사용됩니다). - 동시에 clippy 경고를 약 70건에서 5건으로 줄였습니다.
AI에게 큰 변경을 시킬 때는, '무엇이 변해서는 안 되는지'를 테스트로 고정해 두면 안심하고 맡길 수 있습니다.
노력 3: 외부 기준과 비교하여 정답 확인하기
시뮬레이터의 수치 계산은 AI가 작성한 것을 그대로 믿을 수는 없습니다. 그래서 오픈소스인 ngspice와 결과를 비교하는 시스템을 만들었습니다 (circuitCad --xcheck). 포함된 샘플 회로의 동작점(전압과 전류) 및 과도 파형이 ngspice와 일치하는지 확인합니다.
이 시스템 덕분에 다음과 같은 결함을 발견했습니다.
- 내부 상수(열 전압)가 0.05% 벗어나 있어, 다이오드나 트랜지스터의 전압이 약 0.3mV 벗어났습니다.
- 과도 해석의 시간 간격이 거칠 경우, RLC의 링잉 오차가 5.45% 있었습니다 (간격 자동 조정으로 0.06%로 개선).
반면, 일치하지 않는 회로도 있습니다. 전원 투입 직후 플립플롭과 같은 양안정(bistable) 회로는 자체 시뮬레이터와 ngspice에서 안정화되는 지점이 다릅니다. 이러한 알려진 차이는 문서에 작성되어 있습니다.
노력 4: 화면을 캡처하여 확인하기
테스트가 718건이 있어도, 육안으로 보이는 결함은 발견되지 않습니다. 실행 인자 --screenshot를 추가하면 앱이 몇 프레임을 그려 PNG를 저장하고 종료합니다. 이를 사용해 주요 화면을 캡처하여 AI에게 이미지를 보여주며 확인했습니다.
릴리스 전 점검에서 실제로 다음과 같은 결함을 발견했습니다.
'만들어 보기'(직접 회로를 만드는 연습) 시작 화면에서,
GND 기호가 제너 다이오드의 본체에 겹쳐 있었습니다.
원인은 GND를 'A핀의 5칸 아래'에 놓는다는 지정이 부품의 방향을 고려하지 않았기 때문이었습니다. 테스트는 '정답 회로가 통과하는지'만 봤기 때문에 통과했습니다. 화면을 보고 처음 알게 된 결함입니다. 수정한 후에는 'GND가 다른 부품 위에 올라가지 않음'을 확인하는 테스트를 추가했습니다.
AI의 실패와 주의하고 있는 점
순조로웠던 것만은 아닙니다.
- 문서에 적은 파일 경로(
F: ools gspice...)의 이 개행으로, 가 제어 문자로 변해서 깨진 채 남아 있었습니다. 정리할 때 발견하여 수정했습니다. - 파일의 개행 코드(CRLF와 LF)가 혼재되어 있어, 기계적인 재작성으로 차이가 커질 뻔했습니다. 변경할 때는 개행을 명시적으로 다루도록 했습니다.
- 셸에 전달한 긴 스크립어 분석에 실패하는 경우가 있었습니다. 스크립트는 파일에 작성한 후 실행하는 방식으로 바꿨습니다.
공개/태그 지정/릴리스는 AI가 멋대로 하도록 두지 않는다는 규칙도 정했습니다. 공개는 취소하기 어려우므로, 매번 제가 확인한 후에 실행합니다.
아직 못 한 것 (솔직히 말해서)
- 기판 발주 실적은 아직 없습니다. 거버(Gerber) 출력과 발주 전 체크는 만들었지만, 실제로 제조를 받은 적은 없습니다. - 작동 확인은 Windows만입니다. macOS와 Linux는 빌드도 실행도 시도하지 않았습니다. - 시뮬레이션은 간이 모델입니다. 실제와 크게 벗어나는 장면이 있어, 레슨마다 '실물과의 차이'를 작성하고 있습니다.
- 부품의 수치(핀 배치/치수/모델)는 개략적입니다. 사용하기 전에 데이터시트로 확인해 주세요.
시도해 보고 싶은 분께
Windows용 zip을 릴리스 페이지에서 다운로드하여 압축을 풀고 circuitCad.exe를 실행하기만 하면 됩니다. 설치가 필요 없습니다. 메뉴의 '학습'에서 첫 번째 레슨(전압 나누기)을 선택하면 순서에 따라 진행할 수 있습니다.
결함 보고나 부품 추가 제안은 GitHub Issue에서 환영합니다.
요약
AI에게 코드를 작성하게 하는 개발에서는 다음 사항들이 도움이 되었습니다.
코드 지도 (CLAUDE.md)를 만들고, 비대해지지 않게 관리한다.
테스트에서 '바꾸지 말아야 할 것'을 고정한 후, 큰 변경을 맡긴다.
AI가 작성한 계산은 외부 기준(ngspice)으로 답을 확인한다.
테스트가 통과했더라도, 화면을 캡처하여 눈으로 직접 본다.
공개하거나 되돌리기 어려운 작업은 사람이 확인한 후에 진행한다.
맺음말
AI의 발전과 추론 능력 향상에 힘입어, 프로그래밍 경험이 적은 사람도 소프트웨어를 만들 수 있게 되었다고 느낍니다. '무언가 만들어보고 싶다', '도전해보고 싶다'는 분들의 참고가 되기를 바라며 이 글을 정리했습니다.
이 글의 초안 역시 개발 과정에서 AI가 요약한 것입니다. 제가 확인하고 손을 거쳤지만, 오류가 남아 있을 수 있습니다. 발견하신 점이 있다면 GitHub Issue 등으로 알려주시면 감사하겠습니다.
토론 (Discussion)