Laravel 배포

Jmnote (토론 | 기여)님의 2024년 6월 11일 (화) 02:31 판 (→‎뷰 캐싱)
Deployment
배포

1 소개

Laravel 애플리케이션을 프로덕션에 배포할 준비가 되었을 때, 애플리케이션이 가능한 한 효율적으로 실행되도록 하기 위해 할 수 있는 중요한 작업들이 있습니다. 이 문서에서는 Laravel 애플리케이션이 올바르게 배포되었는지 확인하기 위한 몇 가지 훌륭한 시작점을 다룰 것입니다.

2 서버 요구사항

Laravel 프레임워크는 몇 가지 시스템 요구사항이 있습니다. 웹서버가 다음 최소 PHP 버전 및 확장을 갖추고 있는지 확인해야 합니다:

  • PHP >= 8.2
  • Ctype PHP 확장
  • cURL PHP 확장
  • DOM PHP 확장
  • Fileinfo PHP 확장
  • Filter PHP 확장
  • Hash PHP 확장
  • Mbstring PHP 확장
  • OpenSSL PHP 확장
  • PCRE PHP 확장
  • PDO PHP 확장
  • Session PHP 확장
  • Tokenizer PHP 확장
  • XML PHP 확장

3 서버 설정

3.1 Nginx

다음은 Nginx를 실행 중인 서버에 애플리케이션을 배포할 때 사용할 수 있는 기본 설정 파일입니다. 서버의 설정에 따라 이 파일을 커스터마이징해야 할 가능성이 높습니다. 서버 관리를 지원받고 싶다면 Laravel Forge와 같은 Laravel의 공식 서버 관리 및 배포 서비스를 사용하는 것을 고려해 보십시오.

아래의 설정 파일과 같이 웹서버가 모든 요청을 애플리케이션의 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.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_hide_header X-Powered-By;
    }
 
    location ~ /\.(?!well-known).* {
        deny all;
    }
}

3.2 FrankenPHP

FrankenPHP도 Laravel 애플리케이션을 서빙하는 데 사용할 수 있습니다. FrankenPHP는 Go로 작성된 현대적인 PHP 애플리케이션 서버입니다. FrankenPHP를 사용하여 Laravel PHP 애플리케이션을 서빙하려면 php-server 명령어를 다음과 같이 호출하기만 하면 됩니다:

frankenphp php-server -r public/

FrankenPHP가 지원하는 Laravel Octane 통합, HTTP/3, 최신 압축, 또는 Laravel 애플리케이션을 독립 실행형 바이너리로 패키징하는 기능과 같은 더 강력한 기능을 활용하려면 FrankenPHP의 Laravel 문서를 참조하십시오.

4 최적화

애플리케이션을 프로덕션 환경에 배포할 때는 설정, 이벤트, 라우트, 뷰와 같은 다양한 파일을 캐시해야 합니다. Laravel은 이러한 모든 파일을 캐시할 수 있는 단일하고 편리한 optimize Artisan 명령어를 제공합니다. 이 명령어는 애플리케이션 배포 과정의 일부로 호출하는 것이 일반적입니다:

php artisan optimize

optimize 명령어로 생성된 모든 캐시 파일을 제거하려면 optimize:clear 메소드를 사용할 수 있습니다:

php artisan optimize:clear

아래에서는 optimize 명령어가 실행하는 각 세부 최적화 명령어에 대해 논의할 것입니다.

4.1 캐싱 설정

애플리케이션을 프로덕션 환경에 배포할 때, 배포 프로세스 중에 config:cache Artisan 명령어를 실행해야 합니다:

php artisan config:cache

이 명령어는 Laravel의 모든 설정 파일을 하나의 캐시된 파일로 결합하여, 프레임워크가 설정 값을 로드할 때 파일 시스템에 접근하는 횟수를 크게 줄입니다.

Warning

배포 과정 중에 config:cache 명령어를 실행한다면, 설정 파일 내에서만 env 함수를 호출하고 있는지 확인해야 합니다. 설정이 캐시된 후에는 .env 파일이 로드되지 않으며, .env 변수에 대한 env 함수 호출은 모두 null을 반환하게 됩니다.

4.2 이벤트 캐싱

배포 과정에서 애플리케이션의 자동 발견된 이벤트-리스너 매핑을 캐싱해야 합니다. 이는 배포 중에 event:cache Artisan 명령을 실행하여 수행할 수 있습니다:

php artisan event:cache

4.3 라우트 캐싱

많은 라우트를 포함한 대규모 애플리케이션을 구축하는 경우, 배포 과정에서 route:cache Artisan 명령어를 실행하는지 확인해야 합니다:

php artisan route:cache

4.4 뷰 캐싱

애플리케이션을 프로덕션에 배포할 때, 배포 과정에서 view:cache Artisan 명령어를 실행하는지 확인해야 합니다:

php artisan view:cache

이 명령어는 모든 Blade 뷰를 미리 컴파일하여, 요청 시 뷰가 컴파일되지 않도록 하여 뷰를 반환하는 각 요청의 성능을 향상시킵니다.

5 디버그 모드

6 Health 라우트

7 Forge / Vapor를 사용한 쉬운 배포

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}