Composer란

Composer(컴포저)란 PHP에서 사용되는 프로젝트 기반 의존성 관리 툴이다. 이는 프로젝트의 의존성 라이브러리들을 기술하고, 관리(설치/업데이트)한다.

 

의존성 관리

컴포저는 Yum이나 Apt같은 패키지 매니저가 아니다. 물론, 컴포저가 '패키지'나 라이브러리들을 다루지만, 이는 프로젝트 기반의 매니징을 하고, 의존성 라이브러리들을 프로젝트 안의 디렉토리에 설치한다. 기본적으로, 컴포저는 어떤 것도 전역 위치에 설치하지 않는다.

 

가정:

  • 여러 라이브러리에 의존성을 가지는 프로젝트가 있고
  • 어떤 라이브러리는 또 다른 라이브러리에 의존성을 가진다

Composer:

  • 의존성을 가지는 라이브러리를 명시할 수 있게 해준다.
  • 어떤 패키지의 어떤 버전이 필요한지 찾아서, 프로젝트 폴더 안에 설치해준다.
  • 모든 의존성 라이브러리들을 하나의 명령으로 업데이트 할 수 있다.

 

최소 요구사양

최신버전의 Composer는 PHP 7.2.5를 요구한다.

파일 압축 해제를 위해, 7z(또는 7zz), gzip, tar, untar, unzip, xz을 사용한다.

 

설치

Composer 실행파일 다운로드 페이지 : https://getcomposer.org/download/

(composer.phar 파일을 다운받으면 된다.)

phar 파일이란?
배포를 쉽게 하기 위해 php 파일들과 관련 리소스들을 하나로 묶어 놓은 파일이다.

 

사용

Composer를 프로젝트에 사용하려면, composer.json 파일이 있어야 한다.

 

Composer.json

{
    "require": {
        "monolog/monolog": "2.0.*"
    }
}
  • 이파일에 프로젝트에서 사용하는 의존성과, 다른 메타데이터들을 기술한다. 
  • composer.json은 보통 프로젝트의 최상위 디렉토리 안에 위치해야 한다.
  • "require" 키 : require 키에 의존성 라이브러리들 정보를 기술한다.
    • 패키지 이름 : vendor 이름과 프로젝트 이름의 조합으로 이루어진다. (예: json 라이브러리를 만든 vendor가 둘일 경우, 패키지 이름은 igorw/json 또는 seldaek/json 등이 될 수 있다.)
    • 패키지 버전 제한 : 패키지 버전을 2.0.* 이라고 기술 하는 경우, 2.0 브랜치의 어떤 버전도 사용 가능하다.  (>=2.0 <2.1 사이의 버전을 사용함)

 

의존성 설치

의존성 라이브러리들을 업데이트 하기 위해, 프로젝트 폴더 안에서 update 명령을 사용한다.

 

php composer.phar update

 

  • 위 명령을 수행하면, composer.json 파일 안의 모든 의존성 관련 정보를 파악하여 해당 버전의 composer.lock 파일을 생성한다. (이 composer.lock 파일을 버전관리 시스템에 commit 하는 것을 권장함)
  • 그 후 암시적으로 install 명령을 수행하여 해당 의존성 라이브러리들을 다운받는다.

이미 composer.lock 파일이 존재 하는경우(버전관리 시스템에 커밋된 lock 파일을 받은 경우), install 명령을 해주면 된다.

php composer.phar install

끝. 프로젝트 폴더의 vendor라는 폴더 하위에, 의존성 라이브러리들이 설치된다.

 

 

참고

https://getcomposer.org/doc/00-intro.md

'개발 > PHP' 카테고리의 다른 글

[PHP] OPcache 정보 보기  (0) 2024.02.24
[PHP] PHP의 철학  (0) 2024.02.22
PHP opcache 적용  (0) 2023.02.20
[PHP] PHP-FPM 적용하기 (Centos7)  (0) 2023.02.17
[PHP] 윈도우에서 php 7.4로 업그레이드 및 VScode 디버깅 설정  (0) 2023.02.07

