SBOM 이란?

개발자와 관리자가 알아야 할 SBOM의 핵심 개념과 업계 표준을 안내합니다.

개요

이 섹션은 SBOM(Software Bill of Materials)을 처음 접하는 분들을 위한 학습 가이드입니다. SBOM이 무엇이고 왜 필요한지, 업계 표준 포맷은 서로 무엇이 다른지를 다룹니다.

가이드 구성

  1. 개념 및 필요성: SBOM이 무엇이며, 왜 지금 우리에게 필요한지 근본적인 이유를 설명합니다.
  2. 표준 비교 (SPDX vs CycloneDX): 업계 표준 포맷의 차이점을 이해하고, 프로젝트 성격에 맞는 포맷을 선택할 수 있습니다.

SBOM을 실제로 생성하고 검증해 제출하는 실무 방법은 공급사 가이드에서 다룹니다.

1 - SBOM 개념 및 필요성

소프트웨어 명세서로서의 SBOM의 정의와 3가지 핵심 도입 목적(보안, 라이선스, 관리)을 설명합니다.

SBOM의 정의

SBOM (Software Bill of Materials)은 소프트웨어를 구성하는 모든 컴포넌트, 라이브러리, 모듈 등의 목록과 그들 간의 의존성 관계를 기술한 정형화된 명세서입니다. 제조업에서 제품의 부품 목록을 관리하는 BOM(Bill of Materials) 개념을 소프트웨어 공학에 적용한 것입니다.

graph TD
    A[소프트웨어 제품] --> B[직접 의존성]
    B --> C[라이브러리 A v1.2.3]
    B --> D[라이브러리 B v2.0.1]
    B --> E[라이브러리 C v3.1.0]
    C --> F[전이적 의존성]
    F --> G[라이브러리 D v1.0.0]
    F --> H[라이브러리 E v2.5.0]
    D --> F

    classDef root fill:#F2F2F2,stroke:#171717,color:#171717,stroke-width:1.5px
    classDef direct fill:#D9F0E4,stroke:#00A651,color:#0A5A32,stroke-width:1.5px
    classDef trans fill:#EEDCF3,stroke:#68127A,color:#4A0D57,stroke-width:1.5px
    classDef lib fill:#ffffff,stroke:#c8c8c8,color:#171717,stroke-width:1px

    class A root
    class B direct
    class F trans
    class C,D,E,G,H lib

SBOM의 주요 구성 요소

SBOM 문서에는 다음 정보가 담깁니다.

  • 컴포넌트 정보: 이름, 버전, 공급자, 라이선스
  • 고유 식별자: 컴포넌트를 명확히 식별하는 표준 식별자. Package URL(purl)이 가장 널리 쓰입니다. (예: pkg:maven/org.springframework/spring-core@5.3.20)
  • 의존성 관계: 직접 의존성(프로젝트가 직접 사용)과 전이적 의존성(직접 의존성이 다시 의존)
  • 메타데이터: 생성 도구, 생성 시각, 생성자

SK텔레콤에 제출할 때 각 항목의 필수 여부와 형식은 제출 요구사항이 규정합니다.

왜 필요한가?

SBOM은 단순한 문서가 아니라 소프트웨어 투명성을 위한 핵심 데이터입니다.

1. 보안 취약점의 신속한 식별

새로운 취약점(예: Log4j 사태)이 발표되었을 때, 우리 서비스 중 어디에 해당 라이브러리가 쓰이고 있는지 즉시 파악할 수 있습니다. SBOM이 없다면 모든 서버와 코드를 일일이 전수 조사해야 하며, 대응 골든타임을 놓치게 됩니다.

2. 라이선스 리스크 관리

오픈소스 라이선스 위반은 법적 분쟁으로 이어질 수 있습니다. SBOM을 통해 프로젝트에 포함된 모든 라이선스를 식별하고, 호환되지 않는 라이선스(예: GPL과 상용 코드의 결합) 사용을 사전에 차단할 수 있습니다.

3. 소프트웨어 품질 및 노후화 관리

오래되고 지원이 중단된(EOL, End-of-Life) 컴포넌트를 식별하여 기술 부채를 관리하고 소프트웨어의 건전성을 유지할 수 있습니다.

이런 배경에서 미국·유럽 등의 규제도 SBOM 제출을 의무화하는 방향으로 강화되고 있습니다. 자세한 내용은 규제 동향을 참고하세요.

관련 문서

참고 자료

2 - SBOM 표준

SBOM의 양대 표준인 SPDX와 CycloneDX의 특징을 비교하고 프로젝트에 적합한 선택 기준을 제시합니다.

주요 SBOM 표준

현재 널리 쓰이는 표준은 두 가지이며, 둘 다 SK텔레콤 제출에 사용할 수 있습니다. 탄생 배경과 주력 분야가 다릅니다.

  • SPDX (Software Package Data Exchange): Linux Foundation이 주관하는 표준(ISO/IEC 5962)입니다. 오픈소스 라이선스 정보 교환을 위해 개발되어 라이선스·저작권 정보 표현이 상세하고, 개별 파일 레벨의 정보까지 담을 수 있습니다.
  • CycloneDX: OWASP가 개발한 보안 중심 표준(ECMA-424)입니다. 처음부터 취약점 관리를 위해 설계되어 구조가 간결하고, 보안 도구와의 통합이 우수합니다.

SPDX vs CycloneDX 비교

구분SPDXCycloneDX
관리 기관Linux FoundationOWASP
표준 인증ISO/IEC 5962ECMA-424
주요 목적라이선스 컴플라이언스보안 취약점 관리
구조 복잡도높음 (상세)낮음 (간결)
파일 레벨 추적지원제한적
취약점 정보선택사항기본 포함
도구 생태계성숙빠르게 성장 중
파일 형식JSON, RDF/XML, YAML, Tag-ValueJSON, XML
주요 사용자법무팀, 오픈소스 관리 조직보안팀, DevOps 엔지니어
SKT 권장라이선스 검증이 주 목적일 때보안 취약점 관리가 주 목적일 때

어느 형식을 쓰든 제출 가능 여부는 형식이 아니라 내용이 가릅니다. 생성 도구가 지원하는 형식을 선택하고, 제출 요구사항의 필수 필드를 충족하면 됩니다.

상호 변환

SPDX와 CycloneDX 간 변환 도구가 제공됩니다.

SPDX에서 CycloneDX로 변환

# cyclonedx-cli 사용
cyclonedx convert --input-file sbom.spdx.json \
  --output-file sbom.cdx.json --input-format spdx \
  --output-format json

CycloneDX에서 SPDX로 변환

# spdx-tools 사용
java -jar tools-java-1.1.0-jar-with-dependencies.jar \
  Convert bom.cdx.json bom.spdx.json

관련 문서

참고 자료