앱 실행
CodeIgniter 4 앱은 웹 서버에서 호스팅하거나, 가상화를 사용하거나, 테스트를 위해 CodeIgniter의 명령줄 도구를 사용하는 등 여러 가지 방법으로 실행할 수 있습니다. 이 섹션에서는 각 방법의 사용 방법과 장단점에 대해 설명합니다.
중요
파일 이름의 대소문자에 항상 주의해야 합니다. 많은 개발자들이 Windows 또는 macOS의 대소문자를 구분하지 않는 파일 시스템에서 개발합니다. 그러나 대부분의 서버 환경은 대소문자를 구분하는 파일 시스템을 사용합니다. 파일 이름의 대소문자가 잘못된 경우 로컬에서 동작하는 코드가 서버에서는 동작하지 않을 수 있습니다.
CodeIgniter를 처음 사용하신다면 동적 PHP 애플리케이션을 만드는 방법을 배우기 위해 사용자 가이드의 시작하기 섹션을 먼저 읽어보세요. 즐겁게 사용하세요!
초기 설정
사이트 URI 설정
텍스트 편집기로 app/Config/App.php 파일을 여세요.
- $baseURL
기본 URL을
$baseURL에 설정하세요. 더 많은 유연성이 필요하다면 baseURL을 .env 파일에서app.baseURL = 'http://example.com/'으로 설정할 수 있습니다. 기본 URL 끝에는 항상 슬래시를 사용하세요!참고
baseURL을 올바르게 설정하지 않으면 개발 모드에서 디버그 툴바가 제대로 로드되지 않거나 웹 페이지 표시에 상당히 오랜 시간이 걸릴 수 있습니다.
- $indexPage
사이트 URI에 index.php를 포함하지 않으려면
$indexPage를''로 설정하세요. 이 설정은 프레임워크가 사이트 URI를 생성할 때 사용됩니다.참고
index.php를 포함하지 않는 URL로 사이트에 접근하려면 웹 서버를 설정해야 할 수 있습니다. CodeIgniter URLs를 참조하세요.
데이터베이스 연결 설정
데이터베이스를 사용하려면 텍스트 편집기로 app/Config/Database.php 파일을 열고 데이터베이스 설정을 입력하세요. 또는 .env 파일에서 설정할 수도 있습니다. 자세한 내용은 데이터베이스 설정을 참조하세요.
개발 모드 설정
운영 서버가 아닌 경우 .env 파일에서 CI_ENVIRONMENT를 development로 설정하여 제공되는 디버깅 도구를 활용하세요. 자세한 내용은 개발 모드 설정를 참조하세요.
중요
운영 환경에서는 오류 표시 및 기타 개발 전용 기능을 비활성화해야 합니다. CodeIgniter에서는 환경을 “production”으로 설정하면 됩니다. 기본적으로 애플리케이션은 “production” 환경에서 실행됩니다. ENVIRONMENT 상수도 참조하세요.
writable 폴더 권한 설정
웹 서버(예: Apache 또는 nginx)를 사용하여 사이트를 실행할 경우, 웹 서버에서 사용하는 사용자 또는 계정이 쓸 수 있도록 프로젝트 내 writable 폴더의 권한을 수정해야 합니다.
PHP ini 설정 확인
Added in version 4.5.0.
PHP ini 설정은 PHP의 동작을 변경합니다. CodeIgniter는 중요한 PHP 설정을 확인하는 명령을 제공합니다.
php spark phpini:check
Recommended 열은 운영 환경에 권장되는 값을 보여줍니다. 개발 환경에서는 다를 수 있습니다.
참고
spark 명령을 사용할 수 없는 경우 컨트롤러에서 CheckPhpIni::run(false)를 사용할 수 있습니다.
예:
<?php
namespace App\Controllers;
use CodeIgniter\Security\CheckPhpIni;
class Home extends BaseController
{
public function index(): string
{
return CheckPhpIni::run(false);
}
}
로컬 개발 서버
CodeIgniter 4는 CodeIgniter 라우팅을 사용하는 PHP 내장 웹 서버를 활용한 로컬 개발 서버를 포함하고 있습니다. 메인 디렉터리에서 다음 명령으로 실행할 수 있습니다:
php spark serve
서버가 실행되면 브라우저에서 http://localhost:8080으로 애플리케이션을 확인할 수 있습니다.
참고
내장 개발 서버는 로컬 개발 머신에서만 사용해야 합니다. 운영 서버에서는 절대 사용하지 마세요.
단순한 localhost가 아닌 다른 호스트에서 사이트를 실행해야 하는 경우, 먼저 해당 호스트를 hosts 파일에 추가해야 합니다. 파일의 위치는 주요 운영체제마다 다르지만, 모든 unix 계열 시스템(macOS 포함)은 일반적으로 /etc/hosts에 파일을 유지합니다.
로컬 개발 서버는 세 가지 명령줄 옵션으로 사용자 정의할 수 있습니다:
--hostCLI 옵션을 사용하여 애플리케이션을 실행할 다른 호스트를 지정할 수 있습니다:php spark serve --host example.dev기본적으로 서버는 포트 8080에서 실행되지만 여러 사이트를 실행 중이거나 이미 다른 애플리케이션이 해당 포트를 사용하고 있을 수 있습니다.
--portCLI 옵션을 사용하여 다른 포트를 지정할 수 있습니다:php spark serve --port 8081--phpCLI 옵션을 사용하여 사용할 PHP 버전을 지정할 수도 있습니다. 값은 사용하려는 PHP 실행 파일의 경로로 설정하세요:php spark serve --php /usr/bin/php7.6.5.4
FrankenPHP를 사용한 워커 모드
Added in version 4.7.0.
중요
워커 모드는 현재 실험적입니다. 공식적으로 지원되는 유일한 워커 구현체는 PHP Foundation이 지원하는 FrankenPHP입니다.
FrankenPHP는 워커 모드를 지원하는 현대적인 PHP 애플리케이션 서버로, 동일한 PHP 프로세스 내에서 여러 요청을 처리하여 성능을 향상시킵니다.
빠른 시작
정적 바이너리를 사용하여 FrankenPHP를 설치합니다.
워커 모드 파일 생성:
php spark worker:install
서버 시작:
frankenphp run
자세한 설정, 성능 튜닝, 상태 관리에 관한 중요한 고려 사항은 워커 모드를 참조하세요.
Apache로 호스팅
CodeIgniter4 웹 앱은 일반적으로 웹 서버에서 호스팅됩니다. Apache HTTP Server가 “표준” 플랫폼이며, 문서의 많은 부분에서 이를 전제로 합니다.
Apache는 많은 플랫폼에 기본 포함되어 있으며, Bitnami에서 데이터베이스 엔진 및 PHP와 함께 번들로 다운로드할 수도 있습니다.
메인 설정 파일 구성
mod_rewrite 활성화
“mod_rewrite” 모듈은 URL에 “index.php”가 없는 URL을 가능하게 하며, 사용자 가이드에서는 이를 전제로 합니다.
메인 설정 파일(예: apache2/conf/httpd.conf)에서 rewrite 모듈이 활성화(주석 해제)되어 있는지 확인하세요:
LoadModule rewrite_module modules/mod_rewrite.so
문서 루트 설정
또한 기본 문서 루트의 <Directory> 요소에서 AllowOverride 설정에서도 이를 활성화했는지 확인하세요:
<Directory "/opt/lamp/apache2/htdocs">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
VirtualHost로 호스팅
앱을 실행하려면 “가상 호스팅”을 사용하는 것을 권장합니다. 작업 중인 각 앱에 대해 다른 별칭을 설정할 수 있습니다.
vhost_alias_module 활성화
메인 설정 파일(예: apache2/conf/httpd.conf)에서 가상 호스팅 모듈이 활성화(주석 해제)되어 있는지 확인하세요:
LoadModule vhost_alias_module modules/mod_vhost_alias.so
호스트 별칭 추가
“hosts” 파일(unix 계열 플랫폼에서는 일반적으로 /etc/hosts, Windows에서는 c:\Windows\System32\drivers\etc\hosts)에 호스트 별칭을 추가하세요.
파일에 줄을 추가하세요. 예를 들어 myproject.local 또는 myproject.test와 같이 설정할 수 있습니다:
127.0.0.1 myproject.local
VirtualHost 설정
가상 호스팅 설정 파일(예: apache2/conf/extra/httpd-vhost.conf)에 웹 앱을 위한 <VirtualHost> 요소를 추가하세요:
<VirtualHost *:80>
DocumentRoot "/opt/lamp/apache2/myproject/public"
ServerName myproject.local
ErrorLog "logs/myproject-error_log"
CustomLog "logs/myproject-access_log" common
<Directory "/opt/lamp/apache2/myproject/public">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
위의 설정은 프로젝트 폴더가 다음과 같이 위치한다고 가정합니다:
apache2/
├── myproject/ (Project Folder)
│ └── public/ (DocumentRoot for myproject.local)
└── htdocs/
Apache를 재시작하세요.
테스트
위의 설정으로 브라우저에서 http://myproject.local/ URL로 웹 앱에 접근할 수 있습니다.
Apache 설정을 변경할 때마다 Apache를 재시작해야 합니다.
하위 폴더로 호스팅
하위 폴더가 있는 http://localhost/myproject/와 같은 baseURL을 원한다면 세 가지 방법이 있습니다.
심볼릭 링크 만들기
htdocs가 Apache 문서 루트인 상황에서 프로젝트 폴더를 다음과 같이 배치하세요:
├── myproject/ (project folder)
│ └── public/
└── htdocs/
htdocs 폴더로 이동하여 다음과 같이 심볼릭 링크를 생성하세요:
cd htdocs/
ln -s ../myproject/public/ myproject
Alias 사용
htdocs가 Apache 문서 루트인 상황에서 프로젝트 폴더를 다음과 같이 배치하세요:
├── myproject/ (project folder)
│ └── public/
└── htdocs/
메인 설정 파일(예: apache2/conf/httpd.conf)에 다음을 추가하세요:
Alias /myproject /opt/lamp/apache2/myproject/public
<Directory "/opt/lamp/apache2/myproject/public">
AllowOverride All
Require all granted
</Directory>
Apache를 재시작하세요.
.htaccess 추가
마지막 방법은 프로젝트 루트에 .htaccess를 추가하는 것입니다.
프로젝트 폴더를 문서 루트에 두는 것은 권장되지 않습니다. 하지만 공유 서버와 같이 다른 선택지가 없는 경우 이 방법을 사용할 수 있습니다.
htdocs가 Apache 문서 루트인 상황에서 프로젝트 폴더를 다음과 같이 배치하고 .htaccess 파일을 생성하세요:
└── htdocs/
└── myproject/ (project folder)
├── .htaccess
└── public/
그리고 .htaccess를 다음과 같이 편집하세요:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
<FilesMatch "^\.">
Require all denied
Satisfy All
</FilesMatch>
그리고 public/.htaccess의 리다이렉트 설정을 제거하세요:
--- a/public/.htaccess
+++ b/public/.htaccess
@@ -16,16 +16,6 @@ Options -Indexes
# http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase
# RewriteBase /
- # Redirect Trailing Slashes...
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteCond %{REQUEST_URI} (.+)/$
- RewriteRule ^ %1 [L,R=301]
-
- # Rewrite "www.example.com -> example.com"
- RewriteCond %{HTTPS} !=on
- RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
- RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
-
# Checks to see if the user is attempting to access a valid file,
# such as an image or css document, if this isn't true it sends the
# request to the front controller, index.php
index.php 제거
CodeIgniter URLs를 참조하세요.
환경 설정
다중 환경 처리를 참조하세요.
nginx로 호스팅
nginx는 웹 호스팅에서 두 번째로 많이 사용되는 HTTP 서버입니다. Ubuntu Server에서 PHP 8.1 FPM(unix 소켓)을 사용하는 예시 설정을 여기서 확인할 수 있습니다.
default.conf
이 설정은 URL에 “index.php”가 없는 URL을 활성화하고 “.php”로 끝나는 URL에 대해 CodeIgniter의 “404 - File Not Found”를 사용합니다.
server {
listen 80;
listen [::]:80;
server_name example.com;
root /var/www/example.com/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm:
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
# With php-cgi:
# fastcgi_pass 127.0.0.1:9000;
}
error_page 404 /index.php;
# deny access to hidden files such as .htaccess
location ~ /\. {
deny all;
}
}
환경 설정
다중 환경 처리를 참조하세요.
앱 부트스트래핑
일부 시나리오에서는 전체 애플리케이션을 실제로 실행하지 않고 프레임워크를 로드하고 싶을 수 있습니다. 이는 프로젝트의 단위 테스트에 특히 유용하지만, 서드파티 도구를 사용하여 코드를 분석하고 수정하는 데에도 편리할 수 있습니다. 프레임워크는 이러한 시나리오를 위해 두 개의 별도 부트스트랩 스크립트를 제공합니다:
system/Test/bootstrap.php: 이 스크립트는 주로 단위 테스트에 사용됩니다.
system/util_bootstrap.php: 이 스크립트는 프레임워크에 접근이 필요한 다른 스크립트에 사용됩니다. 예외가 발생해도 정상적으로 실패하지 않으므로 테스트용이 아닌 스크립트에 사용하는 것을 권장합니다.
프로젝트 경로의 대부분은 부트스트랩 과정에서 정의됩니다. 미리 정의된 상수를 사용하여 이를 재정의할 수 있지만, 기본값을 사용할 때는 경로가 설치 방법에 맞는 예상 디렉터리 구조와 일치하는지 확인하세요.