여둘까 Office Layout TIL 5
캐드 파일도 열 수 있냐고 물었다
앞선 TIL 1에서 도면은 이미지와 PDF만 받기로 했다. 그런데 도면은 대개 DWG(캐드 프로그램 AutoCAD의 원본 파일)로 오가고, 매번 PDF로 바꿔 올리는 게 번거로웠다. 그래서 DWG를 바로 열 수 있냐고 물었다.
답은 “라이브러리가 없다”가 아니라 “치를 값이 너무 크다”였다. 가능한 길이 세 개 있었는데, 셋 다 다른 이유로 떨어졌다.
세 가지 길이 전부 떨어졌다
직접 읽기 — 규격이 공개돼 있지 않다
DWG는 Autodesk의 독점 형식이고 공개된 규격이 없다. 버전마다 내부 구조도 다르다. 남이 뜯어서 만든 해독기는 특정 버전만 읽는 경우가 흔하다. “어떤 파일은 열리고 어떤 파일은 안 열리는” 지원은 안 하느니만 못하다.
라이브러리 가져오기 — 앱 전체를 공개해야 한다
브라우저에서 DWG를 읽을 현실적인 수단은 LibreDWG라는 라이브러리 하나였다. 그런데 이게 GPL-3.0 라이선스다.
라이선스는 “이 코드를 가져다 쓰려면 이 조건을 지켜라”는 사용 약관이다. GPL은 그 조건이 유독 강해서, GPL 코드를 한 조각이라도 넣어 배포하면 그걸 포함한 프로그램 전체의 소스도 공개해야 한다. 그래서 “전염된다”고 부른다.
| 라이선스 | 내 코드에 미치는 영향 |
|---|---|
| MIT · Apache-2.0 | 저작권 표시만 하면 된다. 내 코드는 비공개로 둘 수 있다 |
| LGPL | 따로 떼어 불러 쓰면 괜찮고, 한 파일로 합치면 조건이 붙는다 |
| GPL-3.0 | 넣은 프로그램 전체를 GPL로 공개해야 한다 |
기능 하나 때문에 앱 전체의 라이선스를 바꾸는 건 값이 안 맞았다. 라이브러리를 고를 때 “되는가” 다음 질문은 “무슨 라이선스인가”여야 한다.
서버에서 바꾸기 — 약속을 깨야 한다
세 번째는 도면을 변환 서버로 보내 PDF로 받아 오는 방법이다. 기술적으로는 가장 쉽다.
그런데 이 앱은 도움말과 개인정보 처리방침에 “모든 작업은 내 브라우저 안에서만 처리되며 서버로 올라가지 않습니다”라고 적어 두었다. 사무실 평면도는 회사 자산이라, 이 약속이 곧 이 도구를 쓰는 이유다. 서버 변환은 그 문장을 지우라는 요구다.
제약이 분명하면 후보가 빨리 걸러진다
DWG 직접 읽기 → 공개 규격 없음 ❌
LibreDWG 가져오기 → 앱 전체가 GPL ❌
서버 변환 → 무전송 약속 위반 ❌
PDF로 바꿔 올리기 → 이미 되는 길 ✅
셋이 떨어진 이유는 기술이 아니라 프로젝트가 먼저 정해 둔 제약 — 서버로 안 보낸다, 라이선스를 지킨다 — 이었다. 제약을 미리 적어 두면 새 기능 후보를 만났을 때 오래 고민하지 않고 거를 수 있다.
같은 캐드 계열이라도 DXF(AutoCAD의 공개 교환용 텍스트 형식)는 성격이 다르다. 규격이 공개돼 있고, 자유롭게 쓸 수 있는 MIT 라이선스 해독기가 있고, 무엇보다 도면 안에 실제 단위가 들어 있다. 이걸 읽으면 사람이 두 점을 찍어 축척을 맞추는 단계가 통째로 사라진다. 이번엔 만들지 않았지만, 다시 열어 볼 이유가 가장 분명한 후보로 남겨 뒀다.
막을 때는 다음에 할 일을 알려 준다
DWG를 고르면 그냥 막는 대신 이렇게 안내하게 했다.
❌ 지원하지 않는 파일 형식입니다.
✅ 캐드 파일(.dwg/.dxf)은 직접 열 수 없습니다.
무료 캐드 뷰어(DWG TrueView, 오토데스크 뷰어 등)로 도면을 연 뒤
PDF로 인쇄·내보내고, 그 PDF를 올려주세요.
도면을 받아 쓰는 사람은 DWG가 왜 안 되는지 알 필요가 없고, 알아도 할 수 있는 게 없다. 필요한 건 지금 무엇을 하면 되는지다. 뷰어 이름까지 적은 것도 그래서다 — “캐드 뷰어로 바꾸세요”만 적으면 무엇을 깔아야 하는지 찾는 게 또 일이 된다.
이 안내는 두 곳에 뒀다. 파일을 골랐을 때(막는 자리)와 도움말(올리기 전에 아는 자리). 앞의 것만 있으면 한 번 실패해 봐야 알게 된다.
파일 선택창에서 고를 수 있는 종류를 걸러 두는 것만으로는 부족했다. 선택창은 “모든 파일”로 바꿀 수 있고, 끌어다 놓으면 아예 거치지 않는다. 앞선 소리꽃 KeyBloom TIL 10의 「화면에서 막는 것은 안내일 뿐이다」와 같은 얘기다 — 실제 판정은 파일을 받는 쪽에서 한 번 더 해야 한다.
안 하기로 한 결정도 적어 둔다
무엇을 만들었는지는 코드에 남는다. 무엇을 안 만들기로 했는지는 아무 데도 안 남는다. 몇 달 뒤에 “DWG 지원하면 좋겠는데?” 하고 똑같은 조사를 처음부터 다시 하게 된다.
그래서 프로젝트 문서에 “안 함”이 아니라 “왜 안 함”을 적었다. 규격이 없고, 라이브러리는 GPL이고, 서버 변환은 약속과 충돌한다 — 그리고 DXF는 가능하지만 지금은 안 한다. 조건이 바뀌면(규격이 열리거나 MIT 해독기가 나오면) 다시 열어 볼 근거도 같이 남는다.