August 7, 2020

PHP MVC - Laravel 기본 설정

PHP MVC 패턴 - 기본 설정 이번에는 Laravel 설치 이후 기본 셋팅에 대해 알아보도록 하겠습니다. 라라벨이 설치된 디렉터리 목록은 아래와 같습니다.

Title: PHP Laravel - Docker 기본설정
Author: DongDongE
Tags: Programming
Release: 2020.08.07


PHP MVC 패턴 - 기본 설정

이번에는 Laravel 설치 이후 기본 셋팅에 대해 알아보도록 하겠습니다.


라라벨이 설치된 디렉터리 목록은 아래와 같습니다.



root@961789beb441:/var/www/html/myapp$ ls -la
total 184
drwxr-xr-x 24 root root    768 Aug  6 15:02 .
drwxr-xr-x  1 root root   4096 Aug  6 15:29 ..
-rw-r--r--  1 root root    542 Aug  6 15:02 .env
-rw-r--r--  1 root root    491 Aug  6 14:57 .env.example
-rw-r--r--  1 root root     61 Aug  6 14:57 .gitattributes
-rw-r--r--  1 root root     80 Aug  6 14:57 .gitignore
drwxr-xr-x  7 root root    224 Aug  6 14:57 app
-rwxr-xr-x  1 root root   1646 Aug  6 14:57 artisan
drwxr-xr-x  5 root root    160 Aug  6 14:57 bootstrap
-rw-r--r--  1 root root   1283 Aug  6 14:57 composer.json
-rw-r--r--  1 root root 137486 Aug  6 15:02 composer.lock
drwxr-xr-x 14 root root    448 Aug  6 14:57 config
drwxr-xr-x  6 root root    192 Aug  6 14:57 database
-rw-r--r--  1 root root    556 Aug  6 14:57 gulpfile.js
-rw-r--r--  1 root root    400 Aug  6 14:57 package.json
-rw-r--r--  1 root root    930 Aug  6 14:57 phpunit.xml
drwxr-xr-x  8 root root    256 Aug  6 14:57 public
-rw-r--r--  1 root root   1918 Aug  6 14:57 readme.md
drwxr-xr-x  5 root root    160 Aug  6 14:57 resources
drwxr-xr-x  5 root root    160 Aug  6 14:57 routes
-rw-r--r--  1 root root    563 Aug  6 14:57 server.php
drwxr-xr-x  5 root root    160 Aug  6 14:57 storage
drwxr-xr-x  4 root root    128 Aug  6 14:57 tests
drwxr-xr-x 33 root root   1056 Aug  6 15:02 vendor

-".env" - 해당 파일은 전반적인 환경 변수가 저장됩니다. Ex. Mysql 호스트 주소, 세션 타입



-"config/" - 해당 디렉터리는 프레임워크의 설정 파일이 담겨 있습니다.



-"public/" - 웹 루트 디렉터리 이며, 메인 "index.php" 파일은 모든 HTTP 요청에 대해 컨트롤러가 작동되며, CSS와 JS파일이 들어 있으며, URL로 바로 접근을 할 수 있습니다.






아래는 '.env' 파일에 대해 셋팅하도록 하겠습니다.


root@961789beb441:/var/www/html/myapp# cat .env
APP_ENV=local
APP_KEY=base64:ul+3lU4x9jLhpOFqm5LZhKfy/CqIx8HQ4bUOTEQyifw=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=myapp
DB_USERNAME=toor
DB_PASSWORD=toor

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

PUSHER_KEY=
PUSHER_SECRET=
PUSHER_APP_ID=

.env



"APP_KEY"



위 셋팅중 "APP_KEY"는 라라벨 Composer에서 자동으로 랜덤한 문자열로 키셋팅이 되어 있을겁니다.

해당 키는 외부로 유출되어서는 안되며, 키가 셋팅이 되어 있지 않다면 꼭 키 셋팅을 어렵게 해야합니다.

만약 해당 키가 외부로 유출되거나 너무 간단한 문자열일 경우 암호화된 사용자 세션 데이터가 유출 또는 변조될 수 있습니다.

키 셋팅은 아래 php 라라벨 명령을 통하여 진행할 수 있습니다.

root@961789beb441:/var/www/html/myapp$ php artisan key:generate
Application key [base64:h92DCRDUP+qCfRw8r9+WVYwCCL/K3Uz45/FbomKF++Q=] set successfully.

root@961789beb441:/var/www/html/myapp$ php artisan key:generate
Application key [base64:y8MI7L9A/RF0pg3SnNTVxeJZOtTdh9ngj66as35CNfE=] set successfully.

root@961789beb441:/var/www/html/myapp$ php artisan key:generate
Application key [base64:se7kpZW63B/+GV5NXr1cUJqlqtLJcUB7XK9cwf1yXvo=] set successfully.

Key 생성


PHP artisan를 통하여 키를 생성할 수 있으며, 해당 키는 매번 생성할 때 서로 다른 랜덤 키 값을 제공합니다.
이중 하나를 골라 ".env"에 넣어주시면 됩니다.




"APP_DEBUG"



APP_DEBUG=true

해당 옵션은 "디버깅" 모드 활성화 여부입니다. 만약 개발을 한다면 디버깅 모드를 활성화하여 개발을 진행하면 되나, 실서버에 올리거나 외부에서 접근이 가능할때는 꼭 "false"로 종료시켜야 합니다.

디버깅 모드로 소스 코드 또는 내부 로직을 볼 수 있습니다.

