# OpenSCAD는 꽤 멋지다

> Clean Markdown view of GeekNews topic #25230. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=25230](https://news.hada.io/topic?id=25230)
- GeekNews Markdown: [https://news.hada.io/topic/25230.md](https://news.hada.io/topic/25230.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-12-22T02:34:07+09:00
- Updated: 2025-12-22T02:34:07+09:00
- Original source: [nuxx.net](https://nuxx.net/blog/2025/12/20/openscad-is-kinda-neat/)
- Points: 6
- Comments: 2

## Summary

**코드로 설계하는 CAD**의 장점을 보여주는 사례입니다. 작성자는 기존 Fusion 모델을 **OpenSCAD 코드로 재구현**하며, `numRows`, `batteryType` 같은 변수만 바꿔도 즉시 맞춤형 배터리 홀더를 생성할 수 있음을 확인했습니다. `difference()`와 `translate()`를 이용한 단순한 반복 구조가 핵심으로, 복잡한 모델에는 한계가 있지만 **스페이서나 단순 부품 자동화 설계**에는 충분히 실용적인 접근으로 평가됩니다.

## Topic Body

- **OpenSCAD**를 이용해 간단한 **배터리 홀더**를 설계하며 코드 기반 CAD의 기본 개념을 탐구한 사례  
- 기존에는 **Autodesk Fusion**으로 AA·AAA 배터리용 파라미터화된 상자를 만들었으나, 이를 **OpenSCAD로 재구현**하며 학습 진행  
- 코드에서 `numRows`, `numColumns`, `batteryType` 등의 변수만 바꾸면 **맞춤형 홀더**를 생성할 수 있고, **비싼 CAD 소프트웨어 없이도 동일한 결과**를 얻을 수 있음  
- `difference()`와 `translate()`를 이용해 **박스와 구멍을 반복적으로 생성·제거**하는 구조로, 단순하지만 효율적인 설계 방식  
- 복잡한 모델에는 한계가 있으나, **스페이서·베어링 드리프트 등 단순 기하 구조 제작에 유용**한 도구로 평가됨  

---
### OpenSCAD로 배터리 홀더 설계
- AA 및 AAA 배터리를 위한 **기본 상자형 오거나이저**를 Autodesk Fusion에서 설계한 후, 이를 OpenSCAD로 다시 구현  
  - 기존 Fusion 모델은 변수 조정으로 배터리 크기, 행·열 수를 바꿀 수 있는 **파라미터화 구조**  
  - 완성된 모델은 Printables에 업로드됨  
- OpenSCAD는 **코드를 작성해 3D 객체를 생성하는 CAD 도구**로, 단순한 구조의 모델 학습에 적합  
  - 작성자는 OpenSCAD 튜토리얼 일부를 참고하며 약 한 시간 동안 실습 진행  
  - 결과물은 `battery_holder_generator.scad` 파일로 공개됨  

### 코드 구조와 작동 방식
- 주요 변수로 `AA`, `AAA`, `heightCompartment`, `thicknessWall`, `numRows`, `numColumns`, `batteryType` 등을 정의  
  - `widthBox`, `lengthBox`, `depthBox`는 각 변수 조합으로 계산  
- `difference()` 함수로 **기본 박스(cube)** 를 생성한 뒤, 내부에 **배터리 구멍을 반복적으로 빼내는 구조**  
  - `for` 루프와 `translate()`를 이용해 구멍의 위치를 계산하고, `cube()`로 각 구멍을 생성  
  - `let()`을 사용해 `startColumn`, `startRow`를 루프 내에서 정의해야 하는 부분이 혼란스러웠다고 언급  

### OpenSCAD와 Fusion 비교
- 동일한 모델을 **Fusion과 OpenSCAD에서 각각 생성 후 슬라이서에서 비교**  
  - 결과적으로 출력물은 사실상 동일하며, OpenSCAD는 **가벼운 코드 기반 접근**으로 빠른 수정 가능  
  - **고가의 CAD 소프트웨어 없이도 동일한 수준의 결과물**을 얻을 수 있음  

### 활용 가능성과 한계
- 복잡한 설계에는 적합하지 않지만, **스페이서·베어링 드리프트 등 단순 기하 구조 제작**에는 매우 유용  
  - 실제 생활에서 자주 필요한 **단순 부품 제작 자동화**에 강점  
- OpenSCAD의 **코드 중심 설계 방식**이 반복적이고 규칙적인 구조 생성에 효율적임  

### 결론
- OpenSCAD는 **간단한 3D 모델을 빠르게 생성할 수 있는 코드 기반 CAD 도구**로 평가  
  - 작성자는 “단순히 박스를 그리고 구멍을 뚫는 것뿐이지만 꽤 멋지다”고 표현  
  - 향후 간단한 설계 작업에서는 **Fusion보다 OpenSCAD가 더 실용적일 수 있음**

## Comments



### Comment 48140

- Author: ahwjdekf
- Created: 2025-12-22T18:35:13+09:00
- Points: 2

저는 freecad 를 강력추천합니다

### Comment 48091

- Author: neo
- Created: 2025-12-22T02:34:07+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=46337984) 
- OpenSCAD는 **프로그래머 사고방식**에 딱 맞는 CAD 도구임  
  모든 요소를 **매개변수화**할 수 있어서, 한 번 만든 프로젝트 인클로저를 변수 몇 개만 바꿔서 다양한 버전으로 생성할 수 있음  
  최신 nightly 빌드에서 Manifold 백엔드를 설정하면 렌더링 속도가 분 단위에서 초 단위로 줄어듦  
  공식 2021 릴리스는 너무 오래되어 사용하기 힘듦  
  BOSL2 라이브러리는 필렛, 라운딩, 부착 같은 기능을 추가해 OpenSCAD를 장난감 수준에서 실용적인 설계 도구로 만들어줌  
  Git 친화성도 뛰어나서, Fusion 360의 바이너리 파일보다 .scad 파일의 변경점을 훨씬 쉽게 비교할 수 있음

- OpenSCAD의 한계를 느껴서 Python으로 **SDF(서명 거리 함수)** 기반 3D 메쉬 생성 라이브러리 [sdf](https://github.com/fogleman/sdf)를 직접 만들었음  
  Python의 자유로운 로직을 활용해 모델을 구성할 수 있고, 기존 3D 메쉬를 불러와 **침식, 확장, 절단, 중공화** 같은 작업을 수행할 수 있음  
  이 프로젝트에는 아직 할 일이 많지만, 이 분야에 관심이 많다고 생각함
  - 다른 Python 기반 모델링 도구인 [Build123d](https://github.com/gumyr/build123d)나 [CadQuery](https://github.com/CadQuery/cadquery)와 어떤 점이 다른지 궁금함  
    STL은 비트맵처럼 삼각형 좌표를 저장하지만, STEP은 벡터 아트처럼 모델 생성 명령을 저장함  
    대부분의 GUI CAD는 STEP 기반이라 호환성이 좋음  
    SDF가 STL만 생성한다면, GUI CAD와의 호환성을 생각하면 Build123d나 CadQuery를 배우는 게 낫지 않을까 생각함  
    Build123d는 Fusion360이나 FreeCAD처럼 2D 스케치 후 3D 변환하는 개념이라, GUI와 코드 기반 CAD를 오가기에 편함
  - 이 라이브러리가 **테이퍼드 가변 피치 헬릭스** 문제를 해결해줄지도 몰라 기대됨
  - PythonSCAD도 libfive를 통해 SDF를 지원함 — [예시 페이지](https://pythonscad.org/examples.php) 중간쯤에서 “sdf”를 검색하면 됨
  - **메타볼(blobby)** 스타일의 블렌딩을 쉽게 구현할 수 있는 점이 특히 인상적임
  - 기존 STL 파일을 불러와 구멍을 뚫거나 다른 오브젝트를 합치는 기능이 흥미로움  
    Meshlab 같은 툴은 오류 메시지가 난해해서 실패했는데, 이 방식이라면 훨씬 직관적으로 작업할 수 있을 듯함

- 최근 OpenSCAD를 쓰기 시작했는데, 대부분의 CAD가 수많은 기능을 배우게 하는 반면 OpenSCAD는 **A4 한 장짜리 치트시트**로 설명 가능함  
  2021 릴리스 대신 git master 버전을 쓰면 훨씬 빠르고 최신 기능을 쓸 수 있음  
  BOSL2 라이브러리를 쓰면 전통 CAD의 복잡한 기능을 직접 구현하지 않아도 되고, 내부 구현을 볼 수 있어 배우는 재미가 큼
  - 나도 OpenSCAD 덕분에 3D 프린팅 설계의 정밀도를 얻었음  
    GUI CAD에서는 0.25mm 수정에도 모든 구멍과 컷아웃을 다시 조정해야 해서 좌절했는데, 코드 기반 접근으로 그런 문제를 피할 수 있음  
    BOSL2의 **center origin** 기본값 덕분에 변환 작업이 훨씬 쉬워짐
  - git master 버전은 렌더링 속도가 구버전보다 **수십 배 빠름**
  - 치트시트 링크를 요청함
  - 하지만 **날카로운 모서리 제거** 같은 작업은 여전히 어렵다는 한계가 있음
  - BOSL2는 정말 강력하고 유용한 라이브러리임

- OpenSCAD에 **객체 개념**이 없어서 box1.width 같은 접근이 불가능한 게 아쉬움  
  Build123d를 써봤지만 버그가 많고 문서화도 부족함. 언젠가 개선되길 바람

- OpenSCAD의 장점은 구, 원기둥, 큐브를 **수학적으로 조합**해 모델링하기 쉬운 점임  
  단점은 그 수학적 조합 능력에 모델링 한계가 걸린다는 것임  
  Python을 지원하는 [PythonSCAD](https://pythonscad.org/) 포크가 곧 메인 릴리스에 통합될 예정임
  - OpenSCAD는 절대 좌표 기반이라 **상대적 배치**나 솔리드 간의 관계를 표현하기 어려움  
    볼트 같은 모델을 만들려면 각 부분을 따로 만들고 겹치게 해야 함  
    실제 부품과 정렬하려면 많은 수동 계산이 필요하고, 하드코딩된 치수는 수정이 어려움  
    최신 베타 버전의 렌더러는 훨씬 빠르니 꼭 써볼 만함
  - OpenSCAD에는 **hull**과 **minkowski 합**도 있어서 익히면 강력한 도구가 됨
  - 브라우저에서 실행되는 JavaScript 버전 [OpenJSCAD](https://openjscad.xyz/)도 있음  
    [GitHub 저장소](https://github.com/jscad/OpenJSCAD.org) 참고
  - Java 기반의 Bowler Studio도 추천함. **Clojure 지원**과 물리 시뮬레이션 기능이 내장되어 있음
  - 점 좌표를 직접 정의해 복잡한 형상을 만들 수도 있지만, 순서가 까다로워 **MENSA 테스트**처럼 느껴짐

- 나는 가벼운 3D 모델러로서 OpenSCAD의 단순함이 좋음  
  거대한 GUI CAD 대신, **그래픽 프로그래밍**처럼 기본 도형과 변환만으로 모델을 만들 수 있음  
  오랜만에 코드를 열어도 몇 줄만 보면 바로 이해할 수 있음
  - 예전엔 OpenSCAD를 많이 썼지만, 실제로는 전통 CAD가 더 **직관적**인 경우가 많다고 느낌  
    수학적 계산이 필요한 제약 조건은 GUI CAD의 스케치 기능이 훨씬 간단함  
    CAD는 단계별로 되돌아가며 구조를 볼 수 있어서, 스크립트를 해석할 필요가 없음

- OpenSCAD는 자체 에디터 대신 외부 에디터를 쓸 수 있음  
  외부 에디터에서 저장하면 자동으로 미리보기가 갱신됨  
  [외부 에디터 설정 가이드](https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Using_an_external_Editor_with_OpenSCAD)

- 예전에 OpenSCAD 입문용으로 “**10가지 핵심 개념**” 튜토리얼을 작성했음  
  [튜토리얼 링크](https://cubehero.com/2013/11/19/know-only-10-things-to-be-dangerous-in-openscad/)

- 팁: `$fn` 변수를 설정해 **해상도 조절** 가능함  
  ```$fn = $preview ? 32 : 64;```
  - 단, FEM 해석용으로 내보낼 때는 너무 높은 $fn 값을 쓰면 **메시 성능**이 떨어질 수 있음  
    시각적 부드러움보다는 해석 정확도가 중요하므로 32~64 정도가 적당함

- 현실적으로 유용한 모델을 만들려면 손이 많이 가지만, **2KB짜리 텍스트 파일**로 완전한 파라메트릭 모델을 표현할 수 있다는 점이 너무 매력적임  
  Git diff도 의미 있게 작동하고, 커스터마이저 패널로 모델을 앱처럼 조정할 수 있음  
  FreeCAD의 거대한 XML 파일보다 훨씬 효율적임
  - 나는 주로 **단일 부품 수정**이나 변형을 자주 하는데, Python을 이용하면 이런 반복 작업이 훨씬 쉬움
  - 수학적으로 모델을 기술하는 게 나에게는 더 자연스러움  
    다만 **모따기(chamfer)** 나 **라운딩** 같은 기능이 기본 제공되지 않아, cone이나 sphere를 이용한 minkowski 연산으로 구현해야 하는 점이 번거로움
