
개발자라면 누구나 한 번쯤 3D 프린터에 대한 로망, 있으시죠?
화면에 띄워진 코드가 실제 세상의 물건으로 튀어나오는 경험.
이건 정말 짜릿하거든요.
그런데 막상 3D 프린터를 사고 나서 모델링을 배우려고 하면 큰 벽에 부딪힙니다.
Fusion 360이나 블렌더(Blender) 같은 툴을 켜는 순간부터 막막해지죠.
마우스로 점을 찍고, 면을 당기고, 치수를 입력하고...
우리 같은 개발자들에게는 이 과정이 너무 '비직관적'으로 느껴질 때가 많습니다.
"아니, 그냥 변수에 width = 20 넣고 루프 돌리면 구멍 5개 뚫리는 거 아니야?"
이런 생각이 머릿속을 맴돌죠.
마우스로 일일이 클릭하는 건 버전 관리도 안 되고, 나중에 수정하기도 끔찍하니까요.
그래서 많은 개발자들이 OpenSCAD 같은 '코드로 짜는 CAD'로 눈을 돌립니다.
하지만 OpenSCAD도 문제가 있어요.
언어 자체가 좀 낡았고, 우리가 익숙한 현대적인 프로그래밍 언어의 맛이 안 납니다.
그런데 최근에 정말 재밌는 오픈소스 프로젝트를 하나 발견했습니다.
Swift로 3D 모델링을 할 수 있는 라이브러리, 바로 Cadova입니다.

Cadova는 한마디로 '매개변수형 3D 모델링을 위한 Swift DSL'입니다.
이게 무슨 말이냐고요?
iOS 개발하시는 분들은 SwiftUI 코드를 짤 때의 느낌을 떠올려보세요.
VStack 안에 텍스트를 넣고 패딩을 주듯이,
Cadova에서는 Stack 안에 RegularPolygon을 넣고 .extruded(돌출) 함수를 호출합니다.
코드가 곧 3D 형상이 되는 거죠.
가장 큰 장점은 역시 Swift 언어의 강력함을 그대로 가져온다는 겁니다.
타입 안전성(Type Safety)은 기본이고, Xcode나 VS Code의 자동 완성 기능을 100% 활용할 수 있죠.
OpenSCAD를 쓸 때마다 괄호 짝 맞추느라 고생했던 기억이 있다면,
이게 얼마나 큰 축복인지 아실 겁니다.
예시를 하나 볼까요?
육각 렌치 홀더를 만든다고 가정해 봅시다.
기존 CAD 툴이라면 육각형 하나 그리고, 복사해서 간격 맞추고, 구멍 뚫고... 노가다의 연속이었겠죠.
Cadova에서는 stride 함수로 루프를 돌리면 끝입니다.
Stack(.x, spacing: spacing) 안에 for 문을 넣어서 육각형 구멍을 쭈르륵 생성합니다.
그리고 .measuringBounds라는 아주 똑똑한 기능을 제공하는데요.
내부 요소들의 크기를 자동으로 계산해서, 그걸 감싸는 외곽(Stadium 형태)을 만들어줍니다.
수학 공식으로 좌표 계산하느라 머리 쥐어뜯을 필요가 없다는 뜻이죠.
이 라이브러리는 '매니폴드(Manifold)'라는 기하학 엔진을 기반으로 돌아갑니다.
그래서 3D 프린팅에 바로 쓸 수 있는 빈틈없는(Watertight) 모델을 만들어줍니다.
게다가 macOS뿐만 아니라 윈도우, 리눅스에서도 돌아갑니다.
순수 Swift로 작성되었기 때문에 버전 관리(Git)도 완벽하게 지원되죠.
모델링 파일이 텍스트 코드니까, "구멍 크기 0.5mm 수정" 같은 커밋 로그를 남길 수 있다는 게 얼마나 매력적인가요?
물론 아직 버전이 0.4.1이라 프리릴리스(Pre-release) 단계입니다.
API가 바뀔 수도 있고, 상용 제품을 설계하기엔 부족할 수도 있어요.
하지만 주말에 취미로 3D 프린팅을 즐기는 개발자라면,
혹은 Swift라는 언어의 표현력이 어디까지 확장될 수 있는지 궁금하다면,
한 번쯤 찍어 먹어볼 만한 가치가 충분합니다.
지금 당장 거창한 걸 만들지 않아도 좋습니다.
책상 위에 굴러다니는 USB 메모리 꽂이 하나라도,
마우스가 아니라 '코드'로 만들어보는 건 어떨까요?
우리는 엔지니어니까요.
세상을 만드는 도구도 우리 손에 맞는 게 제일 편하잖아요?


