개발 지식

개발 지식

PHP PHP에서 PSR 표준 완벽 이해 및 실무 적용 가이드

페이지 정보

profile_image
영삼이
0건 180회 25-03-28 23:31

본문

✅ PHP에서 PSR 표준 완벽 이해 및 실무 적용 가이드

**PSR (PHP Standards Recommendation)**은 PHP-FIG에서 정의한 PHP의 코딩, 설계, 아키텍처 표준입니다. 현대 PHP 프로젝트에서 PSR은 거의 모든 프레임워크와 라이브러리에서 기본 전제로 사용되며, 실무에서는 무조건 알아야 할 기초이자 필수 기준입니다.


🧱 PSR 핵심 종류 정리

PSR 번호 설명 실무 적용
PSR-1 기본 코딩 표준 네이밍, 파일 구성
PSR-4 오토로딩 표준 Composer 오토로딩
PSR-3 로깅 인터페이스 Monolog 등
PSR-7 HTTP 메시지 표준 요청/응답 인터페이스
PSR-11 컨테이너 표준 DI 컨테이너 인터페이스
PSR-12 코딩 스타일 가이드 PSR-1/2 확장
PSR-14 이벤트 디스패처 표준 이벤트 기반 아키텍처
PSR-15 HTTP 미들웨어 표준 Slim, Symfony, Relay 등

✅ PSR-1 / PSR-12: 코딩 컨벤션

[code=php]
// ✅ 클래스는 PascalCase
class UserService {
    public function getUserName(): string {
        return 'Kim';
    }
}
[/code]
- 탭 대신 스페이스 4칸
- 한 줄에 하나의 문장
- 네임스페이스 및 `use`는 최상단에 선언

**툴 자동 적용**
```bash
composer require squizlabs/php_codesniffer
vendor/bin/phpcs --standard=PSR12 src/

🚀 PSR-4: 오토로딩 표준

composer.json

{
  "autoload": {
    "psr-4": {
      "App\\": "src/"
    }
  }
}
[code=php]
// src/Service/UserService.php
namespace App\Service;

class UserService {
    public function sayHi() {
        return "Hi!";
    }
}
[/code]
composer dump-autoload

📦 PSR-3: 로깅 인터페이스

[code=php]
use Psr\Log\LoggerInterface;

class UserController {
    public function __construct(private LoggerInterface $logger) {}

    public function register() {
        $this->logger->info('회원가입 시도');
    }
}
[/code]

Monolog, Laravel Log, Syslog 등 다양한 구현체와 교체 가능


🔁 PSR-7: HTTP 메시지 객체

[code=php]
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;

function handler(ServerRequestInterface $request): ResponseInterface {
    $params = $request->getQueryParams();
    return new \Nyholm\Psr7\Response(200, [], json_encode($params));
}
[/code]
  • Slim, Symfony HttpFoundation, Laminas Diactoros 등과 호환 가능


🔌 PSR-11: 컨테이너 인터페이스

[code=php]
use Psr\Container\ContainerInterface;

class ControllerFactory {
    public function __construct(private ContainerInterface $container) {}

    public function make(): UserController {
        return new UserController(
            $this->container->get(LoggerInterface::class)
        );
    }
}
[/code]

→ Laravel, Symfony, PHP-DI 모두 PSR-11 준수


🧠 실무에서 왜 중요한가?

이유 설명
교체 가능성 ↑ Monolog → 다른 Logger로 쉽게 교체 가능
프레임워크 간 호환성 Slim ↔ Laravel ↔ Symfony 간 전환 쉬움
인터페이스 기반 설계 DI, 테스트 용이성 상승
오픈소스/팀 협업 일관된 스타일, 명확한 약속

✅ 요약

  • PSR은 PHP 생태계의 표준 언어

  • PSR-1, 4, 12 → 코딩 및 구조 기준

  • PSR-3, 7, 11, 15 → 설계 및 인터페이스 기준

  • PSR을 따르면 프레임워크에 종속되지 않는 구조를 만들 수 있음


댓글목록

등록된 댓글이 없습니다.