PHP 프로젝트에서 라이선스를 항상 확인해야 하는 이유

발행: (2025년 12월 24일 오후 11:00 GMT+9)
9 min read
원문: Dev.to

Source: Dev.to

PHP 프로젝트에서 dependencies(의존성)를 고려할 때, 우리는 보통 보안, 성능, 유지 보수에 초점을 맞춥니다. 그러나 종종 간과되는 중요한 측면이 하나 있습니다: 소프트웨어 라이선스.

오픈‑소스 라이브러리, 상업용 SaaS, 혹은 사내 전용 애플리케이션을 만들고 있든, 의존성의 라이선스는 매우 중요합니다. 이를 무시하면 법적 위험, 규정 준수 문제, 그리고 예상치 못한 의무가 발생할 수 있습니다.

Composer는 이를 도와주는 내장 명령을 제공합니다:

composer licenses

이 글에서는 라이선스 검사가 왜 필수적인지와 Composer 도구—특히 summaryJSON 출력 형식—을 활용해 프로젝트를 준수 상태로 유지하고 관리하는 방법을 살펴보겠습니다.

라이선스 준수가 중요한 이유 (애플리케이션에도 적용)

일반적인 오해는 다음과 같습니다:

“나는 애플리케이션을 만들고 있고, 오픈‑소스 라이브러리가 아니기 때문에 라이선스는 중요하지 않다.”

이는 사실이 아닙니다. 프로젝트에서 사용된 라이선스를 확인하는 것은 여러 중요한 이유로 필수적입니다.

법적 의무

일부 라이선스(예: GPL)는 다음을 요구할 수 있습니다:

  • 소스 코드 공개
  • 파생 작업에 동일한 라이선스 사용
  • 귀속 표시 또는 라이선스 텍스트 제공

상업적 제한

특정 라이선스는 독점 소프트웨어나 유료 제품과 호환되지 않을 수 있습니다.

미래 대비

오늘의 내부 도구가 다음과 같이 변할 수 있습니다:

  • 오픈‑소스 프로젝트
  • 상업 제품
  • 더 큰 생태계의 일부

CI/CD 및 준수

많은 기업이 다음의 일환으로 라이선스 감사를 요구합니다:

  • 보안 검토
  • 벤더 평가
  • 릴리스 파이프라인

당신이 의존하는 것이 무엇인지 아는 것은 선택 사항이 아니라, 책임 있는 소프트웨어 개발입니다.

composer licenses -f summary 로 개요 보기

프로젝트의 라이선스 현황을 가장 빠르게 파악하는 방법은 다음과 같습니다:

composer licenses -f summary

이 명령은 각 라이선스와 해당 라이선스를 사용하는 패키지 수를 나열한 표를 생성합니다. 예시 출력:

-------------- ------------------------
 License        Number of dependencies
-------------- ------------------------
 MIT            81
 BSD-3-Clause   33
 BSD-2-Clause   2
 GPL-2.0-only   2
 GPL-3.0-only   2
 proprietary    1
 Apache-2.0     1
-------------- ------------------------

요약이 알려주는 내용

  • MIT / BSD / Apache – 일반적으로 관대하고 대부분의 프로젝트에 안전합니다.
  • GPL‑2.0‑only / GPL‑3.0‑only – 강력한 카피레프트 라이선스로 재배포 의무를 부과할 수 있습니다.
  • proprietary – 수동 검토가 필요한 위험 신호입니다.

오픈소스 라이선스에 대해 더 알고 싶다면 Open Source Initiative 라이선스 목록을 참고하세요.

요약 출력은 다음과 같은 상황에 적합합니다:

  • 빠른 감사
  • 문서화
  • 팀 회의
  • 보다 심층적인 분석이 필요한지 판단

하지만 이 요약은 어떤 패키지가 해당 라이선스를 가지고 있는지는 알려주지 않습니다. 패키지별 정보를 확인하려면 JSON 출력 형식을 사용하세요.

composer licenses -f json를 더 깊이 파고들기

