답변이 틀린 것이 아니라, 우리가 "외부 소프트웨어"라고 부르는 것이 서로 다릅니다. 파이썬으로 개발하면서 공개 라이브러리를 안 쓰기는 어렵습니다.
9개가 다시 다른 라이브러리를 불러옵니다. 이 목록을 손으로 헤아려 관리하기는 어렵습니다.
돈을 내지 않는다는 점만 보면 공짜 같지만, 정확히는 조건을 지키면 써도 된다는 허가입니다. 조건을 지키지 않으면 저작권 문제가 됩니다.
라이선스 조건 준수는 선택 사항이 아닙니다. 조건을 어기는 순간 무단 사용, 즉 저작권 침해가 됩니다.
문제는 내가 쓰는 라이브러리가 무엇이고 몇 번 버전인지 모르면 대조를 못 한다는 것입니다.
공식 배포 채널로 정상적으로 받은 패키지였습니다. 버전과 출처를 기록해 두지 않았다면, 문제가 알려진 뒤에도 내가 그 버전을 쓰는지조차 몰랐을 것입니다.
포함된 모든 구성요소의 이름·버전·라이선스·출처를 기계가 읽는 형식으로 기록합니다. 사람이 읽는 문서가 아니라, 도구가 자동으로 대조하는 목록입니다.
이름과 버전, 라이선스, 출처가 정해진 형식으로 들어갑니다. 국제 표준 형식은 CycloneDX와 SPDX 2가지입니다.
앞의 2개는 도구가 하고, 마지막 1개는 사람이 합니다.
소스 코드, 컨테이너, 펌웨어, 받은 SBOM, AI 모델에서 SBOM과 오픈소스 고지문, 보안·라이선스 위험 보고서를 만듭니다.
Apple Silicon에서도 안 열리면 codesign --force --deep -s - /Applications/BomLens.app을 한 번 더 실행합니다. 열리면 브라우저가 아니라 앱 자체 창에서 같은 웹 UI가 뜹니다.
다른 폴더를 스캔하려면 그 창을 끄고 원하는 폴더에서 다시 실행해야 합니다.
빌드 도구가 "이 프로젝트가 어떤 라이브러리를 쓰는지" 선언해 둔 파일입니다. 검사 도구는 이 파일을 시작점으로 삼으며, 언어마다 이름이 다르니 검사 전에 위치부터 확인하십시오.
오늘 예제(Python)는 requirements.txt입니다. 다른 언어를 쓰신다면 위에서 자신의 항목을 확인하십시오.
코드는 그대로입니다. 검사 도구는 코드를 분석해 라이브러리를 추론하지 않고, 매니페스트를 시작점으로 의존성을 해석합니다. 0건은 안전하다는 의미가 아니라 검사가 수행되지 않았다는 의미입니다.
실행 로그에서 다음 2줄을 확인합니다. 서로 다른 시점에, 다른 조건으로 찍힙니다.
이 4가지만 확인해도 0건 오탐의 대부분은 막을 수 있습니다.
지금까지 슬라이드에 나온 39개 컴포넌트, 19개 취약점이 바로 이 코드를 검사한 결과입니다.
검사 1회 실행 결과
이 숫자 3개만으로도 검사가 제대로 됐는지 판단됩니다.
이름과 버전, 라이선스, 출처가 컴포넌트 화면 한 줄에 표시됩니다. 버전이 왜 중요한지는 잠시 뒤 다시 보겠습니다.
본인 프로젝트에서도 이런 항목이 나오면 같은 순서로 봅니다 — 라이선스 확인, 버전 대조, 결론 기록.
CVSS·CVE·수정 버전은 Trivy가 대조한 생태계 보안 DB, EPSS는 FIRST.org 실시간 조회입니다. 폐쇄망에서는 EPSS만 생략되고 나머지는 그대로 나옵니다.
셋이 서로 다를 수 있습니다. 코드 라이선스만 확인하고 끝내기 쉽습니다.
| 구분 | 사례 | 결과 |
|---|---|---|
| 코드 | BusyBox GPL 소송(2009) | 삼성·베스트바이 등 14개사 피소, Westinghouse는 배상금 10만 달러 이상 + 배포 중단 명령 |
| 모델 | Getty Images v. Stability AI(2025) | 모델 자체의 저작권 침해는 기각됐지만, 결과물에 남은 워터마크로 상표권 침해는 인정됨 |
| 학습 데이터 | Bartz v. Anthropic(2025) | 불법 유통 도서로 학습시킨 사실이 드러나 15억 달러 배상 합의(역대 최대 저작권 합의금) |
소송으로 이어지면 배상 규모가 이렇게 커집니다.
| 구분 | 대상 | 확인 결과 |
|---|---|---|
| 코드 | github.com/MouseLand/cellpose | 컴포넌트 113건 · Weak copyleft 4건 |
| 모델 | huggingface.co/mouseland/cellpose-sam | BSD-3-Clause |
| 학습 데이터 | cellpose.org/dataset | 도구가 접근할 수 없습니다 |
코드와 모델은 확인됐습니다. 그런데 학습 데이터는 도구 밖입니다 - 이대로 써도 될까요?
모델 카드만으로는 알 수 없으니, 사람이 원본 페이지를 직접 찾아가야 합니다.
그래서 판정은 비상업·재배포 금지 약관입니다. 도구가 아니라 사람이 원문을 읽어야만 알 수 있는 내용이었습니다.
방금 확인한 cellpose.org의 비상업 조건, 사용 목적에 따라 무게가 달라집니다.
판단할 근거가 없으면 도구는 짐작하지 않고 그 상태를 그대로 남깁니다.
도구가 확인 필요로만 남긴 항목은, 프로젝트 담당자가 내린 결정과 근거를 이렇게 기록해 둡니다.
| 대상 | 처리 | 근거 | 일자 · 담당 |
|---|---|---|---|
| Modelica | 라이선스 확정 | GitHub 저장소 라이선스 감지 결과 BSD-3-Clause 확인 | 09-06 · 홍길동 |
| Buildings | 확인 필요 | GitHub에 표준 LICENSE 파일이 없어 저장소 문서를 직접 확인해야 함 | 09-06 · 홍길동 |
| analysis_core.py | 자체 개발 | 내부 작성, 외부 코드 참조 없음 | 09-06 · 홍길동 |
SBOM 산출물과 같은 폴더에 두십시오. 담당자가 바뀌어도 왜 그렇게 처리했는지 답할 수 있어야 합니다.
재검사 시점은 두 갈래입니다 - 사건이 생겼을 때, 그리고 시간이 지났을 때.
한 번 돌려 보고 끝내면 그때 상태의 기록 하나만 남을 뿐입니다. 제출한 목록과 실제 제공물이 달라지면 고지 자체가 틀린 것이 됩니다.
결과 화면에 남은 항목은 저절로 처리되지 않습니다. 이 순서로 진행하십시오.
복잡한 도입 절차 없이, 아래 순서대로 진행하시면 됩니다.
SCA(Software Composition Analysis)는 오픈소스 구성요소·라이선스·취약점을 자동으로 찾는 것입니다. BomLens도 그중 하나입니다.
오늘 다룬 내용은 여기까지입니다.
도구는 확인이 필요한 항목을 찾아내는 데까지이고, 사용 가능 여부 판단은 별도 검토가 필요합니다.