[PHP] Composer 를 활용해서 커스텀 클래스 자동 로딩하기

2017. 3. 17. 18:14·PHP/PHP 문법
반응형

Composer 설치 & 기본 설정

Composer 설치

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer   # macOS/Linux 예시

프로젝트 루트에서 초기화

composer init

composer init 과정에서 패키지 이름·라이선스 등을 입력하면 composer.json 이 생성됩니다.

PSR‑4 규칙에 맞춘 폴더 구조 준비

  1. 네임스페이스 ↔ 디렉터리 매핑 규칙
    • Acme\Blog\Post → src/Blog/Post.php
  2. 파일 이름과 클래스 이름은 반드시 동일
    • class UserDetail {} → UserDetail.php
  3. 한 파일엔 클래스 하나만

예시 구조:

my-project/  
├── app/ # 애플리케이션 코드  
│ ├── Models/  
│ │ ├── User.php  
│ │ └── UserDetail.php  
│ └── ...  
├── database/ # Eloquent 등 DB 관련 코드 (classmap 예시)  
├── tests/ # 테스트 코드  
└── vendor/ # Composer가 생성
  1. composer.json에 오토로딩 설정 추가
{
  "autoload": {
    "classmap": [
      "database"            // DB 관련 클래스를 한꺼번에 스캔
    ],
    "psr-4": {
      "App\\": "app/"       // App 네임스페이스 → app/ 디렉터리
    }
  },
  "autoload-dev": {
    "classmap": [
      "tests/TestCase.php",
      "tests/PassportTestCase.php"
    ],
    "psr-4": {
      "Tests\\": "tests/"   // 테스트 전용 네임스페이스
    }
  }
}

 

* classmap : 재귀적으로 모든 PHP 파일을 스캔하여 클래스‑파일 매핑을 만듭니다. (리플렉션·레거시 코드에 유용)
* psr-4 : 권장 방식. 네임스페이스 접두사를 실제 경로와 일치시켜 빠르고 깔끔하게 로드합니다.

오토로더 최적화 & 생성

composer dump-autoload -o  
# -o 옵션: classmap 최적화를 위해 권장

 

실행 후 vendor/composer/autoload_*.php 등이 자동 생성됩니다.

코드에서 사용하기

오토로더 포함

// index.php (또는 진입점)  
require **DIR** . '/vendor/autoload.php';

예시 클래스

// app/Users/User.php  
<?php

namespace App\\Users;

class User  
{  
// ...  
}

// app/Users/UserDetail.php  
<?php

namespace App\\Users;

class UserDetail  
{  
// ...  
}

실제 사용

<?php  
// index.php

require **DIR** . '/vendor/autoload.php';

use App\\Users\\User;  
use App\\Users\\UserDetail;

$user = new User();  
$detail = new UserDetail();
반응형
저작자표시 (새창열림)

'PHP > PHP 문법' 카테고리의 다른 글

설치된 PHP가 threadsafe 혹은 nonthreadsafe 인지 알아내는법  (0) 2016.07.23
DB접속 (MySQL 기준)  (0) 2016.04.21
'PHP/PHP 문법' 카테고리의 다른 글
  • 설치된 PHP가 threadsafe 혹은 nonthreadsafe 인지 알아내는법
  • DB접속 (MySQL 기준)
Ethan Kang
Ethan Kang
Digital nomad + Software Engineer
    반응형
  • Ethan Kang
    Software Engineer Ethan
    Ethan Kang
  • 전체
    오늘
    어제
    • Programming (105)
      • Java (22)
        • Spring Framework (6)
        • Spring (8)
        • Spring Security (0)
        • JPA (3)
        • MyBatis (1)
        • Servlet, JSP (2)
      • DevOps (4)
        • Kubernetes (2)
        • Docker (1)
        • Terraform (0)
        • Jenkins (0)
        • Bazel (1)
      • Front-End (18)
        • ReactJS (0)
        • Typescript (3)
        • JQuery (1)
        • Java Script (13)
        • RxJS (0)
        • CSS (1)
      • Messaging Queue (1)
        • Kafka (1)
      • Linux (Ubuntu based) (8)
        • Ubuntu (0)
        • CentOS (2)
        • Shell Scripting (2)
      • PHP (5)
        • Laravel (2)
        • PHP 문법 (3)
      • Go (1)
        • Basics (1)
      • Python (16)
        • Flask (1)
        • Django (4)
      • App Development (4)
        • Android (1)
        • Cordova (0)
        • React Native (0)
        • Hybrid Programming (2)
        • IOS (1)
      • Database (4)
        • SQL (0)
        • My SQL (4)
        • MongoDB (0)
      • Shader Programming (0)
      • Tools (5)
        • GIT (2)
      • C# (3)
        • ASP.NET MVC (2)
        • CSharp 파헤치기 (1)
      • 서평 (1)
      • ETC (4)
        • C++ (0)
        • Geo Server (0)
        • NodeJS2 (0)
        • Ruby (2)
        • Elastic Search (0)
        • Camera (0)
        • Open Source (2)
        • WebVR (0)
      • 소프트웨어 이론 (2)
        • TDD (1)
        • Architecture (1)
        • WEB DEV (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • 컬러스크립터
  • 공지사항

    • 좋은 프로그래머가 되는 24가지 방법
  • 인기 글

  • 태그

    java
    Python
    mybatis
    데이터베이스
    Kotlin
    이미지 #jsp
    N+1
    mysql
    autoloading
    스프링
    자바
    JPA
    데이터베이스캐쉬
    VersionControl
    spring
    db
    스프링데이타
    mysql데이터복구
    django #장고
    psr-4
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Ethan Kang
[PHP] Composer 를 활용해서 커스텀 클래스 자동 로딩하기
상단으로

티스토리툴바