프로그래밍 언어/PHP

PHP: PSR(PHP Standard Recommendation)

PSR(PHP Standard Recommendation)

PHP 에도 코딩 스타일과 린트와 같은 기능이 있고, 관련 그룹에서 권장하는 인터페이스와 프레임워크가 있다? 레거시 스타일로 PHP 를 작성하는 사람들은 이러한 존재를 알면서도 무시하거나, 모르는 경우가 많다. 하지만 인터넷이 급속도로 발달하면서 이러한 권고안이 정해지기 이전에 수 많은 프리스타일 코드가 나타났고, 그 덕에 많은 이들이 PHP에 대해 부정적 인식을 갖게 되어 여전히 PHP 의 소스코드는 엉망일 수 밖에 없다고 여기는 것이 그저 안타깝다.

 

PSR(PHP Standard Recommendation)PHP 표준 권장안, PHP 어플리케이션을 작성하면서 지켜주었으면 하는 것들을 문서화한 것이다. 권장안이므로 필수는 아니지만, 필수라고 생각하면 더 좋은 코드를 짤 수 있다. 권장안은 지금까지 18번까지 나와있다. 중간에 숫자가 비어있는 것은 버려졌거나, 이미 사용되지 않는 것들이며, 따라의 위의 것들만 살펴보면 되는데, 다 볼 필요는 없다. 우리가 PHP 프로그래밍을 할 때 중요한 것들만 보자. 참고로 PSR 는 PHP-FIG, PHP 프레임워크 상호 운용그룹에서 만들었고 그들은 이에 대한 인터페이스를 패키지의 형태로 제공하므로, 컴포저를 통해 받을 수 있다.

컴포저가 무엇인지 모르겠다면, https://pronist.tistory.com/53 를 참고하자

 

https://github.com/php-fig

 

PHP-FIG

PHP-FIG has 20 repositories available. Follow their code on GitHub.

github.com

위의 문서는 영어라서 읽기 불편하다. 따라서 누군가가 친절하게 만들어놓은 한글 문서를 보도록 하자.

 

https://psr.kkame.net/

 

Introduction

 

psr.kkame.net

PSR-1, PSR-12 Coding Standard

PSR-1, PSR-12 는 기본적으로 지켜야할 코딩 스타일이다. 변수, 클래스, 함수의 네이밍, 괄호의 위치 등 코딩할 때 지켜야할 포맷팅에 대해 서술하고 있다. 이는 조금 더 가독성이 좋게하도록 구성한다. 어플리케이션의 성능과는 상관없다. 코딩의 가독성과 관련된 것이다. 이를 기본적으로 지켜야 일관성있는 스타일을 유지할 수 있다.

 

PSR-1 은 기본(Basic), PSR-12 는 확장(Extended)라고 되어있으나, 둘다 지켜주는 것이 좋다. 그런데, 이걸 우리가 전부 의식하면서 써야할까? 사실 이를 검사해주는 PHPCS 라고하는 괜찮은 도구가 있으니 써보는 것이 좋다. 처음에는 설정도 많고 해도 귀찮을지도 모르지만, 한 번 설정해두면 여러 프로젝트에서 우려먹을 수 있다. 참고로 코딩 스타일에는 PSR-12 이외에도 있으나, 나는 PSR-12 만을 사용한다.

 

https://github.com/squizlabs/PHP_CodeSniffer

 

squizlabs/PHP_CodeSniffer

PHP_CodeSniffer tokenizes PHP files and detects violations of a defined set of coding standards. - squizlabs/PHP_CodeSniffer

github.com

덧붙이자면, 코드를 깃허브에 로드했을 때, 자동으로 소스코드를 분석하여 PR 을 보내주는 시스템도 존재하는데, 대표적으로 StyleCI 를 사용하면 된다.

PSR-3 Logger Interface

PSR-3로거를 만들때 사용하면 좋은 인터페이스 규격이다. 이는 우리가 직접 로거를 만들때 써야하지만, 이미 멋진 사람들이 만들어놓은 로거가 있다. 바로 monolog 이다! 해당 패키지는 PSR-3 를 구현하는 라이브러리이기에 우리가 굳이 로거 인터페이스를 상속받아서 구현할 필요는 없다.

 

https://github.com/Seldaek/monolog

 

Seldaek/monolog

Sends your logs to files, sockets, inboxes, databases and various web services - Seldaek/monolog

github.com

PSR-4 Autoload

PSR-4 는 중요하므로 다른 것들보다도 우선시해야 한다. 내용은 짧지만, 개발하면서 패키지를 포함하고 만들 때 가장 많이 접하게 될 것이기 때문이다. PSR-4 는 논리적 계층구조인 네임스페이스와 클래스, 인테페이스, 트레이트와 같은 것들을 컴퓨터 내부에 존재하는 물리적 파일 시스템과 연결시킨다. 즉, new 연산자를 사용하여 클래스를 생성하면, 자동으로 해당 클래스가 선언된 php 파일과 연결되어 수동으로 include, require 로 포함시킬 필요가 없다는 이야기다.

 