/*
|--------------------------------------------------------------------------
| Application Debug Mode
|--------------------------------------------------------------------------
|
| When your application is in debug mode, detailed error messages with
| stack traces will be shown on every error that occurs within your
| application. If disabled, a simple generic error page is shown.
|
*/

'debug' => env('APP_DEBUG', false),

config/app.php


".env" 변수 "APP_DEBUG"를 PHP 슈퍼 전역변수에 등록되어 사용됩니다.
함수의 두 번째 인자 "false"는 기본값이며, 해당 환경 변수가 존재하지 않을 시 기본적으로 "false"를 할당받아 디버깅모드를 사용하지 않게 됩니다.




"현재 환경 결정"



현재 애플리케이션 환경 파일은 ".env" 파일의 "APP_ENV" 변수를 통해 결정됩니다.
"App" 파사드의 "environment" 메소드를 통하여 값을 접근할 수 있습니다.


$environment = App::environment();

print_r($environment);

해당 반환값은 "local" 문자열로 반환됩니다. 즉 "APP_ENV=local" 설정된 변수의 값이 출력됩니다.




"설정값 액세스"



애플리케이션은 어느 곳에서나 전역 도우미 기능"config 헬퍼 함수" 통하여 쉽게 설정값 접근을 할 수 있습니다.

설정된 값은 점"." 문법을 사용합니다.


$value = config('app.timezone');

"$value" 변수에는 "config/app.php" 정의되어 있는 'timezone' => 'UTC' 값을 가져오므로 "UTC" 문자열이 저장됩니다.



하지만 런타임(실행중)인 애플리케이션 구성 값을 변경하려면
아래와 같이 사용해주시면 됩니다.

config(['app.timezone' => 'America/Chicago']);

"config/app.php"에 timezone이 "UTC"로 정의되어 있어도 "America/Chicago"로 설정값이 변경됩니다.

한마디로 "config/app.php" 파일에는 공통적으로 참조하는 구성 값이 들어 있으며, 아래와 같이 "라라벨" 프레임워크 provider가 정의되어 있습니다.

providers' => [

        /*
         * Laravel Framework Service Providers...
         */
        Illuminate\Auth\AuthServiceProvider::class,
        Illuminate\Broadcasting\BroadcastServiceProvider::class,
        Illuminate\Bus\BusServiceProvider::class,
        Illuminate\Cache\CacheServiceProvider::class,
        Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
        Illuminate\Cookie\CookieServiceProvider::class,
        ... 생략

config/app.php




"설정 캐시"



애플리케이션 구동 속도를 높이려면 "Artisan" 명령을 사용하여 모든 구성 파일을 단일 캐싱화 시켜야합니다.

즉, 모든 설정 옵션을 하나의 파일로 묶어 애플리케이션이 보다 빠르게 로드할 수 있도록 합니다.


root@961789beb441:/var/www/html/myapp$ php artisan config:cache
Configuration cache cleared!
Configuration cached successfully!

# 캐쉬 삭제
root@961789beb441:/var/www/html/myapp$ php artisan cache:clear
Cache cleared successfully.

"php artisan config:cache" 애플리케이션 배포 단계에서 실행해야 하며, 개발 단계에서는 설정값이 자주 변경되므로 로컬 개발단계에서는 실행하면 안됩니다.




"점검 (유지보수) 모드"



해당 모드가 켜질 경우 모든 라우팅이 점검 모드 화면으로 보여주게 됩니다.

즉, "업데이트" "유지보수" "수정" 작업을 할 때 유용할 것 같습니다.

HTTP 503 Status Code와 함께 MaintenanceModeException이 발생됩니다.


root@961789beb441:/var/www/html/myapp$ php artisan down
Application is now in maintenance mode.

아티즌 "php artisan down" 명령을 실행시키며 됩니다.



root@961789beb441:/var/www/html/myapp$  php artisan down --message="Upgrading Database" --retry=60

down 명령어에 "--message"와 "--retry" 옵션을 사용할 수 있습니다.

해당 옵션은 "message"로 화면에 값을 출력 또는 로그에 기록되며, "retry" 값은 HTTP Header의 "Retry-After"으로 설정하는데 사용됩니다.



root@961789beb441:/var/www/html/myapp$ php artisan up

점검 (유지보수) 모드를 비활성화하기 위해 "php artisan up" 명령을 입력하시면 됩니다.



점검 (유지보수) 템플릿은 아래 경로 존재합니다.


root@961789beb441:/var/www/html/myapp$ ls -la resources/views/errors/503.blade.php  
-rw-r--r-- 1 root root 1116 Aug  6 14:57 resources/views/errors/503.blade.php

해당 템플릿를 수정하여 유지보수 모드일 경우 사용자에게 보여주는 화면을 변경할 수 있습니다.




"PHP 자체적으로 웹서버 구동하기"



웹서버 Apache, Nginx 대신 PHP 내장 웹서버를 통하여 자체적으로 구동시킬 수 있습니다.
해당 라라벨 프로젝트 디렉터리에서 아티즌을 통하여 구동시키면 됩니다.


root@961789beb441:/var/www/html/myapp$ php artisan serve --host=0.0.0.0 --port=9000
Laravel development server started on http://0.0.0.0:9000/

PHP 웹서버 구동

"--host" 옵션에서는 접속할 수 있는 IP를 지정하나 0.0.0.0일 경우는 모든 아이피들이 접근할 수 있으며, 로컬 환경에서 개발을 한다면 안전하게 "--host=127.0.0.1"로 변경하여 로컬에서만 접근할 수 있도록 합니다.


"--port=9000"는 PHP 내장 웹서버 접근할 포트번호 입니다. 지정을 하지 않을 경우 Default로 8000번 포트를 사용합니다.