Ubuntu에서 PHP 8.1 설치 및 로컬 개발 환경 설정
이 튜토리얼의 이전 버전은 alenaholligan이 작성했습니다.
소개
PHP는 웹 개발을 위해 설계된 인기 있는 오픈 소스 서버 사이드 스크립트 언어로, 블로그와 전자상거래 사이트에서 대규모 애플리케이션에 이르기까지 인터넷의 상당 부분을 구동합니다. 새로운 버전이 출시될 때마다 PHP는 성능, 보안 및 현대적인 개발 기능을 향상시켜 개발자가 견고하고 확장 가능한 소프트웨어를 구축할 수 있도록 지원합니다.
PHP 8.1은 안정적이고 장기 지원되는 릴리스로, 신뢰성을 유지하면서 주목할 만한 개선 사항과 새로운 언어 기능을 제공합니다. Ubuntu에 PHP 8.1을 설치하면 로컬 개발 환경을 최신 상태로 유지하고, 보안을 강화하며, WordPress, Laravel 및 맞춤형 PHP 애플리케이션과 같은 널리 사용되는 프레임워크 및 플랫폼과 호환성을 보장할 수 있습니다.
이 튜토리얼은 Ubuntu에 PHP 8.1을 설치하고, Apache 또는 Nginx와 함께 구성하며, 필수 PHP 확장 기능을 설정하고, 의존성 관리를 위해 Composer를 설치하는 방법을 안내합니다. 또한 설치를 확인하고 일반적인 문제를 해결하는 방법도 배우게 됩니다.
Linux-Console.net 앱 플랫폼을 사용하여 GitHub에서 PHP 애플리케이션을 배포하세요. Linux-Console.net이 앱 확장에 집중하도록 하세요.
핵심 내용
Ubuntu 22.04에 PHP 8.1 설치: Ubuntu 22.04 LTS는 기본 저장소에 PHP 8.1을 포함하고 있어, 제3자 PPA 없이
apt를 사용하여 안정적이고 장기 지원되는 PHP 버전을 설치할 수 있습니다. 이를 통해 예측 가능한 업데이트, 보안 패치 및 최신 PHP 프레임워크와의 호환성을 보장합니다.실제 프로젝트에 필요한 PHP 필수 확장: 대부분의 프로덕션급 PHP 애플리케이션은
mysql,curl,xml,mbstring,zip,gd,bcmath와 같은 확장에 의존합니다. 이를 미리 설치하면 나중에 발생할 수 있는 런타임 오류를 방지하고 Laravel, Symfony, WordPress와 같은 프레임워크와의 호환성을 보장할 수 있습니다.PHP 개발을 위한 Apache 또는 Nginx 선택: Apache는
mod_php를 사용하여 PHP를 직접 실행할 수 있는 반면, Nginx는 요청 처리를 위해 PHP‑FPM이 필요합니다. 두 접근 방식 모두 로컬 개발에서는 잘 작동하지만, PHP‑FPM은 현대의 프로덕션 환경을 더 잘 반영하며 부하가 있을 때 더 잘 확장됩니다.현대 PHP 워크플로의 기반으로서의 Composer: Composer는
composer.json과composer.lock을 통해 프로젝트 의존성을 관리하여 여러 환경에서 일관된 빌드를 보장합니다. 프레임워크 설치, 자동 로더 생성, 협업 PHP 프로젝트에서 안정적인 의존성 버전 유지를 위해 필수적입니다.개발용으로 PHP 구성하기: 개발 환경에서는 자세한 오류 보고, 더 높은 메모리 한도, 긴 실행 시간이 유용합니다.
php.ini에서 이러한 설정을 조정하면 개발 중에 버그를 빠르게 발견할 수 있지만, 프로덕션 배포 시에는 반드시 원래대로 되돌려야 합니다.문제 해결 및 검증은 설정 과정의 일부입니다:
php -v로 PHP를 확인하고, 로드된 확장 기능을 점검하며, Apache, Nginx 또는 PHP‑FPM 로그를 검토하는 것이 중요한 단계입니다. 대부분의 설정 문제는 누락된 확장 기능, 권한 문제 또는 잘못 구성된 웹 서버 지시문에서 발생합니다.
전제 조건
이 튜토리얼을 완료하려면 다음이 필요합니다:
- 로컬 컴퓨터 또는 Ubuntu를 실행하는 가상 서버(Ubuntu 22.04 LTS 및 이후 버전과 호환)
- 머신에 대한 관리(슈퍼유저) 권한
- 활성 인터넷 연결
- 명령어 줄에 대한 기본적인 친숙함
새로운 우분투 서버를 설정하고 있다면, 우분투 초기 서버 설정 가이드를 참고하세요.
1단계 — PHP 8.1 설정
설치 및 설정을 명령어 라인에서 완료하게 되며, 이는 컴퓨터와 상호작용하는 비그래픽 방식입니다. 즉, 버튼을 클릭하는 대신 텍스트를 입력하고 컴퓨터로부터 텍스트를 통해 피드백을 받게 됩니다.
명령줄은 셸이나 터미널이라고도 하며, 컴퓨터에서 매일 수행하는 많은 작업을 수정하고 자동화하는 데 도움을 줄 수 있으며 소프트웨어 개발자에게 필수 도구입니다. 더 강력한 작업을 수행할 수 있게 해주는 많은 터미널 명령어를 배울 수 있습니다. '리눅스 터미널 입문'이라는 기사는 터미널에 더 잘 익숙해지도록 도와줄 수 있습니다.
참고: Ubuntu를 처음 사용하는 경우 추가 시스템 관리 지침을 위해 저희 Ubuntu 문서를 검토해 보세요.
우분투에서는 화면 좌측 상단의 우분투 아이콘을 클릭하고 검색창에 terminal을 입력하면 터미널 애플리케이션을 찾을 수 있습니다. 터미널 애플리케이션 아이콘을 클릭하여 열 수 있습니다. 또는 키보드에서 CTRL, ALT, T 키를 동시에 눌러 터미널 애플리케이션을 자동으로 열 수도 있습니다.
참고: Ubuntu 22.04 LTS에서는 기본 저장소에서 PHP 8.1을 사용할 수 있습니다. Ubuntu 22.04에서 버전을 지정하지 않고 PHP를 설치하면 시스템은 기본적으로 PHP 8.1을 설치합니다.
여러 PHP 버전을 관리하거나 다른 버전을 설치해야 하는 경우, 버전 관리를 위해 phpenv 또는 phpbrew를 사용하는 것을 고려하세요.
다음 명령어를 실행하여 사용 가능한 패키지 목록을 업데이트한 후, PHP 8.1을 설치하세요:
sudo apt updatesudo apt install --no-install-recommends php8.1--no-install-recommends 플래그는 Apache 웹 서버와 같은 다른 패키지가 설치되지 않도록 보장합니다.
다음 명령어로 PHP 버전 정보를 확인하세요:
php -v다음과 같은 결과를 받게 될 것입니다:
PHP 8.1.2-1ubuntu2.22 (cli) (built: Jul 15 2025 12:11:22) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
with Zend OPcache v8.1.2-1ubuntu2.22, Copyright (c), by Zend Technologies
이 설정은 공식 Ubuntu 저장소의 PHP 8.1 패키지를 사용하여 Ubuntu 22.04 LTS에서 테스트되었습니다.
웹 개발을 위한 필수 PHP 확장 기능 설치:
sudo apt install -y php8.1-cli php8.1-common php8.1-mysql php8.1-zip php8.1-gd php8.1-mbstring php8.1-curl php8.1-xml php8.1-bcmath이 명령은 다음 모듈을 설치합니다:
php8.1-cli- 명령어 인터프리터로, 쉘에서 PHP 스크립트를 테스트하거나 일반적인 쉘 스크립팅 작업을 수행할 때 유용합니다php8.1-common- PHP를 위한 문서, 예제 및 공통 모듈php8.1-mysql- MySQL 데이터베이스 작업용php8.1-zip- 압축 파일을 다루기 위해 사용php8.1-gd- 이미지 작업용php8.1-mbstring- 비ASCII 문자열을 관리하는 데 사용php8.1-curl- PHP에서 HTTP 요청을 할 수 있게 해줍니다php8.1-xml- XML 데이터를 다루기 위해php8.1-bcmath- 정밀 부동 소수점 계산을 할 때 사용
PHP 구성 파일은 /etc/php/8.1/에 저장됩니다. 주요 구성 파일은 php.ini이며, 설정에 따라 다른 디렉터리에 위치할 수 있습니다:
- CLI 구성:
/etc/php/8.1/cli/php.ini - 아파치 설정:
/etc/php/8.1/apache2/php.ini(아파치가 설치된 경우) - PHP-FPM 구성:
/etc/php/8.1/fpm/php.ini(PHP-FPM이 설치된 경우)
설치된 확장 기능 확인:
php -m이 목록은 로드된 모든 PHP 모듈을 보여줍니다. 만약 php -v가 예상과 다른 버전을 보여준다면, 여러 PHP 버전이 설치되어 있을 수 있습니다. php8.1 -v를 사용하여 PHP 8.1을 확인하세요.
PHP를 설치하고 실행 중인 버전을 확인했습니다. 또한 필요한 PHP 모듈을 설치하고 로드된 모듈을 나열할 수 있었습니다.
2단계 — Apache와 함께 PHP 구성하기
Apache PHP 모듈을 설치하세요:
sudo apt install libapache2-mod-php8.1모듈을 활성화하고 Apache를 재시작하세요:
sudo a2enmod php8.1
sudo systemctl restart apache2mod_php 이해하기: mod_php 모듈은 PHP를 아파치 프로세스에 직접 내장합니다. 아파치가 PHP 파일에 대한 요청을 받을 때, 내장된 PHP 인터프리터를 사용하여 내부적으로 처리합니다. 이는 별도의 PHP-FPM 서비스를 필요로 하는 Nginx와는 다릅니다. a2enmod 명령은 모듈을 활성화하기 위해 /etc/apache2/mods-enabled/에 심볼릭 링크를 생성합니다.
Apache가 PHP를 올바르게 처리하고 있는지 확인하려면 Apache의 문서 루트(일반적으로 /var/www/html)에 테스트 파일을 만들어보세요:
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php브라우저에서 http://localhost/info.php를 방문하세요. PHP의 구성 정보 페이지가 표시될 것입니다. 테스트 후 보안을 위해 이 파일을 삭제하세요:
sudo rm /var/www/html/info.php아파치 PHP 문제 해결
mod_php 설치 후 Apache가 시작되지 않는 경우:
Apache 오류 로그를 확인하세요:
sudo tail -20 /var/log/apache2/error.log일반적인 문제에는 다음이 포함됩니다:
- 충돌하는 PHP 모듈: 여러 PHP 버전을 사용하는 경우, 먼저 다른 PHP 모듈을
sudo a2dismod php7.4(있다면) 명령어로 비활성화하세요. - Apache 설정의 구문 오류: 확인하려면
sudo apache2ctl configtest를 실행하세요
로컬호스트를 방문했을 때 “It works!”가 보이지만 PHP 파일이 일반 텍스트로 표시된다면:
즉, Apache가 PHP를 처리하지 않고 있다는 뜻입니다. 확인하세요:
- 모듈이 활성화되어 있는지 확인하세요:
apache2ctl -M | grep php- 아무 것도 나타나지 않으면 모듈이 로드되지 않은 것입니다. 다시 활성화하세요:
sudo a2enmod php8.1
sudo systemctl restart apache2- PHP 파일에 올바른 확장자(
.php)가 있고 PHP 코드가 포함되어 있는지 확인하세요
403 금지 오류가 발생하면:
파일 권한 확인:
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html보안 주의: phpinfo() 함수는 상세한 시스템 정보를 노출합니다. phpinfo()를 포함한 파일을 운영 서버에 두지 마세요.
아파치 가상 호스트 설정
사용자 지정 도메인으로 로컬 개발을 하려면 가상 호스트를 생성하세요:
sudo nano /etc/apache2/sites-available/example.local.conf이 구성을 추가하세요:
<VirtualHost *:80>
ServerName example.local
DocumentRoot /var/www/example.local
<Directory /var/www/example.local>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>ServerName: 이 가상 호스트의 도메인 이름DocumentRoot: PHP 파일이 위치한 곳AllowOverride All:.htaccess파일이 Apache 설정을 덮어쓸 수 있도록 허용합니다 (Laravel과 같은 프레임워크에 필요합니다)- `
Require all granted`: 디렉토리에 대한 접근 허용
디렉토리를 만들고, 사이트를 활성화한 후 Apache를 재시작하세요:
sudo mkdir -p /var/www/example.local
sudo chown -R www-data:www-data /var/www/example.local
sudo a2ensite example.local.conf
sudo systemctl restart apache2로컬 액세스를 위해 /etc/hosts 파일에 도메인을 추가하세요:
echo "127.0.0.1 example.local" | sudo tee -a /etc/hostsApache와 Nginx 중에서 선택하기
웹 서버를 구성하기 전에, 어떤 것이 필요에 맞는지 고려하세요:
| 기능 | mod_php가 설치된 아파치 | PHP-FPM과 함께 사용하는 Nginx |
|---|---|---|
| PHP 처리 | 아파치 프로세스에 포함됨 | 별도의 PHP-FPM 서비스 |
| 메모리 사용량 | 더 높음 (각 Apache 프로세스의 PHP) | 낮음 (별도 프로세스 풀) |
| 성능 | 낮음에서 중간 수준의 트래픽에 적합 | 트래픽이 많고 동시 요청이 많은 경우에 더 적합 |
| 설정 | 더 간단한 초기 설정 | 더 복잡함(Php-FPM 설정 필요) |
| .htaccess 지원 | 네이티브 지원 | 지원되지 않음(서버 블록에서 구성해야 함) |
| 상용 사용 | 공유 호스팅에서 흔함 | 현대 배치에서 흔함 |
| 학습 곡선 | 초보자에게 더 쉬움 | 학습 곡선이 가파름 |
| 자원 효율성 | 높은 부하에서는 효율이 떨어짐 | 높은 부하에서도 더 효율적 |
Apache를 선택할 때:
- 아파치에 익숙하거나
.htaccess지원이 필요하신가요 - 간단한 개발 환경 설정
.htaccess에 많이 의존하는 프레임워크(일부 워드프레스 설정) 사용- 당신은 초기 설정을 더 간단하게 선호합니다
Nginx를 선택해야 할 때:
- 높은 부하에서 더 나은 성능이 필요합니다
- 현대의 생산 환경을 그대로 반영하고 싶습니다
- 당신은 확장 가능한 애플리케이션을 개발하고 있습니다
- 당신은 더 현대적인 건축 양식을 선호합니다
두 방법 모두 로컬 개발에는 동일하게 잘 작동합니다. 선택은 종종 개인 취향이나 기존 인프라에 따라 달라집니다.
3단계 — Nginx와 함께 PHP 구성
PHP-FPM(패스트CGI 프로세스 관리자) 설치:
sudo apt install php8.1-fpmPHP-FPM 시작 및 활성화:
sudo systemctl start php8.1-fpm
sudo systemctl enable php8.1-fpmPHP-FPM과 FastCGI 이해하기: Apache의 mod_php와 달리 Nginx는 PHP를 직접 처리하지 않습니다. PHP-FPM(FastCGI Process Manager)은 별도의 서비스로 실행되며, Nginx는 FastCGI 프로토콜을 사용하여 PHP-FPM과 통신합니다. FastCGI는 웹 서버와 프로그램을 연결하는 이진 프로토콜로, 요청 간 프로세스를 계속 유지하기 때문에 전통적인 CGI보다 빠릅니다.
Nginx가 PHP 파일에 대한 요청을 받으면, 이를 Unix 소켓(또는 TCP 연결)을 통해 PHP-FPM으로 전달합니다. PHP-FPM은 PHP 코드를 처리한 후 결과를 Nginx에 반환하고, Nginx는 이를 클라이언트에 전달합니다. 이러한 분리 구조 덕분에 PHP-FPM은 자체 프로세스 풀을 관리할 수 있어 성능과 자원 관리가 향상됩니다.
Nginx 서버 블록 설정
서버 블록 구성을 생성하세요:
sudo nano /etc/nginx/sites-available/example.local이 구성을 추가하세요:
server {
listen 80;
server_name example.local;
root /var/www/example.local;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}설정 설명:
root: PHP 파일이 위치한 디렉토리location ~ \.php$: 정규식을 사용하여.php로 끝나는 모든 요청과 일치합니다include snippets/fastcgi-php.conf: Nginx의 기본 FastCGI 설정을 포함합니다 (SCRIPT_FILENAME및 기타 필요한 변수를 설정함)fastcgi_pass unix:/var/run/php/php8.1-fpm.sock: PHP-FPM이 수신하는 Unix 소켓입니다. 이것이 Nginx가 PHP-FPM과 통신하는 방식입니다. 소켓 경로는/etc/php/8.1/fpm/pool.d/www.conf파일에서 정의됩니다.
사이트를 활성화하고 구성을 테스트하세요:
sudo mkdir -p /var/www/example.local
sudo chown -R www-data:www-data /var/www/example.local
sudo ln -s /etc/nginx/sites-available/example.local /etc/nginx/sites-enabled/
sudo nginx -t테스트가 통과하면 Nginx를 재시작하세요:
sudo systemctl restart nginx/etc/hosts에 도메인을 추가하세요:
echo "127.0.0.1 example.local" | sudo tee -a /etc/hosts테스트 PHP 파일을 생성하세요:
echo "<?php phpinfo(); ?>" | sudo tee /var/www/example.local/info.php다음 주소를 방문하세요: http://example.local/info.php. PHP 구성 페이지가 표시될 것입니다. 확인 후 테스트 파일을 삭제하세요:
sudo rm /var/www/example.local/info.phpNginx PHP 문제 해결
만약 “502 잘못된 게이트웨이” 오류가 발생하면:
이것은 Nginx가 PHP-FPM과 통신할 수 없다는 것을 의미합니다. 다음을 확인하세요:
- PHP-FPM이 실행 중인지 확인:
sudo systemctl status php8.1-fpm- 소켓 경로가 올바른지 확인하세요. 소켓 위치는
/etc/php/8.1/fpm/pool.d/www.conf에 정의되어 있습니다:
grep listen /etc/php/8.1/fpm/pool.d/www.conf다음과 같이 listen=/run/php/php8.1-fpm.sock가 보여야 합니다. Nginx 설정에서 경로가 정확히 일치해야 합니다. /var/run가 종종 /run의 심볼릭 링크라는 점을 참고하세요. 따라서 두 경로 모두 사용할 수 있습니다.
- 소켓 파일 권한 확인:
ls -la /var/run/php/php8.1-fpm.sock소켓은 www-data 또는 Nginx가 실행되는 사용자가 소유해야 합니다. 권한이 잘못된 경우:
sudo chown www-data:www-data /var/run/php/php8.1-fpm.sock- Nginx 오류 로그 확인:
sudo tail -20 /var/log/nginx/error.log다음과 같은 오류가 나타날 수 있습니다:
connect() to unix:/var/run/php/php8.1-fpm.sock failed (2: No such file or directory)이것은 소켓 경로가 잘못되었거나 PHP-FPM이 실행되고 있지 않음을 나타냅니다.
PHP 파일이 실행되지 않고 다운로드될 경우:
이는 Nginx가 PHP 파일을 PHP-FPM으로 전달하지 않고 있다는 것을 의미합니다. 확인하세요:
- 서버 설정에
location ~ \.php$블록이 존재합니다 fastcgi_pass지시자는 올바른 소켓을 가리킵니다- 변경 사항을 적용한 후 Nginx를 재시작했습니다
“파일을 찾을 수 없음” 오류가 발생하면:
snippets/fastcgi-php.conf 파일이 있는지 확인하세요:
ls -la /etc/nginx/snippets/fastcgi-php.conf이 파일은 SCRIPT_FILENAME을 설정하여 PHP-FPM에 실행할 파일을 알려줍니다. 이것이 없으면 PHP-FPM은 처리할 파일을 알 수 없습니다.
4단계 — 개발을 위한 PHP 구성
php.ini에서 오류 보고, 디스플레이 설정, 메모리 제한을 조정하여 개발용 PHP를 구성하세요. 이러한 설정은 운영 환경 구성과 다릅니다.
PHP는 CLI(명령어 인터페이스)와 웹 서버 사용을 위해 별도의 설정 파일을 사용합니다. 적절한 파일을 편집하세요:
CLI용 (터미널에서 PHP 실행 시):
sudo nano /etc/php/8.1/cli/php.ini웹 서버용(Apache 또는 PHP-FPM이 포함된 Nginx):
# For Apache
sudo nano /etc/php/8.1/apache2/php.ini
# For PHP-FPM (Nginx)
sudo nano /etc/php/8.1/fpm/php.ini참고: CLI와 웹 서버를 모두 사용하는 경우, 두 파일을 각각 따로 설정해야 합니다. cli/php.ini의 변경 사항은 웹 요청에 영향을 주지 않으며, apache2/php.ini나 fpm/php.ini의 변경 사항은 CLI 스크립트에 영향을 주지 않습니다.
필수 개발 설정
다음 설정을 php.ini 파일에서 찾아 업데이트하세요:
display_errors = On
display_startup_errors = On
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php_errors.log
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
date.timezone = America/New_York각 설정의 기능:
display_errors=On: PHP 오류를 브라우저에서 직접 표시합니다 (디버깅에 유용하지만, 운영 환경에서는 위험합니다)display_startup_errors=On: PHP 시작 시 발생하는 오류를 보여줍니다error_reporting=E_ALL: 모든 유형의 오류(경고, 알림 등)를 보고합니다log_errors=On: 오류를 로그 파일에 기록합니다error_log: PHP가 오류 로그를 기록하는 위치memory_limit=256M: 스크립트가 사용할 수 있는 최대 메모리 ("메모리 부족" 오류가 발생하면 증가시킵니다)upload_max_filesize=64M: 업로드 가능한 파일의 최대 크기post_max_size=64M: POST 데이터의 최대 크기 (upload_max_filesize보다 커야 함)max_execution_time=300: 스크립트가 실행될 수 있는 최대 시간(초 단위)date.timezone: 기본 시간대를 설정합니다(로컬 시간대 사용:Asia/Kolkata,Europe/London,UTC등)
프로덕션 경고: 이러한 개발 설정을 프로덕션 환경에서 절대 사용하지 마세요. 항상 display_errors=Off로 설정하고, 운영 서버에서는 적절한 오류 보고 수준을 사용하세요.
변경 사항을 적용한 후 웹 서버를 재시작하세요:
# For Apache
sudo systemctl restart apache2
# For PHP-FPM
sudo systemctl restart php8.1-fpm구성 확인 중
변경 사항이 적용되었는지 확인하세요:
# For CLI
php -i | grep display_errors
# For web server (create a test file)
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/test.php브라우저에서 테스트 파일을 열고 display_errors를 검색하세요. On으로 표시되어야 합니다. 확인 후 테스트 파일은 삭제하세요.
변경 사항이 나타나지 않으면:
- 올바른
php.ini파일(CLI와 웹 서버 중)을 편집했는지 확인하세요 - 설정 이름의 오타를 확인하세요(대소문자를 구분합니다)
- 변경 후 웹 서버를 재시작하세요
- 일부 설정은 프로젝트 디렉터리의
.htaccess(Apache) 또는php.ini에서 재정의할 수 있습니다
지금 바로 PHP를 사용하기 시작할 수 있지만, PHP 애플리케이션을 빠르게 개발하려면 다양한 라이브러리를 사용하고 싶을 것입니다. PHP 환경을 테스트하기 전에 먼저 프로젝트에 대한 의존성 관리자를 설정하세요.
5단계 — 의존성 관리를 위한 Composer 설정(선택 사항)
라이브러리는 모든 것을 직접 작성할 필요 없이 일반적인 문제를 해결하는 데 도움을 줄 수 있는 코드 모음입니다. 사용 가능한 라이브러리가 많기 때문에, 의존성 관리자를 사용하면 PHP를 작성하는 데 경험이 쌓일수록 여러 라이브러리를 효과적으로 관리할 수 있습니다.
Composer는 PHP에서 의존성 관리를 위한 도구입니다. 이 도구를 사용하면 프로젝트가 의존하는 라이브러리를 선언할 수 있으며, 이러한 패키지의 설치와 업데이트를 관리할 수 있습니다.
비슷하지만, Composer는 yum이나 apt와 같은 의미에서 패키지 관리자는 아닙니다. Composer는 '패키지' 또는 라이브러리를 다루지만, 프로젝트별로 관리하며 프로젝트 내부의 디렉토리(예: vendor)에 설치합니다. 기본적으로 전역적으로 아무 것도 설치하지 않습니다. 따라서 의존성 관리자라고 할 수 있습니다. 그러나 편의를 위해 global 명령을 통해 전역 프로젝트도 지원합니다.
이 아이디어는 새로운 것이 아니며, Composer는 Node의 npm과 Ruby의 bundler에서 많은 영감을 받았습니다.
가정해 보자:
- 당신은 여러 라이브러리에 의존하는 프로젝트를 가지고 있습니다.
- 그 라이브러리들 중 일부는 다른 라이브러리에 의존합니다.
작곡가:
- 의존하는 라이브러리를 선언할 수 있게 해줍니다.
- 어떤 패키지의 어떤 버전을 설치할 수 있고 설치해야 하는지 확인한 후, 프로젝트에 다운로드하여 설치합니다.
- 한 번의 명령으로 모든 의존성을 업데이트할 수 있습니다.
- 의존성을 선언하는 방법에 대한 자세한 내용은 기본 사용법 장을 확인할 수 있습니다.
컴포저 설치 프로그램을 다운로드하세요:
curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php설치 프로그램의 무결성을 SHA-384 해시로 확인하세요. 최신 해시를 받으세요:
HASH=$(curl -sS https://composer.github.io/installer.sig)해시가 일치하는지 확인하세요:
php -r "if (hash_file('SHA384', '/tmp/composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('/tmp/composer-setup.php'); } echo PHP_EOL;"당신은 봐야 합니다:
Installer verified만약 Installer corrupt가 보이면, 다운로드가 불완전했거나 손상된 것입니다. 설치 파일을 다시 다운로드하고 해시 값을 확인하세요. 그래도 문제가 해결되지 않으면 인터넷 연결을 확인하거나 다른 네트워크에서 다운로드해보세요.
Composer를 전역으로 설치:
sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer다음과 유사한 출력이 표시됩니다:
All settings correct for using Composer
Downloading...
Composer (version 2.3.5) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer설치를 테스트하세요:
composer다음과 같은 출력 결과를 받게 됩니다:
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 2.3.5 2022-04-13 16:43:00
Usage:
command [options] [arguments]
Options:
-h, --help Display help for the given command. When no command is given display help for the list command
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi|--no-ansi Force (or disable --no-ansi) ANSI output
-n, --no-interaction Do not ask any interactive question
--profile Display timing and memory usage information
--no-plugins Whether to disable plugins.
--no-scripts Skips the execution of all scripts defined in composer.json file.
-d, --working-dir=WORKING-DIR If specified, use the given directory as working directory.
--no-cache Prevent use of the cache
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
. . .이 메시지는 Composer가 시스템에 성공적으로 설치되었고 시스템 전체에서 사용할 수 있음을 확인합니다.
참고: 서버에서 호스팅하는 각 프로젝트마다 별도의 Composer 실행 파일을 사용하고 싶다면, 프로젝트별로 로컬에 설치할 수 있습니다. 이 방법은 시스템 사용자가 시스템 전체에 소프트웨어를 설치할 권한이 없을 때도 유용합니다.
이를 위해서는 인수를 사용하지 않고 php /tmp/composer-setup.php 명령어를 사용하세요. 이 명령어는 현재 디렉토리에 composer.phar 파일을 생성하며, php composer.phar를 사용하여 실행할 수 있습니다.
6단계 — PHP 프로젝트에서 Composer 사용하기
마지막 단계로, 선택적으로 composer init을 사용하여 프로젝트를 초기화할 수 있습니다. 이렇게 하면 프로젝트 의존성을 관리할 composer.json 파일이 생성됩니다. 프로젝트를 초기화하면 작성자(Author) 및 라이선스(License)와 같은 프로젝트 세부 정보를 정의하고 Composer의 자동 로드 기능을 사용할 수 있습니다. 의존성은 지금 정의하거나 나중에 추가할 수 있습니다.
프로젝트 디렉토리를 만들고 Composer를 초기화하세요:
cd ~
mkdir example-project
cd example-project
composer init이 명령을 실행하면 설치 마법사가 시작됩니다. 마법사에서 입력한 세부 정보는 나중에 업데이트할 수 있으므로 기본값을 그대로 두고 ENTER를 눌러도 됩니다. 아직 종속 항목을 설치할 준비가 되지 않았다면 no를 선택할 수 있습니다. 각 프롬프트에서 세부 정보를 입력하세요:
Welcome to the Composer config generator
This command will guide you through creating your composer.json config.
Package name (<vendor>/<name>) [sammy/example-project]: sammy/project1
Description []:
Author [n to skip]: Sammy <sammy@linux-console.net>
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []: project
License []:
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]? no
Would you like to define your dev dependencies (require-dev) interactively [yes]? no
Add PSR-4 autoload mapping? Maps namespace "Sammy\Project1" to the entered relative path. [src/, n to skip]: n
{
"name": "sammy/project1",
"type": "project",
"authors": [
{
"name": "Sammy",
"email": "sammy@linux-console.net"
}
],
"require": {}
}
Do you confirm generation [yes]? yes생성을 확인하기 전에, 마법사가 생성할 composer.json 파일의 샘플을 보게 됩니다. 모두 괜찮아 보이면 기본값인 yes를 확인할 수 있습니다. 다시 시작해야 하는 경우 no를 선택하세요.
의존성을 처음 정의하면, Composer는 vendor 폴더를 생성합니다. 모든 의존성은 이 vendor 폴더에 설치됩니다. Composer는 또한 composer.lock 파일을 생성합니다. 이 파일은 프로젝트에서 사용되는 각 의존성과 하위 의존성의 정확한 버전을 명시합니다. 이를 통해 프로그램을 실행하는 어떤 기기에서도 각 패키지의 동일한 버전을 사용하게 보장됩니다.
참고: vendor 폴더는 절대로 버전 관리 시스템(VCS)에 커밋해서는 안 됩니다. vendor 폴더에는 다른 공급업체에서 설치한 패키지만 포함되어 있습니다. 각 개별 공급업체는 자신의 코드가 있는 버전 관리 시스템을 관리합니다. 당신은 오직 자신이 작성한 코드만 추적해야 합니다. vendor 폴더를 커밋하는 대신, composer.json과 composer.lock 파일만 커밋하면 됩니다. 특정 파일을 무시하는 방법에 대해서는 'Git 사용법: 참조 가이드'에서 더 알아볼 수 있습니다.
이제 PHP를 설치하고 Composer를 사용하여 프로젝트 의존성을 관리할 수 있는 방법이 준비되었으므로, 환경을 테스트할 준비가 되었습니다.
7단계 — PHP 환경 테스트
설치를 테스트하기 위해 기본 PHP 스크립트를 생성하고 실행하세요:
nano hello.php다음 PHP 코드를 추가하세요:
<?php
echo 'Hello World!';
?>파일을 저장하고 닫습니다 (CTRL+X 눌러, 그 다음 Y, 그 다음 ENTER를 누릅니다). 스크립트를 실행하세요:
php hello.phpPHP가 정상적으로 처리되면 따옴표 안의 문자만 보이게 됩니다:
Hello World!PHP가 스크립트를 성공적으로 처리했습니다. 이는 여러분의 PHP 환경이 정상적으로 설치되었으며 프로그래밍을 계속할 준비가 되었음을 의미합니다.
단계 8 — 실제 PHP 프로젝트 설정하기
Laravel, Symfony, WordPress와 같은 현대적인 PHP 프레임워크는 특정 PHP 확장과 Composer가 필요합니다. Composer 또는 프레임워크의 설치 프로그램을 사용하여 프레임워크를 설치한 후, 웹 서버가 프로젝트의 공개 디렉터리를 가리키도록 설정합니다.
Laravel 설정하기
Composer를 사용하여 Laravel을 설치하세요:
composer create-project laravel/laravel my-laravel-app
cd my-laravel-app이 명령은 Laravel과 모든 종속 항목을 다운로드합니다. 이 과정은 몇 분 정도 걸릴 수 있습니다.
Laravel는 다음 PHP 확장이 필요합니다(1단계에서 설치됨):
php8.1-mbstring- 다중 바이트 문자열 처리php8.1-xml- XML 파싱php8.1-curl- HTTP 요청php8.1-zip- 아카이브 처리php8.1-bcmath- 임의 정밀도 수학
Laravel에서 이미 설치했는데도 “mbstring 누락”이라고 나올 경우:
이는 일반적으로 확장 기능이 설치되어 있으나 로드되지 않았음을 의미합니다. 확인하세요:
- 확장 프로그램이 설치되었는지 확인하세요:
php -m | grep mbstring- 없다면 설치하세요:
sudo apt install php8.1-mbstring- 설치되었지만 표시되지 않는 경우, 웹 서버를 재시작하세요:
# For Apache
sudo systemctl restart apache2
# For PHP-FPM
sudo systemctl restart php8.1-fpm- 어떤
php.ini파일이 사용되고 있는지 확인하세요. Laravel 설치 관리자는 CLI PHP를 사용하므로, 다음을 확인하세요:
php --iniCLI php.ini 파일에서 확장 기능이 활성화되어 있는지 확인하세요.
Laravel 설치 확인:
설치가 완료되면 Laravel 개발 서버를 시작하세요:
php artisan serve당신은 봐야 합니다:
INFO Server running on [http://127.0.0.1:8000]브라우저에서 http://localhost:8000를 방문하세요. Laravel의 환영 페이지가 표시됩니다.
Apache 또는 Nginx를 사용하는 프로덕션 환경과 유사한 설정의 경우:
웹 서버를 public 디렉토리(프로젝트 루트가 아님)로 지정하도록 설정하세요. Laravel의 public/index.php가 모든 요청의 진입점입니다.
참고: 우분투에 라라벨을 설치하는 방법에 대한 튜토리얼에서 라라벨에 대해 더 알아보세요.
워드프레스 설정하기
워드프레스 다운로드 및 추출:
cd /var/www
sudo wget https://wordpress.org/latest.tar.gz
sudo tar -xzf latest.tar.gz
sudo chown -R www-data:www-data /var/www/wordpressWordPress는 MySQL 또는 MariaDB 데이터베이스가 필요합니다. 필요하다면 MySQL을 설치하세요:
sudo apt install mysql-server
sudo mysql_secure_installationmysql_secure_installation 스크립트가 다음을 요청할 것입니다:
- 루트 비밀번호 설정
- 익명 사용자 제거
- 원격에서 루트 로그인 금지
- 테스트 데이터베이스 삭제
- 권한 테이블 다시 로드
WordPress용 데이터베이스와 사용자 생성:
sudo mysql -u root -pMySQL 프롬프트에서:
CREATE DATABASE wordpress_db;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;secure_password를 강력한 비밀번호로 바꾸세요. WordPress는 이 자격 증명을 사용하여 데이터베이스에 연결합니다.
WordPress가 데이터베이스에 연결할 수 없는 경우:
- MySQL이 실행 중인지 확인:
sudo systemctl status mysql- 데이터베이스 연결 테스트:
mysql -u wpuser -p wordpress_db이것이 실패하면, 확인하세요:
- 사용자 이름과 비밀번호가 정확합니다
- 데이터베이스가 존재합니다:
SHOW DATABASES; - 사용자는 다음 권한을 가지고 있습니다:
SHOW GRANTS FOR 'wpuser'@'localhost';
- PHP의 MySQL 확장 기능이 설치되어 있는지 확인하세요:
php -m | grep mysql없다면 설치하세요:
sudo apt install php8.1-mysql
sudo systemctl restart apache2 # or php8.1-fpm for Nginx워드프레스 설치 완료:
웹 서버가 /var/www/wordpress를 가리키도록 구성하세요(Apache는 2단계, Nginx는 3단계를 참조). 브라우저에서 사이트를 방문하면 WordPress에서 다음을 안내합니다:
- 언어를 선택하세요
- 데이터베이스 자격 증명을 입력하세요(생성한 데이터베이스, 사용자 이름 및 비밀번호 사용)
- 설치를 완료하세요
참고: 자세한 WordPress 설치 방법은 Ubuntu에서 LAMP로 WordPress 설치하는 방법을 참조하세요.
Symfony 설정하기
Composer를 사용하여 Symfony를 설치하세요:
composer create-project symfony/website-skeleton my-symfony-app
cd my-symfony-appSymfony는 Laravel과 동일한 확장 기능을 요구합니다. 개발 서버를 시작하세요:
symfony server:start또는 PHP 내장 서버를 사용할 수 있습니다:
php -S localhost:8000 -t publicSymfony 설치가 확장 오류로 실패하는 경우:
필요한 모든 확장 기능이 설치되고 로드되었는지 확인하세요:
php -m | grep -E 'mbstring|xml|curl|zip|bcmath'누락된 항목이 있으면 설치한 후 웹 서버를 다시 시작하세요.
9단계 — 로컬 개발을 위한 모범 사례
로컬 환경을 안전하게 유지하고, 버전 관리를 사용하며, 적절한 파일 권한을 설정하고, 환경별 구성을 설정하세요. 이러한 방법은 보안 문제를 예방하고 개발을 더욱 원활하게 합니다.
보안 고려 사항
로컬 개발에서도 보안 모범 사례를 따르세요:
운영 환경에서 위험한 PHP 함수 비활성화:
exec(),system(),shell_exec()와 같은 함수는 운영 환경의php.ini파일에서 제한해야 합니다.환경 변수 사용: 민감한 설정은
.env파일에 저장하세요(절대 버전 관리에 커밋하지 마세요). Laravel과 Symfony는 이를 기본적으로 지원합니다.적절한 파일 권한 설정: 웹 서버 파일은 웹 서버 사용자가 읽을 수 있어야 하지만, 쓰기는 불가능해야 합니다:
sudo chown -R www-data:www-data /var/www/your-project
sudo find /var/www/your-project -type d -exec chmod 755 {} \;
sudo find /var/www/your-project -type f -exec chmod 644 {} \;이 권한이 중요한 이유: 디렉터리는 웹 서버가 접근할 수 있도록 755(소유자는 읽기, 쓰기, 실행 가능; 다른 사용자는 읽기 및 실행 가능) 권한이 필요합니다. 파일은 웹 서버가 읽을 수는 있지만 수정할 수 없도록 644(소유자는 읽기 및 쓰기 가능; 다른 사용자는 읽기 전용) 권한이 필요합니다. 이는 악성 스크립트가 파일을 덮어쓰는 것을 방지합니다.
버전 관리 통합
PHP 프로젝트에는 항상 버전 관리를 사용하세요. 프로젝트 디렉토리에서 Git을 초기화합니다:
cd /var/www/your-project
git init불필요한 파일을 제외하기 위해 .gitignore 파일을 생성하세요:
/vendor/
/node_modules/
.env
.DS_Store
*.log성능 최적화
로컬 개발에서 더 나은 성능을 위해:
OPcache 활성화: OPcache는 PHP 8.1에 포함되어 있으며, 컴파일된 PHP 코드를 캐싱하여 성능을 향상시킵니다.
Composer의 자동 로더 최적화 사용:
composer install --optimize-autoloader --no-dev- Nginx 사용 시 리소스 관리를 위해 PHP-FPM 풀을 구성하십시오.
단계 10 — 흔한 문제 해결
일반적인 PHP 설치 문제에는 누락된 확장, 잘못된 파일 권한, 웹 서버 구성 오류, 버전 충돌 등이 포함됩니다. 대부분의 문제는 확장 설치 확인, 파일 권한 검증, 웹 서버 로그 검토를 통해 해결할 수 있습니다.
PHP 확장 기능이 로드되지 않음
만약 php -m 명령어가 방금 설치한 확장 기능을 보여주지 않는다면:
- 실제로 설치되었는지 확인하세요:
dpkg -l | grep php8.1-extension_name- 확장자 파일이 존재하는지 확인하세요:
ls /usr/lib/php/*/extension_name.sophp.ini에서 활성화되어 있는지 확인하세요. 일부 확장 기능은 명시적으로 활성화해야 합니다:
grep -i extension_name /etc/php/8.1/*/php.ini- 웹 서버를 재시작하세요:
# For Apache
sudo systemctl restart apache2
# For PHP-FPM
sudo systemctl restart php8.1-fpm- 사용 중인
php.ini파일을 확인하세요:
php --ini올바른 php.ini 파일(CLI와 웹 서버)을 확인하고 있는지 확인하세요.
확장 기능이 여전히 나타나지 않는 경우:
- 일부 확장 기능은 추가 시스템 라이브러리가 필요할 수 있습니다. 확장 기능의 문서를 확인하세요.
- 올바른 버전(php8.1-extension, php8.0-extension 아님)을 설치했는지 확인하세요
- 충돌을 일으킬 수 있는 PHP 버전이 있는지 확인하세요
500 내부 서버 오류
500 오류는 서버에서 문제가 발생했지만 세부 정보를 표시할 수 없음을 의미합니다. 오류 로그를 확인하세요:
# Apache
sudo tail -20 /var/log/apache2/error.log
# Nginx
sudo tail -20 /var/log/nginx/error.log
# PHP-FPM
sudo tail -20 /var/log/php8.1-fpm.log일반적인 원인과 해결 방법:
- 잘못된 파일 권한: PHP 파일은 웹 서버 사용자가 읽을 수 있어야 합니다
sudo chown -R www-data:www-data /var/www/your-project
sudo find /var/www/your-project -type f -exec chmod 644 {} \;
sudo find /var/www/your-project -type d -exec chmod 755 {} \;누락된 PHP 확장: '정의되지 않은 함수 호출'과 같은 메시지가 있는지 오류 로그를 확인하세요. 누락된 확장을 설치하고 웹 서버를 재시작하세요.
PHP 파일의 문법 오류: 오류 로그에 파일과 줄 번호가 표시됩니다. 일반적인 문제:
- 세미콜론 누락
- 닫히지 않은 괄호나 따옴표
- 정의되지 않은 함수나 클래스 사용
웹 서버 구성 오류:
- Apache: 가상 호스트 구성, 모듈 로딩 확인
- Nginx: PHP-FPM 소켓 경로 및 FastCGI 구성 확인
PHP 메모리 한도 초과: “허용된 메모리 크기 초과” 오류가 발생하면
php.ini에서memory_limit을 증가시키세요
PHP 버전 충돌
만약 php -v가 예상과 다른 버전을 보여준다면, 여러 버전의 PHP가 설치되어 있는 것입니다.
설치된 버전을 확인하세요:
dpkg -l | grep php | grep -E 'php[0-9]'올바른 버전을 명확히 사용하세요:
php8.1 -v
php8.1 -m웹 서버를 PHP 8.1로 업데이트하세요:
Apache의 경우, 다른 PHP 모듈을 비활성화하고 PHP 8.1을 활성화하십시오:
sudo a2dismod php7.4 php8.0 # if they exist
sudo a2enmod php8.1
sudo systemctl restart apache2PHP-FPM의 경우, 다른 버전을 중지하고 PHP 8.1을 시작하세요:
sudo systemctl stop php7.4-fpm php8.0-fpm # if they exist
sudo systemctl start php8.1-fpm
sudo systemctl enable php8.1-fpmPHP 8.1을 기본 CLI 버전으로 설정:
sudo update-alternatives --set php /usr/bin/php8.1컴포저 메모리 문제
Composer의 메모리가 부족하면 다음과 같은 오류가 표시됩니다:
Fatal error: Allowed memory size of 134217728 bytes exhausted메모리를 늘려 Composer를 실행하여 문제를 해결하세요:
php -d memory_limit=512M /usr/local/bin/composer install아니면 php.ini에서 PHP의 메모리 한도를 늘리세요:
memory_limit = 512MComposer 설치가 해시 불일치로 실패할 경우:
해시 검증은 다음과 같은 경우 실패할 수 있습니다:
- 설치 프로그램이 다운로드한 이후로 업데이트되었습니다 (최신 해시를 받으려면 다시 다운로드하세요)
- 다운로드가 손상되었습니다 (다시 다운로드해 보세요)
- 파일을 수정하는 프록시 뒤에 있습니다(네트워크 설정을 확인하세요)
데이터베이스 연결 문제
PHP 애플리케이션이 MySQL/MariaDB에 연결할 수 없는 경우 다음과 같은 오류가 발생할 수 있습니다:
SQLSTATE[HY000] [2002] No such file or directory또는
Access denied for user 'username'@'localhost'문제 해결 단계:
- 데이터베이스 서비스가 실행 중인지 확인하십시오:
sudo systemctl status mysql실행되지 않으면 시작하세요:
sudo systemctl start mysql
sudo systemctl enable mysql- PHP의 MySQL 확장 기능이 설치되어 있는지 확인하세요:
php -m | grep mysql없다면 설치하세요:
sudo apt install php8.1-mysql
sudo systemctl restart apache2 # or php8.1-fpm for Nginx- 데이터베이스 자격 증명과 권한을 확인하세요. 연결을 테스트하세요:
mysql -u username -p database_name이것이 실패하면, 확인하세요:
- 사용자 이름과 비밀번호가 정확합니다
- 데이터베이스가 존재합니다:
SHOW DATABASES; - 사용자가 가진 권한:
SHOW GRANTS FOR 'username'@'localhost';
참고: MySQL 설정에 대해서는 'Ubuntu에 MySQL 설치하는 방법'을 참조하세요.
PHP 파일이 실행되지 않고 일반 텍스트로 표시됩니다
PHP 파일이 브라우저에서 일반 텍스트로 표시되는 경우:
파일 확장자 확인:
.txt나.html가 아니라.php여야 합니다PHP가 파일을 처리하는지 확인:
- Apache:
mod_php가 활성화되어 있는지 확인:apache2ctl -M | grep php
- Apache:
- Nginx: PHP-FPM이 실행 중인지 확인하고 소켓 경로가 올바른지 확인하세요
파일 권한 확인: 웹 서버가 파일을 읽을 수 있어야 합니다
파일에 PHP 코드가 포함되어 있는지 확인:
<?php또는<?로 시작하는지 확인하세요웹 서버 구성 확인:
- Apache: 가상 호스트가 올바르게 구성되지 않았을 수 있음
- Nginx:
location ~ \.php$블록이 없거나 잘못되었을 수 있습니다
파일 업로드 문제
파일 업로드에 실패하면 다음과 같은 오류가 표시될 수 있습니다:
The uploaded file exceeds the upload_max_filesize directive다음 php.ini 설정을 확인하세요:
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300중요: post_max_size는 upload_max_filesize보다 커야 합니다. upload_max_filesize=100M로 설정했다면, post_max_size=110M 이상으로 설정하세요.
업로드가 계속 실패할 경우:
- 특정 오류 메시지를 확인하려면 오류 로그를 확인하세요
- 업로드 디렉토리가 존재하고 쓰기 가능한지 확인하세요:
sudo chmod 755 /path/to/upload/directory
sudo chown www-data:www-data /path/to/upload/directory- 디스크 공간 확인:
df -h - 폼에서
enctype="multipart/form-data"를 사용하고 있는지 확인하세요
php.ini 변경 후 웹 서버를 재시작하세요.
자주 묻는 질문
우분투에 PHP 8.1을 어떻게 설치하나요?
Ubuntu의 패키지 관리자를 사용하여 PHP 8.1을 설치합니다: sudo apt update && sudo apt install php8.1. PHP 8.1은 Ubuntu의 기본 저장소에서 제공되므로 추가 패키지 소스가 필요하지 않습니다.
개발에 꼭 필요한 PHP 확장 기능은 무엇인가요?
필수 확장 기능에는 php8.1-cli, php8.1-mysql, php8.1-curl, php8.1-xml, php8.1-mbstring, php8.1-zip, php8.1-gd, php8.1-bcmath가 포함됩니다. 이들은 데이터베이스 연결, HTTP 요청, 문자열 처리, 이미지 처리를 다룹니다.
PHP를 Apache 또는 Nginx와 어떻게 구성하나요?
Apache의 경우 libapache2-mod-php8.1를 설치하고 sudo a2enmod php8.1로 활성화하세요. Nginx의 경우 php8.1-fpm를 설치하고 Nginx가 PHP 요청을 FastCGI를 통해 PHP-FPM 소켓으로 전달하도록 구성하세요.
PHP가 올바르게 설치되었는지 어떻게 확인할 수 있나요?
PHP 버전을 확인하려면 php -v를 실행하세요. <?php phpinfo(); ?>를 포함한 테스트 파일을 만들고 웹 서버를 통해 접속하면 상세한 PHP 설정 정보를 확인할 수 있습니다.
이 설정으로 로컬에서 Laravel이나 WordPress를 실행할 수 있나요?
네. 라라벨은 위에서 언급한 표준 PHP 확장과 Composer가 필요합니다. 워드프레스는 PHP 외에도 MySQL 데이터베이스가 필요합니다. 두 프레임워크 모두 Apache 또는 Nginx 환경에서 작동합니다.
PHP 프로젝트에 Composer를 어떻게 설치하나요?
Composer 설치 프로그램을 다운로드하고 해시를 확인한 후 전역으로 설치하세요: sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer. composer --version으로 확인하세요.
누락된 PHP 확장 기능을 어떻게 해결하나요?
설치된 확장 기능은 php -m으로 확인하세요. 누락된 확장 기능은 sudo apt install php8.1-extension_name로 설치한 후 웹 서버를 재시작하세요.
개발 환경에서 PHP 오류 보고를 어떻게 설정하나요?
php.ini을 편집하고 display_errors=On, error_reporting=E_ALL, log_errors=On으로 설정하세요. 운영 환경에서는 오류 표시를 비활성화하는 것을 잊지 마세요.
PHP를 사용할 때 Apache와 Nginx의 차이점은 무엇인가요?
Apache는 PHP를 직접 처리하기 위해 mod_php를 사용합니다(PHP가 Apache 프로세스에 포함됨). 반면 Nginx는 PHP 요청을 처리하기 위해 PHP-FPM(FastCGI Process Manager)이 필요합니다(PHP가 별도의 서비스로 실행됨). 자세한 비교 표는 위의 'Apache와 Nginx 중 선택하기' 섹션을 참조하세요. 두 방식 모두 잘 작동하므로 성능 요구사항, 익숙함, 기존 인프라를 기반으로 선택하면 됩니다.
같은 시스템에 여러 PHP 버전을 설치할 수 있나요?
네, phpenv나 phpbrew와 같은 도구를 사용할 수 있습니다. 하지만 대부분의 개발 시나리오에서는 하나의 PHP 버전만으로 충분합니다. 여러 PHP 버전에서 애플리케이션을 테스트해야 할 때는 버전 관리 도구를 사용하세요.
결론
이제 Ubuntu에서 Apache와 Nginx 웹 서버 모두를 지원하는 완전히 구성된 PHP 8.1 개발 환경을 갖추게 되었습니다. 설정에는 필수 PHP 확장 기능, 종속성 관리를 위한 Composer, 그리고 로컬 개발을 위한 적절한 구성 등이 포함되어 있습니다.
다음 프로젝트를 시작하기 전에, 구문 강조, 디버깅, IntelliSense 지원을 위해 PHP 확장 기능이 포함된 VS Code와 같은 통합 개발 환경(IDE)을 설정하는 것을 고려하세요.
환경이 준비되면 PHP 개발을 더 탐구할 수 있습니다:
- PHP 문자열 다루기와 함께 PHP 기초 배우기
- PHP에서 웹 API 사용 방법으로 API 빌드하기
- PHP에서 함수 사용 방법의 함수 이해
- Ubuntu에서 PostgreSQL 설치 및 사용 방법으로 데이터베이스 설정하기
프로덕션 배포의 경우, GitHub에서 PHP 애플리케이션을 직접 배포하고 자동 스케일링 및 SSL 인증서를 제공하는 Linux-Console.net 앱 플랫폼 사용을 고려해 보세요.
Linux-Console.net 커뮤니티와 함께 학습해 주셔서 감사합니다.