OPcache란

미리 컴파일된 바이트코드를 공유 메모리에 저장함으로써, 매 요청마다 PHP가 스크립트를 로딩하고 파싱하는 부분을 제거하여 PHP의 성능을 향상시키는 모듈이다.

OPcache improves PHP performance by storing precompiled script bytecode in shared memory, thereby removing the need for PHP to load and parse scripts on each request.

 

OPcache 설치하기

yum install php-opcache

 

OPcache 설정하기

/etc/php.d/10-opcache.ini 설정파일 내용을 아래와 같이 변경해준다.

(각 성능에 관련된 값은 디폴트를 쓰려면 주석 해제하지 않으면 되고, 아니면 서버에 맞게 조정하면 된다.)

- opcache.enable = 1 // 0 이면 비활성화

- opcache.validate_timestamps = 1 // 0이면 변경사항을 반영할 때 수동으로 opcache를 reset 하거나 웹서버를 재부팅 해야 한다.

; Enable Zend OPcache extension module
zend_extension=opcache

; Determines if Zend OPCache is enabled
opcache.enable=1

; Determines if Zend OPCache is enabled for the CLI version of PHP
;opcache.enable_cli=0

; The OPcache shared memory storage size.
opcache.memory_consumption=512

; The amount of memory for interned strings in Mbytes.
opcache.interned_strings_buffer=32

; The maximum number of keys (scripts) in the OPcache hash table.
; Only numbers between 200 and 1000000 are allowed.
opcache.max_accelerated_files=1000000

; The maximum percentage of "wasted" memory until a restart is scheduled.
;opcache.max_wasted_percentage=5

; When this directive is enabled, the OPcache appends the current working
; directory to the script key, thus eliminating possible collisions between
; files with the same name (basename). Disabling the directive improves
; performance, but may break existing applications.
;opcache.use_cwd=1

; When disabled, you must reset the OPcache manually or restart the
; webserver for changes to the filesystem to take effect.
opcache.validate_timestamps=1

; How often (in seconds) to check file timestamps for changes to the shared
; memory storage allocation. ("1" means validate once per second, but only
; once per request. "0" means always validate)
opcache.revalidate_freq=1

 

php-fpm 재시작하기

php-fpm을 사용중이라면, 재시작한다. (사용 안하면 패스)

systemctl restart php-fpm

 

웹서버 재시작하기

systemctl restart httpd

 

동작 확인

phpinfo를 통해, opcache가 제대로 동작하고 있는지 확인한다.

1. 문제 상황

PHP Fatal error: Allowed memory size of 134217728 bytes exhausted 가 뜨는 경우가 있다.

 

2. 원인

메모리 부족으로 추정된다.

* PHP의 메모리 제한 기본값은 128MB

 

3. 해결

PHP 설정파일에서 메모리 제한을 수정 후(더 큰 값으로 늘림), 웹서버를 재시작 해주면 모든 PHP 파일에 적용된다.

아래는 CentOS, Apache를 사용하는 경우의 예이다.

Bash

vi /etc/php.ini

php.ini

memory_limit = 256M

Bash

systemctl restart httpd

 

참고

https://zetawiki.com/wiki/PHP_%EB%A9%94%EB%AA%A8%EB%A6%AC_%EB%B6%80%EC%A1%B1

DateInterval 클래스를 사용하면 편하다.

방법 1. DateTime 클래스의 diff() 함수 사용

diff 결과를 가지는 DateInterval 클래스가 리턴됨

<?php
$d1 = new DateTime('2021-12-01 03:04:39');
$d2 = new DateTime('now');

echo "d1 : " . $d1->format('Y-m-d H:i:s') . "\n";
echo "d2 : " . $d2->format('Y-m-d H:i:s') . "\n";

// Method 1 : DateTime->diff() 
$diff = $d1->diff($d2);
print_r($diff);
echo "days : " . $diff->days;
?>

