주요 변경점
- iCAD 를 Python 판(v1.0.0.5)에서 Rust 판(v2.0.0.0)으로 다시 만들기로 결정
- Python 판 개발 중단. Python 판은 Rust 판 결과를 자동 비교하는 정답 프로그램으로만 사용
- Rust 판 실행 파일이 나올 때까지 설치 파일 다운로드 일시 중지(본편 다운로드 단추 「재개발중」)
- v1.0.0.5 후속 작업 완료. AI 패널 로그인 화면, Claude 로그인 창, 가상 치수(핵심기능 2), AI 패널 단추와 Ctrl+5
- 이전 작업 25개를 작업 목록으로 정리하고, 사람이 감독하지 않아도 매일 01:10 에 작업을 이어 가는 실행기를 설치
- Claude API 크레딧을 먼저 사용하고, 소진 뒤 구독 계정으로 이어 가는 비용 운영 방식 확정
- Sonnet 5.5 가 작성한 코드를 작업 5개마다 Fable 5.1 이 검토하고 수정하는 감독 단계 추가
- 첫 무감독 작업 M1-01 완료. 기하 함수 정답 3,200건 일치, 비용 0.21 달러
다운로드 안내. Rust 로 옮기는 동안 iCAD 설치 파일은 내려받을 수 없다. Rust 판의 첫 설치 파일을 만들면 본편에서 다운로드를 다시 연다.
개요
이 개발일지는 iCAD 개발일지 2편이다. 1편 게시(2026.10.30.) 이후 v1.0.0.5 에 더한 기능과, 프로그램 언어를 Python 에서 Rust 로 바꾸는 이전 작업의 준비 과정을 기록한다.
그림 1은 iCAD 의 기능 목록과 구현 여부를 Python 판 기준으로 나타낸다. 그림 2는 1편까지의 판별 작업과 Rust 이전 단계의 순서를 나타낸다.
-
- 1로고 창
- 2리본
- 3파일 메뉴
- 4명령줄
- 5플로팅 명령줄
- 6입력 자동 완성
- 7선택지 링크
- 8모형·배치 탭
- 9상태 표시줄
- 10도킹 창
- 11작업 공간 전환
- 12도움말
- 132D 배경 밝기
- 14여러 문서 탭
- 15명령 별칭 사용자 지정
- 16리본 사용자 지정
- 17다국어
- 18팔레트 창
-
- 1로그인 첫 화면
- 2Claude 로그인 창
- 3Gemini 키 로그인
- 4Claude 로 작도(MCP)
-
- 1설정 파일
- 2옛 설정 이어받기
- 3저장되는 값
- 4사용자 별칭 파일
- 5객체 스냅 종류 고르기
- 63D 도구 옵션 창
- 7격자 간격·극좌표 증분 바꾸기
- 8통합 옵션 대화상자
- 9단위 선택
-
-
- 1Windows 실행 파일
- 2exe 다시 빌드
- 3실행 파일 크기
- 4설치 프로그램
-
- 1엔진 시험
- 2화면 시험
- 3실행 파일 자체 점검
- 4실제 Windows 손 시험
- 5반응속도 측정
-
- 1개발일지 1편
- 2genealogypost.com 게시
-
-
-
- 1선
- 2폴리선
- 3원
- 4호
- 5직사각형
- 6폴리곤
- 7한 줄 문자
- 8타원
- 9스플라인
- 10점
- 11구성선
- 12도넛·구름형 수정 기호
-
- 1지우기
- 2이동
- 3복사
- 4회전
- 5축척
- 6대칭
- 7간격띄우기
- 8자르기
- 9연장
- 10분해
- 11모깎기
- 12모따기
- 13그립 편집
- 14배열
- 15늘리기
- 16끊기
- 17잇기
- 18특성 일치
- 19길이 조정
- 20정렬
-
- 1선형 치수
- 2정렬 치수
- 3반지름 치수
- 4지름 치수
- 5해치
- 6각도 치수
- 7기준선·연속 치수
- 8지시선
- 9여러 줄 문자
- 10치수·문자 스타일
- 11치수 한 명령
- 12세로좌표 치수
- 13연관 치수
- 14치수 그립·문자 편집
- 15치수 재지정
- 16표
- 17가상 치수
-
- 1도면층
- 2특성 창
- 3선 종류 표시
- 4선 가중치
- 5선 종류 축척
- 6블록
- 7도면층 도구
- 8도면층 상태
- 9정리·검사
-
- 1블록 속성
- 2블록 편집기
- 3블록 팔레트
- 4비균일 축척 블록
- 5블록 쓰기
- 6외부 참조
- 7DesignCenter
- 8그룹·그리기 순서
- 9클립보드
- 10동적 블록
-
- 1좌표 입력
- 2객체 스냅 9종
- 3직교
- 4극좌표 추적
- 5격자·격자 스냅
- 6동적 입력
- 7객체 스냅 추적
- 8임시 재지정
-
- 1거리
- 2면적
- 3점 좌표
- 4객체 정보
-
- 1줌·이동
- 2창·교차 선택
- 3되돌리기·다시 실행
- 4오른쪽 클릭 메뉴
- 53D 스케치로 보내기
- 6올가미 선택
- 7빠른 선택·유사 선택
- 8반응속도 최적화
-
- 1배치·뷰포트
- 2뷰포트 축척
- 3페이지 설정
- 4PDF 플롯
- 5표제란
- 6프린터 인쇄
-
- 1표면거칠기 기호
- 2기하공차 틀·데이텀
- 3치수공차 첨자·끼워맞춤 기호
- 4부품번호 풍선·부품표
- 5요목표
- 6나사·기어·베어링 약도
- 7표제란·도면 양식
-
-
-
- 1스케치 평면 고르기
- 2선·사각형·원·3점 호
- 3잘라내기·곡선 지우기
- 4그리는 중 치수 입력
- 5스케치 스냅
- 6영역 자동 인식
- 72D 도면에서 가져오기
- 8스케치 구속조건
- 9폴리곤·슬롯·타원·스플라인
- 10스케치 모깎기·간격띄우기
-
- 1영역을 입체로
- 2면 당기기
- 3모서리 당기기
- 4회전 당기기
- 5원통면 당기기
- 6쓸기
- 7블렌드
- 8구배
- 9대상까지 당기기
-
- 1이동·회전 조작기
- 2수치 이동·회전
- 3대칭
- 4패턴
-
- 1채우기
- 2합치기·빼기·교차
- 3쉘
- 4면 간격띄우기
- 5몸체 나누기
-
- 1기준 평면
- 2원점 평면 표시
- 3기본 도형
- 4기준 축·점
-
- 1거리 측정
- 2질량 속성
- 3재료 지정
- 4각도 측정
- 5단면 모드
- 6간섭 검사
-
- 1제3각법 투영
- 2단면도·상세도
-
- 1표준 방향
- 2마우스 회전·이동·확대
- 3구조 트리
- 4되돌리기·다시 실행
- 5표시 모드
- 6조립품
-
-
-
- 1자체 형식
- 2STEP · STP
- 3IGES · IGS
- 4STL
- 53MF
- 6DXF
- 7DWG
- 8PDF 내보내기
- 9SVG · PNG 내보내기
- 10OBJ · Parasolid · SAT
-
- 1새로 만들기·열기·저장
- 2가져오기
- 3최근 파일
- 4한글 경로
- 5자동 저장·복구
-
- v1.0.0.5 의 AI 패널과 가상 치수 마무리
- Python 과 Rust 의 장단점 비교와 전환 결정
- 이전 순서, 계층 구조, 정답 비교 방식 수립
- 작업 목록과 무감독 실행기 작성
- API 크레딧 사용 방식과 감독 단계 결정
- PC 개발 환경 준비와 첫 무감독 작업 실행
- ☑ AI 패널 첫 화면을 로그인 화면으로 변경, 로그인 전 대화 차단 (1.1절)
- ☑ 명령 창 없는 Claude 로그인 창 (1.2절)
- ☑ 가상 치수 구현과 실수 입력 시험 (1.3절)
- ☑ AI 패널 리본 단추, 명령, 단축키 (1.4절)
- ☑ Rust 전환 결정, 판 번호 v2.0.0.0 (2절)
- ☑ 이전 작업 목록 25개와 지시서 작성 (3.1~3.3절)
- ☑ 무감독 실행기, 비용 상한, 감독 검토 설치 (3.4~3.6절)
- ☑ PC 개발 환경 준비와 첫 무감독 작업 (4절)
- ☐ Rust 판 첫 실행 파일과 다운로드 재개 (5절)
- ☐ v1.0.0.5 의 가상 치수와 Claude 로그인 창 PC 실측 (5절)
1. v1.0.0.5 후속 작업
1.1 AI 패널 로그인 화면
AI 패널은 오른쪽 사이드 패널에서 Claude 와 Gemini 에 문장으로 작도를 지시하는 기능이다. 1편 게시 시점에는 패널을 열면 바로 대화 화면이 나타났다.
사용자는 로그인을 먼저 하는 순서가 맞다고 지적하였다. 이에 첫 화면을 Claude 와 Gemini 의 로그인 카드로 바꾸고, 로그인한 AI 만 대화 목록에 넣었다.
어느 AI 에도 로그인하지 않으면 「대화 시작」과 「보내기」가 동작하지 않는다. Claude 가 로그인 오류를 돌려주면 패널은 로그인 화면으로 돌아간다. 특성 팔레트와 AI 패널은 오른쪽에서 탭으로 전환되도록 묶었다.
1.2 Claude 로그인 창
Claude 로그인은 사용자 PC 에 설치된 Claude 공식 프로그램(Claude Code)이 수행한다. 처음에는 공식 프로그램의 로그인 명령을 명령 창으로 띄웠고, 사용자는 일반 사용자가 명령 창을 어려워한다고 지적하였다.
이에 공식 프로그램을 창 없이 실행하고 진행 상황을 iCAD 대화상자로 보이게 하였다. 그림 3은 이 로그인 창을 나타낸다.

