배포
시작하기
여러분의 라라벨 애플리케이션이 실제 서비스에 배포할 준비가 되었다면, 가능한 한 효율적으로 애플리케이션이 구동되도록 하기 위해서 할 수 있는 몇가지 중요한 작업이 있습니다. 이 문서에서는 라라벨 애플리케이션이 제대로 배포되었는지 확인하기 위한 시발점에 대해서 설명합니다.
서버 요구 사항
라라벨 프레임워크는 몇 가지 시스템 요구 사항이 있습니다. 웹 서버에 최소 PHP 버전 및 extension이 다음과 같은지 확인해야 합니다.
- PHP >= 8.0
- Ctype PHP Extension
- cURL PHP Extension
- DOM PHP Extension
- Fileinfo PHP Extension
- Filter PHP Extension
- Hash PHP Extension
- Mbstring PHP Extension
- OpenSSL PHP Extension
- PCRE PHP Extension
- PDO PHP Extension
- Session PHP Extension
- Tokenizer PHP Extension
- XML PHP Extension
서버 설정
Nginx
애플리케이션을 Nginx가 동작하는 서버에 배포하는 경우 다음과 같은 설정 파일을 웹서버 설정으로 사용할 수 있습니다. 대부분의 경우 이 파일은 서버 설정에 따라서 사용자가 수정할 필요가 있습니다. 서버 관리에 도움이 필요하다면, 라라벨 Forge와 같은 자사의 라라벨 서버 관리 및 배포 서비스를 사용하는 것이 고려해보세요.
아래 구성과 같이 웹 서버가 모든 요청을 애플리케이션의 public/index.php
파일로 보내는지 확인해보세요. 프로젝트 루트에서 애플리케이션을 제공하면 많은 민감한 설정 파일이 공개 인터넷에 노출되므로 index.php
파일을 프로젝트 루트로 이동하려고 시도해서는 안 됩니다.
server {
listen 80;
listen [::]:80;
server_name example.com;
root /srv/example.com/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
최적화
Autoloader 최적화
실 서버에 배포할 때 컴포저의 클래스 오토로딩 맵을 최적화 하여 컴포저가 주어진 클래스 파일을 빠르게 찾을 수 있도록 하십시오.
composer install --optimize-autoloader --no-dev
Note 오토로더를 최적화 하는데 더하여, 프로젝트의 소스 컨트롤 저장소에
composer.lock
파일을 포함하고 있는지 확인하십시오.composer.lock
파일이 존재한다면 프로젝트의 의존성을 보다 빠르게 설치할 수 있습니다.
설정내역 로딩 최적화
실 서버에 배포할 때에 배포 프로세스에 config:cache
아티즌 명령어를 실행하도록 하십시오.
php artisan config:cache
이 명령어는 라라벨의 전체 설정 파일을 하나로 합쳐서, 캐시 파일을 만들고, 프레임워크가 설정파일을 로딩하기 위해서 여러개의 파일을 읽는 것을 줄여줍니다.
Warning 배포 과정에서
config:cache
명령을 실행하면 설정 파일 내에서env
함수 만 호출해야합니다. 설정이 캐시되면.env
파일이 로드되지 않고.env
의 변수에 대한env
함수의 모든 호출은null
을 반환합니다.
라우트 로딩 최적화
큰 애플리케이션과 같이 많은 라우트를 등록하는 경우에, 배포 프로세스에 route:cache
아티즌 명령어를 실행하도록 하십시오.
php artisan route:cache
이 명령어는 라라벨의 전체 라우트 등록을 하나의 캐시 파일로 만들어 라우트를 등록하는 속도를 줄여줍니다.
뷰 로딩 최적화
실 서버에 배포할 때에, 배포 프로세스에 view:cache
아티즌 명령어를 실행하도록 하십시오.
php artisan view:cache
이 명령은 모든 블레이드 뷰를 사전 컴파일하여 요청시 컴파일하지 않으며, 뷰를 리턴하는 요청들의 성능을 향상시킵니다.
디버그 모드
config/app.php 설정 파일의 디버그 옵션에 따라 사용자에게 실제로 표시되는 오류 정보의 양이 결정됩니다. 기본적으로 이 옵션은 애플리케이션의 .env
파일에 저장된 APP_DEBUG
환경 변수의 값을 고려하도록 설정됩니다.
프로덕션 환경에서 이 값은 항상 false
여야 합니다. 프로덕션에서 APP_DEBUG
변수가 true
로 설정되면 민감한 설정 값이 애플리케이션의 최종 사용자에게 노출될 위험이 있습니다.
Forge / Vapor로 배포하기
Laravel Forge
여러분이 서버 구성을 잘 관리할 준비가 되어 있지 않거나, 라라벨 애플리케이션을 실행하는데 필요한 여러 서비스들을 모두 구성하는게 어렵다면, 라라벨 Forge 가 대안이 될 수 있습니다.
라라벨 Forge 는 DigitalOcean, Linode, AWS 와 같은 다양한 인프라를 제공하는 서비스 위에서 서버를 구성할 수 있습니다. 또한 Forge는 Nginx, MySQL, Redis, Memcached, Beanstalk 와 같은 라라벨 애플리케이션을 구축하는데 필요한 모든 툴들을 설치하고 관리해줍니다.
Note 라라벨 포지로 개발하는 방법에 대한 전체 가이드가 필요한가요? 라라벨 부트캠프와 포지 관련 라라캐스트 비디오 시리즈를 확인해보세요.
Laravel Vapor
라라벨에 맞게 조정 된 완전한 서버리스 자동 확장 배포 플랫폼을 원한다면 라라벨 Vapor을 확인하세요. 라라벨 Vapor은 AWS 기반 라라벨 용 서버리스 배포 플랫폼입니다. Vapor에서 라라벨 인프라를 시작하고 서버리스의 확장 가능한 단순성에 빠져보세요. 라라벨 Vapor은 라라벨의 제작자가 프레임워크와 원활하게 작동하도록 미세 조정하므로 익숙한 방식으로 라라벨 애플리케이션을 계속 작성할 수 있습니다.