방법 2. date_diff( 함수 사용

역시 diff 결과를 가지는 DateInterval 클래스가 리턴됨

<?php
$d1 = new DateTime('2021-12-01 03:04:39');
$d2 = new DateTime('now');

echo "d1 : " . $d1->format('Y-m-d H:i:s') . "\n";
echo "d2 : " . $d2->format('Y-m-d H:i:s') . "\n";

// Method 2 : date_diff()
$interval = date_diff($d1, $d2);
print_r($interval);
echo "days : " . $interval->days;
?>

GMT (Greenwich Mean Time) : 그리니치 평균시(또는 그리니치 표준시)

런던을 기점으로 하고, 웰링턴에 종점으로 설정되는 협정 세계시의 기준시간대이다.

1972년 1월 1일부터 1970년 1월 1일을 기점으로 하는 협정 세계시(協定世界時, UTC)를 공식 표현으로 쓰지만 아직도 영국 BBC 방송을 중심으로 GMT란 표현은 널리 쓰이고 있다.

 

출처: https://ko.wikipedia.org/wiki/%EA%B7%B8%EB%A6%AC%EB%8B%88%EC%B9%98_%ED%8F%89%EA%B7%A0%EC%8B%9C

UTC (Coordinated Universal Time/Universal Time Coordinated) : 협정 세계시

1972년 1월 1일부터 시행된 국제 표준시이다. UTC는 국제원자시 윤초 보정을 기반으로 표준화되었다.

UTC는 그리니치 평균시(GMT)에 기반하므로 GMT로도 불리기도 하는데, UTC와 GMT는 초의 소숫점 단위에서만 차이가 나기 때문에 일상에서는 혼용된다. 기술적인 표기에서는 UTC가 사용된다.

 

출처 : https://ko.wikipedia.org/wiki/%ED%98%91%EC%A0%95_%EC%84%B8%EA%B3%84%EC%8B%9C

KST (Korea Standard Time) : 한국 표준시

대한민국 조선민주주의인민공화국의 표준시로, 동경 135도를 기준으로 하여 UTC보다 9시간 빠른 표준시(UTC+09:00)이다. 이는 일본 표준시와 같다. 일광 절약 시간제는 사용하지 않고 있다.

예)
UTC가 2021년 12월 25일 오전 9시 라면,
KST는 2021년 12월 25일 오후 6시가 된다.

 

출처 : https://ko.wikipedia.org/wiki/%ED%95%9C%EA%B5%AD_%ED%91%9C%EC%A4%80%EC%8B%9C

PHP에서 KST로 시간 표시하는 방법

PHP에서 별도의 시간대를 설정하지 않으면, "date" 명령을 사용했을 때 UTC 시간대가 출력된다.

이를 KST(한국 표준시)로 표시하기 위한 방법은 3가지가 있다.

1. php.ini에서 디폴트 시간대를 설정

php.ini 에서 아래와 같이 timezone을 설정한 후, 웹 서비스를 재시작하면 "date" 명령 사용 시 한국시간이 표시된다.

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone =Asia/Seoul

2. PHP 코드에서 설정

PHP 코드에서 아래와 같이 디폴트 시간대를 설정할 수 있다.

이렇게 하면 스크립트의 모든 date 함수 호출 시 한국시간이 표시된다.

<?php
date_default_timezone_set('Asia/Seoul');
echo date("Y-m-d H:i:s");
?>

https://www.php.net/manual/en/function.date-default-timezone-set.php

 

3. 디폴트 타임존이 UTC인 상태에서, 일시적으로 한국 시간으로 변경하고 싶은 경우

DateTime 객체에 setTimeZone(new DateTimeZone('Asia/Seoul')을 해주면 한국 시간으로 변경된다.

<?php
$dt = new DateTime('now');
echo 'UTC time : ' . $dt->format('Y-m-d H:i:s');
echo "\n";

$dt->setTimeZone(new DateTimeZone('Asia/Seoul'));
$dtKST = $dt->format('Y-m-d H:i:s');
echo 'KST time : ' . $dtKST;
?>

+ Recent posts