창은 로그인 사이트 링크 단추와 주소 복사 단추, 브라우저가 인증 코드를 보여 주는 경우의 코드 입력 칸, 취소 단추를 갖는다. 2초마다 로그인 상태를 확인하고, 승인이 끝나면 창이 저절로 닫힌다.
iCAD 는 비밀번호와 토큰을 받지 않는다. 코드 입력 칸의 값은 저장하지 않고 공식 프로그램의 입력으로만 넘긴다. 클라우드 시험에서 주소 읽기, 틀린 코드 알림, 승인 후 자동 닫힘 세 항목을 확인하였다.
1.3 가상 치수
가상 치수는 본편 핵심기능 2(Inferred Dimensions)이다. 방금 그린 객체와 선택한 객체 옆에 흐린 점선 치수를 표시한다.
치수 값을 두 번 누르면 입력 상자가 열린다. 새 값을 넣으면 객체 크기가 그 값으로 바뀌고, 그 위치에 객체와 연결된 실제 치수가 생긴다. 그림 4는 가로 80 인 직사각형을 100 으로 바꾸는 과정을 나타낸다.

표 1은 객체 종류별로 크기를 바꿀 때 고정하는 기준을 나타낸다. 값을 그대로 두고 Enter 를 누르면 크기는 유지되고 치수만 생긴다.
표 1 가상 치수의 객체별 동작
| 객체 | 표시하는 치수 | 값을 바꿀 때 고정하는 기준 |
|---|---|---|
| 선 | 길이 | 시작점과 방향 |
| 직사각형 | 가로, 세로 | 왼쪽 변과 아래 변 |
| 열린 폴리선 | 곧은 구간마다 길이 | 뒤쪽 꼭짓점을 함께 옮겨 나머지 구간 길이 유지 |
| 원 | 지름 | 중심 |
| 호 | 반지름 | 중심과 각도 |
입력 상자는 12.5, .5, 1.25E+01 같은 실수와 100/3, 10.5+0.25 같은 사칙 연산을 받는다. 실수 입력 시험 18건과 동작 시험 16건을 통과하였다.
객체 5만 개 도면에서 가상 치수를 그리는 시간은 0.23 ms 로 측정되었다. 화면 응답 속도에는 영향이 없는 것으로 판단된다.
1.4 AI 패널 단추와 단축키
AI 패널은 보기 탭의 작은 항목으로만 열 수 있었다. 이에 홈 탭과 디자인 탭 끝에 큰 [AI 패널] 단추를 추가하고, 단축키 Ctrl+5 를 지정하였다.
Ctrl+5 는 AutoCAD 가 팔레트 열기에 쓰는 Ctrl+1~9 가운데 비어 있는 번호이다. 명령 AIPANEL 과 별칭 AI, AIP 로도 열고 닫는다. 진입 시험 9건을 통과하였다.
1.5 본편 핵심기능 수정
핵심기능 6의 이름을 「완전 무료」에서 「유지비용 감소(Lower Running Cost)」로 바꾸었다. 프로그램 사용권은 0원이지만 AI 기능을 쓰면 사용자의 AI 구독 비용이 생기기 때문이다.
2. Rust 전환 결정
2.1 Python 판의 한계
1편의 반응속도 개선 뒤에도 객체 5만 개 도면에서 느린 동작이 남았다. 첫 화면 표시 1.6 s, 되돌리기 0.48 s, 자르기 미리보기 182 ms, DXF 읽기 6.3 s 이다.
또한 설치 파일은 Python 실행 환경과 Qt 를 함께 묶어 86 MB 가 되었다. PC 시험에서 나온 결함 일부는 실행 중에만 드러나는 형식 오류였다.
2.2 언어 비교
표 2는 iCAD 에 적용할 때의 Python 과 Rust 를 비교한 결과이다.
표 2 iCAD 기준 Python 과 Rust 비교
| 항목 | Python (v1.0.0.5) | Rust (v2.0.0.0) |
|---|---|---|
| 실행 속도 | 무거운 계산은 C++ 라이브러리에 의존 | C++ 수준 |
| 개발 속도 | 수정 후 바로 실행 | 빌드 시간이 길고 컴파일러 검사가 엄격 |
| 오류 발견 | 실행 중에 발견 | 컴파일 단계에서 다수 차단 |
| 메모리 | 객체마다 부담이 큼 | 같은 자료를 적은 메모리로 처리 |
| 배포 | 실행 환경 포함 86 MB | 실행 파일 하나 |
| 3D 형상 계산 | OCCT Python 연결(OCP) 사용 | C++ 중간층을 직접 작성 |
| 화면 | Qt. 리본, 도킹, 한글 입력 완비 | 툴킷 선택 필요, 한글 입력 시험 필요 |
2.3 3D 형상 커널 연결
3D 형상 계산은 C++ 라이브러리 OCCT 를 Rust 에서 부르는 방식으로 정하였다. iCAD 가 쓰는 OCCT 기능은 약 25개 영역이므로, 필요한 기능만 모은 얇은 C++ 중간층을 만든다.
OCCT 의 C++ 예외는 중간층에서 모두 받아 오류 값으로 바꾼다. 더 큰 비용은 3D 화면 표시와 면·모서리 선택이다. Python 판은 OCCT 의 화면 기능을 그대로 썼으나 Rust 판은 이 부분을 직접 구현해야 한다.
2.4 결정
사용자는 개발 편의보다 사용자 편의가 중요하다고 판단하여 Rust 전환을 결정하였다(2026.10.31.). 판 번호는 v2.0.0.0 이며, Python 판은 v1.0.0.5 에서 개발을 멈추었다.
3. 이전 전략
3.1 계층 구조
Rust 판은 기능을 8개 묶음(crate)으로 나누고, 아래층에만 의존하도록 하였다. 의존 방향은 빌드 도구(xtask)가 자동으로 검사한다. 표 3은 계층과 원본 위치를 나타낸다.
표 3 Rust 판 계층 구조
| 층 | 묶음 | 하는 일 | Python 원본 |
|---|---|---|---|
| L0 | icad-geom | 점, 각도, 불룩값, 교점, 변환 | core/draft.py 기하 함수 |
| L1 | icad-doc | 객체, 도면층, 블록, 치수, 단위 | core/draft.py 클래스, units.py |
| L2 | icad-ops | 자르기, 연장, 간격띄우기, 모깎기 | core/draft.py 편집 함수 |
| L3 | icad-io, icad-occt | .gcad, DXF, OCCT 중간층 | io/formats.py, core/brep.py |
| L4 | icad-engine | 명령 196개, 시스템 변수, 되돌리기 | gui/commands*.py |
| L5 | icad-ai | MCP 서버, Gemini | ai/ |
| L6 | icad-app | 화면 | gui/ |
도면 자료의 JSON 형식은 Python 판의 drawing.json 과 같게 하였다. 이에 따라 기존 .gcad 파일을 Rust 판에서 그대로 연다.
3.2 정답 프로그램 비교
Python 판 원본 사본을 저장소에 읽기 전용으로 두고, 정답 추출 스크립트가 같은 입력에 대한 Python 판 결과를 파일로 만든다. Rust 판은 같은 입력의 결과를 이 파일과 비교한다.
허용 오차는 좌표와 길이 1e-9, 각도 1e-7 이다. 일치 건수는 기록 파일(FLOOR)에 남기며, 이 값은 늘릴 수만 있고 낮출 수 없다. 첫 정답 자료는 기하 함수 3,200건이다.
3.3 작업 목록과 지시서
이전 작업은 M0 준비부터 M7 화면 툴킷 결정까지 8단계, 25개 작업으로 정리하였다. 작업마다 Python 원본 위치, 옮길 묶음, 선행 작업, 완료 판정 명령을 적었다.
저장소 맨 위의 지시서(AGENTS.md)는 읽는 순서, 다음 작업 고르는 법, 완료 조건, 막혔을 때의 처리, 금지 사항을 담는다. 새 작업 세션은 대화 기록 없이 이 지시서와 작업 한 줄만 읽고 시작한다.
3.4 무감독 실행기
사용자 PC 의 Windows 작업 스케줄러가 매일 01:10 에 실행기를 시작한다. 실행기는 선행 작업이 끝난 첫 작업을 골라 Claude Code 세션 하나에 맡긴다.
세션이 끝나면 비용을 장부에 적고 git 에 커밋한다. 같은 작업이 2회 실패하면 사람 확인 필요로 표시하고 다음 작업으로 넘어간다. 작업 폴더에 STOP 파일이 있으면 멈춘다.
3.5 API 크레딧 사용 방식
사용자는 Claude API 크레딧 199.60 달러를 이 이전에 먼저 쓰고, 소진 뒤에는 구독 계정으로 이어 가기로 하였다. 표 4는 작업 종류별 모델 배정을 나타낸다.
표 4 작업별 모델 배정 (요금은 100만 토큰당 달러, 2026.10.31. 공식 요금표)
| 작업 | 모델 | 입력 | 출력 |
|---|---|---|---|
| Python 함수를 Rust 로 옮기고 시험 통과 | Sonnet 5.5 | 2 | 10 |
| 단계 세부 계획, 감독 검토 | Fable 5.1 | 10 | 50 |
| 문체 검사, 장부 요약 | Haiku 5.5 | 0.10 | 0.50 |
비용 상한은 세 겹으로 두었다. 작업마다 세션 비용 상한을 걸고, 실행기는 하루 30 달러와 누적 195 달러에서 멈춘다. Console 의 작업 공간에는 월 200 달러 한도를 지정하였다.
누적 195 달러에 닿으면 같은 실행기가 구독 계정 로그인으로 바꾸어 하루 6개 작업을 이어 간다. 장부의 mode 열에 api 와 sub 를 나누어 기록한다.
3.6 감독 단계
사용자는 Sonnet 이 작성한 코드의 품질을 우려하였다. 이에 감독을 세 단계로 구성하였다.
첫째, 작업마다 시험, 컴파일러 경고, 계층 검사, 정답 비교를 모두 통과해야 완료로 기록된다. 둘째, 성공한 작업 5개마다 Fable 5.1 세션이 변경분을 Python 원본과 대조하여 검토한다.
검토 세션은 작은 문제를 직접 고치고, 큰 문제는 수정 작업으로 등록하거나 해당 작업을 미완료로 되돌린다. 셋째, 매주 수요일 09:00 에 장부와 검토 기록, 임의의 커밋 2개를 사람이 보는 세션에서 점검한다.
4. PC 개발 환경과 첫 무감독 작업
4.1 개발 환경 준비
표 5는 사용자 PC 에 개발 환경을 준비하며 발생한 문제와 조치를 나타낸다.
표 5 PC 개발 환경 준비 결과
| 항목 | 현상 | 조치 |
|---|---|---|
| Rust 설치 | rustup 이 static.rust-lang.org 접속에서 시간 초과 | 같은 PC 의 다른 경로로 받은 1.99.1 부품 6개로 로컬 배포 폴더를 만들어 설치 |
| 외부 crate | 같은 접속 문제가 예상됨 | crate 사본(vendor)을 저장소에 넣고 오프라인으로 빌드 |
| Console 로그인 | 자동 조작으로 연 승인 화면의 승인 단추가 비활성 | 공식 프로그램이 연 화면에서 사용자가 승인 |
| 로그인 분리 | AI 패널과 개발이 같은 로그인을 쓰면 사용량이 섞임 | 개발 전용 설정 폴더를 따로 두어 Console 계정으로만 로그인 |
| 빌드 확인 | 없음 | 시험 통과, 경고 0건 |
4.2 첫 무감독 작업 M1-01
첫 작업은 Rust 기하 함수 14개를 Python 판 정답 3,200건과 비교하는 시험의 작성이다. 표 6은 실행 기록을 나타낸다.
표 6 M1-01 실행 기록
| 항목 | 값 |
|---|---|
| 모델 | Sonnet 5.5 |
| 대화 단계 수 | 22 |
| 소요 시간 | 1.1 분 |
| 비용 | 0.21 달러 |
| 캐시에서 읽은 입력 | 589,991 토큰 |
| 출력 | 8,354 토큰 |
| 정답 일치 | 3,200 / 3,200 |
Rust 기하 함수는 수정 없이 정답과 모두 일치하였다. 작업당 비용은 계획 때 추정한 1.5~2.5 달러의 약 1/10 이었다. 이에 하룻밤 작업 수를 12개에서 30개로 늘렸다.
5. 결과 및 남은 일
본 편에서는 v1.0.0.5 의 AI 패널과 가상 치수를 마무리하고, iCAD 를 Rust 로 옮기기 위한 계층 구조, 정답 비교, 작업 목록, 무감독 실행기, 비용 상한, 감독 단계를 준비하였다.
Rust 판은 아직 실행 파일이 없다. 따라서 Rust 판의 첫 설치 파일을 만들 때까지 iCAD 다운로드는 일시 중지한다. Python 판 v1.0.0.5 설치 파일도 배포하지 않는다.
다음 작업은 M1-02(호 그리기 11가지)부터 M2 도면 자료 구조까지이다. 화면 툴킷은 한글 입력 시험판을 PC 에서 확인한 뒤 결정한다. 가상 치수와 Claude 로그인 창의 PC 실측도 남아 있다.
참고문헌
- Anthropic, “Pricing,” Claude Platform Docs, 2026. https://platform.claude.com/docs/en/about-claude/pricing
- Anthropic, “Claude Fable 5.1,” Claude Platform Docs, 2026. https://platform.claude.com/docs/en/models/fable-5-1/overview
- Anthropic, “Legal and compliance,” Claude Code Docs, 2026. https://code.claude.com/docs/en/legal-and-compliance