Shell Script 문법 정리
Title: Bash Shell Script 문법 정리 Author: DongDongE Tags: Programming Release: 2021.02.08 [Shell
PHP MVC 패턴 - 기본 설정 이번에는 Laravel 설치 이후 기본 셋팅에 대해 알아보도록 하겠습니다. 라라벨이 설치된 디렉터리 목록은 아래와 같습니다.
Title: PHP Laravel - Docker 기본설정
Author: DongDongE
Tags: Programming
Release: 2020.08.07
이번에는 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"는 라라벨 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=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
해당 템플릿를 수정하여 유지보수 모드일 경우 사용자에게 보여주는 화면을 변경할 수 있습니다.
웹서버 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번 포트를 사용합니다.