가이드 · 05

SPDX 식별자와 파일 헤더

SPDX-License-Identifier 와 SPDX-FileCopyrightText 헤더 쓰는 법, 폐기된 식별자(GPL-2.0→GPL-2.0-only), 패키지 메타데이터의 license 필드, REUSE 명세를 정리합니다.

최종 확인: 2026-09-23

SPDX 란

SPDX(Software Package Data Exchange)는 리눅스 재단 산하 프로젝트로, 소프트웨어의 구성요소와 라이선스 정보를 기계가 읽을 수 있게 표현하는 표준입니다. 2021년에 ISO/IEC 5962:2021 국제 표준이 됐습니다. 그중 가장 널리 쓰이는 것이 SPDX 라이선스 목록의 짧은 식별자입니다. 'MIT License' 'The MIT license' 'MIT 라이선스'처럼 제각각인 이름 대신 MIT 하나로 적자는 약속입니다.

파일 헤더 두 줄

소스 파일 맨 위에 다음 두 줄을 주석으로 넣으면, 사람도 도구도 그 파일의 저작권자와 라이선스를 바로 알 수 있습니다.

// SPDX-FileCopyrightText: 2026 Jane Doe <jane@example.com>
// SPDX-License-Identifier: MIT

생성기의 파일 헤더 탭은 이 두 줄을 7가지 주석 형식으로 만들어 줍니다.

폐기된 식별자에 주의

SPDX 라이선스 목록 3.0(2017년 12월)부터 GNU 라이선스의 버전 조항을 식별자에 드러내도록 바뀌었습니다.

폐기된 식별자현재 식별자
GPL-2.0GPL-2.0-only
GPL-2.0+GPL-2.0-or-later
GPL-3.0GPL-3.0-only
LGPL-2.1LGPL-2.1-only
AGPL-3.0AGPL-3.0-only

그냥 GPL-3.0 이라고 적으면 'only'인지 'or later'인지 알 수 없기 때문입니다. 두 방식의 차이는 only vs or-later에 정리했습니다.

패키지 메타데이터

대부분의 패키지 관리자가 SPDX 식별자나 표현식을 받습니다.

생태계파일
npmpackage.json"license": "MIT" · 비공개는 "UNLICENSED"
RustCargo.tomllicense = "MIT OR Apache-2.0"
Pythonpyproject.tomllicense = "Apache-2.0" (PEP 639)
Mavenpom.xml<licenses> 안에 이름과 URL

npm 의 UNLICENSED 는 'Unlicense'와 전혀 다른 뜻으로, 사용을 허락하지 않는 비공개 패키지라는 표시입니다. 철자가 비슷해 실수가 잦습니다.

REUSE: 저장소 전체를 기계가 읽게

유럽자유소프트웨어재단(FSFE)의 REUSE 명세는 SPDX 헤더를 저장소 전체에 일관되게 적용하는 방법을 정합니다.

  1. 모든 라이선스 원문을 LICENSES/ 폴더에 SPDX식별자.txt 이름으로 둡니다(예: LICENSES/MIT.txt).
  2. 각 파일에 SPDX-FileCopyrightTextSPDX-License-Identifier 를 넣습니다.
  3. 주석을 넣을 수 없는 파일(이미지, JSON 등)은 파일명.license 옆 파일이나 저장소 루트의 REUSE.toml 로 정보를 적습니다.
  4. reuse lint 도구로 빠진 파일이 없는지 검사합니다.

실무 팁

이 글은 일반 정보이며 법률 자문이 아닙니다. 중요한 결정은 전문가와 상의하세요.

참고 출처