자동화된 검사 또는 상세 분석을 위해 Composer는 기계가 읽을 수 있는 데이터를 출력할 수 있습니다:

composer licenses -f json

JSON에는 다음이 포함됩니다:

  • 프로젝트 메타데이터 (name, version, license)
  • 각 의존성이 version과 하나 이상의 license 항목을 포함하는 dependencies 객체

예시:

{
  "name": "laravel/laravel",
  "version": "dev-main",
  "license": ["MIT"],
  "dependencies": {
    "brick/math": {
      "version": "0.14.1",
      "license": ["MIT"]
    },
    "some/gpl-package": {
      "version": "1.2.3",
      "license": ["GPL-3.0-only"]
    }
  }
}

이 형식은 다음에 이상적입니다:

  • CI 파이프라인
  • 맞춤 정책 적용
  • 보고 도구
  • 자동 알림

PHP로 라이선스 정책 확인

JSON 출력을 얻으면 모든 의존성이 조직의 허용 라이선스 목록에 부합하는지 자동으로 확인할 수 있습니다.

프로젝트에서 허용하는 라이선스는 다음과 같습니다:

MIT;BSD-2-Clause;BSD-3-Clause;Apache-2.0

작은 PHP 스크립트를 사용하면 허용되지 않은 라이선스를 감지할 수 있습니다:

/dev/null', $output, $exitCode);

if ($exitCode !== 0) {
    fwrite(STDERR, "Failed to execute composer licenses\n");
    exit(1);
}

$data = json_decode(implode("\n", $output), true);

// Check dependencies
foreach ($data['dependencies'] as $name => $package) {
    $licenses = $package['license'] ?? [];

    // If none of the licenses are in the allowed list, report it
    if (!array_intersect($licenses, $allowedLicenses)) {
        echo sprintf(
            "%s (%s) -> %s\n",
            $name,
            $package['version'] ?? 'unknown',
            $licenses ? implode(', ', $licenses) : 'NO LICENSE'
        );
    }
}

스크립트:

  • composer licenses -f json을 직접 실행합니다
  • 출력을 안전하게 파싱합니다
  • 각 의존성의 라이선스를 허용 목록과 비교합니다
  • 정책을 위반하는 패키지를 보고합니다

다음과 같이 쉽게 확장할 수 있습니다:

  • CI 빌드 실패 처리
  • 컴플라이언스 보고서 생성
  • 알림 전송
  • 특정 패키지를 허용 목록 또는 차단 목록에 추가

실무에서 라이선스 확인이 중요한 이유

라이선스 자동 검사:

  • 실수로 인한 라이선스 위반 방지
  • 회사와 고객을 보호
  • 컴플라이언스를 반복 가능하고 감사 가능하게 함
  • 의존성 관리 습관 개선을 장려

무엇보다도, 라이선스 컴플라이언스를 “부수적인” 생각에서 개발 워크플로우의 필수 요소로 전환합니다.

핵심 요점: 빠른 개요를 위해 composer licenses -f summary를 사용하고, 자동화된 정책 기반 컴플라이언스 검사를 위해 composer licenses -f json을 작은 스크립트(또는 전용 도구)와 함께 활용하세요. 이렇게 하면 PHP 프로젝트를 법적으로 안전하고 개발에 바로 사용할 수 있게 유지할 수 있습니다.

최종 생각

Composer는 이미 도구를 제공합니다—그냥 사용하면 됩니다.

  • 빠른 개요를 위해 composer licenses -f summary를 사용하세요.
  • 자동화와 심층 분석을 위해 composer licenses -f json를 사용하세요.
  • 문제 발생 후가 아니라 초기에 라이선스 검사를 통합하세요.

의존성 관리는 코드만을 위한 것이 아닙니다.
또한 책임에 관한 것입니다.

Back to Blog

관련 글

더 보기 »

PHP 프로젝트의 공급망 보안

서론 보안은 언제나 지속적인 주제였습니다. 환경, 평판 및 회사 자산을 재정적 및 평판 손상으로부터 보호하는 것은...