특히 해당 PSR-4 는 실습을 하는 것도 괜찮은데, PHP 공식 문서에 있는 spl_autoload_register() 함수를 살펴보면 될 것이다. 또는 PSR-4 에 구현 예제가 있으므로 이를 참고하자. 참고로, 컴포저를 사용하면 되기 때문에 실제 프로덕션에서의 사용은 컴포저로 하면 된다. 그러나, PSR-4 는 다소 중요하기 때문에 연습해보는 것이 좋다는 이야기다.

 

https://www.php.net/manual/en/function.spl-autoload-register.php

 

PHP: spl_autoload_register - Manual

I now utilize spl_autoload_register and there's no turning back. So let me gather here for you what I've learned...1.) the issue mentioned in these docs about case-sensitivity of filenames (Windows vs Linux/Mac): it only comes into play if you don't provid

www.php.net

컴포저를 사용하면 composer.json 이라는 파일을 보게 될 텐데, 해당 파일에 psr-4 가 사용 된 것을 볼 수 있을 것이며, 우리가 vendor/autoload.php 를 로드하는 순간에 PSR-4 가 동작하게 된다. 보면 알겠지만, 네임스페이스인 App\\ 와 실제 폴더인 app/ 이 연결 된 모습이다.

"autoload": {
    "psr-4": {
        "App\\": "app/"
    }
}

PSR-6, PSR-16 Cache Interface

PSR-6, PSR-16 은 캐시와 관련된 인터페이스를 정의한다. 이 또한 우리가 구현할 필요없으며, 심포니에서 제공되는 것을 사용하면 된다. 심포니는 프레임워크이지만, 각 모듈로 분리하여 필요에 따라 심포니를 굳이 사용하지 않는 프로젝트일지라도 사용할 수 있다는 큰 장점이 있다. 라라벨 프레임워크에도 몇몇 심포니 컴포넌트가 포함되어 있다.

 

https://github.com/symfony/cache

 

symfony/cache

The Cache component provides an extended PSR-6 implementation for adding cache to your applications. - symfony/cache

github.com

PSR-7, PSR-15, PSR-17, PSR-18

해당 권고안들은 모두 HTTP 와 연관이 있다. HTTP에 관한 것들을 쓸 수 있는 멋진 라이브러리가 있다. cURL 같은 것이 아니다. HTTP, 특히 클라이언트와 관련 된 것을 하고싶다면, 아래의 라이브러리를 꼭 사용해보도록 하자.

 

https://github.com/guzzle/guzzle

 

guzzle/guzzle

Guzzle, an extensible PHP HTTP client. Contribute to guzzle/guzzle development by creating an account on GitHub.

github.com

PSR-14 Event Dispatcher

PSR-14이벤트를 생성하고, 만들고, 보낼 수 있는 인터페이스를 정의한다. 이것 또한 심포니에서 만들어 놓은 것이 있다. 다만, PSR-14 에 대한 언급은 없기 때문에 이것을 명확히 구현한 것인지는 잘 모르겠으나, 이벤트와 관련된 라이브러리라면 이것을 쓰는 것이 좋다. 라라벨에는 내장되어 있으니 괜찮을 것이다.

 

https://github.com/symfony/event-dispatcher

 

symfony/event-dispatcher

The EventDispatcher component provides tools that allow your application components to communicate with each other by dispatching events and listening to them. - symfony/event-dispatcher

github.com

 

 

 

PHP 7+ 프로그래밍: 리부트 - 인프런

기초 문법부터 내장 함수, 웹 보안, 게시판 만들기까지 PHP 언어를 시작하는 분들을 위해 바이블이 될 수 있게 만들어보고자 하는 마음으로 이번 강좌를 만들어보았습니다. 입문 웹 개발 프로그��

www.inflearn.com

 

PHP 7+ 프로그래밍: 객체지향 - 인프런

PHP 객체지향, 내장 클래스, PSR, Composer, MVC(Model, View, Controller)까지 모던 PHP를 익히기 위한 근간을 이야기합니다. 초급 프로그래밍 언어 알고리즘 PHP 객체지향 알고리즘 온라인 강의 모던 PHP 프로��

www.inflearn.com

'프로그래밍 언어 > PHP' 카테고리의 다른 글

PHP: 게시판  (0) 2020.09.11
PHP: 회원가입과 로그인  (0) 2020.09.02
PHP: PSR(PHP Standard Recommendation)  (0) 2020.08.15
PHP: 의존성 관리자 — Composer  (0) 2020.08.14
PHP: MVC(Model, View, Controller)  (0) 2020.06.29
PHP: 파일 업로드와 다운로드  (0) 2020.06.10