앱 실행

CodeIgniter 4 앱은 웹 서버에서 호스팅하거나, 가상화를 사용하거나, 테스트를 위해 CodeIgniter의 명령줄 도구를 사용하는 등 여러 가지 방법으로 실행할 수 있습니다. 이 섹션에서는 각 방법의 사용 방법과 장단점에 대해 설명합니다.

중요

파일 이름의 대소문자에 항상 주의해야 합니다. 많은 개발자들이 Windows 또는 macOS의 대소문자를 구분하지 않는 파일 시스템에서 개발합니다. 그러나 대부분의 서버 환경은 대소문자를 구분하는 파일 시스템을 사용합니다. 파일 이름의 대소문자가 잘못된 경우 로컬에서 동작하는 코드가 서버에서는 동작하지 않을 수 있습니다.

CodeIgniter를 처음 사용하신다면 동적 PHP 애플리케이션을 만드는 방법을 배우기 위해 사용자 가이드의 시작하기 섹션을 먼저 읽어보세요. 즐겁게 사용하세요!

초기 설정

사이트 URI 설정

텍스트 편집기로 app/Config/App.php 파일을 여세요.

  1. $baseURL

    기본 URL을 $baseURL에 설정하세요. 더 많은 유연성이 필요하다면 baseURL을 .env 파일에서 app.baseURL = 'http://example.com/'으로 설정할 수 있습니다. 기본 URL 끝에는 항상 슬래시를 사용하세요!

    참고

    baseURL을 올바르게 설정하지 않으면 개발 모드에서 디버그 툴바가 제대로 로드되지 않거나 웹 페이지 표시에 상당히 오랜 시간이 걸릴 수 있습니다.

  2. $indexPage

    사이트 URI에 index.php를 포함하지 않으려면 $indexPage''로 설정하세요. 이 설정은 프레임워크가 사이트 URI를 생성할 때 사용됩니다.

    참고

    index.php를 포함하지 않는 URL로 사이트에 접근하려면 웹 서버를 설정해야 할 수 있습니다. CodeIgniter URLs를 참조하세요.

데이터베이스 연결 설정

데이터베이스를 사용하려면 텍스트 편집기로 app/Config/Database.php 파일을 열고 데이터베이스 설정을 입력하세요. 또는 .env 파일에서 설정할 수도 있습니다. 자세한 내용은 데이터베이스 설정을 참조하세요.

개발 모드 설정

운영 서버가 아닌 경우 .env 파일에서 CI_ENVIRONMENTdevelopment로 설정하여 제공되는 디버깅 도구를 활용하세요. 자세한 내용은 개발 모드 설정를 참조하세요.

중요

운영 환경에서는 오류 표시 및 기타 개발 전용 기능을 비활성화해야 합니다. 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에 파일을 유지합니다.

로컬 개발 서버는 세 가지 명령줄 옵션으로 사용자 정의할 수 있습니다:

  • --host CLI 옵션을 사용하여 애플리케이션을 실행할 다른 호스트를 지정할 수 있습니다:

    php spark serve --host example.dev
    
  • 기본적으로 서버는 포트 8080에서 실행되지만 여러 사이트를 실행 중이거나 이미 다른 애플리케이션이 해당 포트를 사용하고 있을 수 있습니다. --port CLI 옵션을 사용하여 다른 포트를 지정할 수 있습니다:

    php spark serve --port 8081
    
  • --php CLI 옵션을 사용하여 사용할 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 프로세스 내에서 여러 요청을 처리하여 성능을 향상시킵니다.

빠른 시작

  1. 정적 바이너리를 사용하여 FrankenPHP를 설치합니다.

  2. 워커 모드 파일 생성:

php spark worker:install
  1. 서버 시작:

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을 원한다면 세 가지 방법이 있습니다.

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

mod_userdir로 호스팅 (공유 호스트)

공유 호스팅 환경에서는 Apache 모듈 “mod_userdir”을 사용하여 사용자별 가상 호스트를 자동으로 활성화하는 것이 일반적입니다. 이러한 사용자별 디렉터리에서 CodeIgniter4를 실행하려면 추가 설정이 필요합니다.

다음은 서버가 이미 mod_userdir로 설정되어 있다고 가정합니다. 이 모듈 활성화에 대한 가이드는 Apache 문서에서 확인할 수 있습니다.

CodeIgniter4는 기본적으로 서버가 public/index.php에서 프레임워크 프론트 컨트롤러를 찾을 것으로 예상하므로, 이 위치를 요청을 찾을 대체 위치로 지정해야 합니다(CodeIgniter4가 사용자별 웹 디렉터리에 설치된 경우도 포함).

기본 사용자 웹 디렉터리 ~/public_htmlUserDir 지시어로 지정되며, 일반적으로 apache2/mods-available/userdir.conf 또는 apache2/conf/extra/httpd-userdir.conf에 있습니다:

UserDir public_html

따라서 기본값을 서비스하기 전에 Apache가 먼저 CodeIgniter의 public 디렉터리를 찾도록 설정해야 합니다:

UserDir "public_html/public" "public_html"

CodeIgniter public 디렉터리에 대한 옵션과 권한도 지정해야 합니다. userdir.conf는 다음과 같이 보일 수 있습니다:

<IfModule mod_userdir.c>
    UserDir "public_html/public" "public_html"
    UserDir disabled root

    <Directory /home/*/public_html>
        AllowOverride All
        Options MultiViews Indexes FollowSymLinks
        <Limit GET POST OPTIONS>
            # Apache <= 2.2:
            # Order allow,deny
            # Allow from all

            # Apache >= 2.4:
            Require all granted
        </Limit>
        <LimitExcept GET POST OPTIONS>
            # Apache <= 2.2:
            # Order deny,allow
            # Deny from all

            # Apache >= 2.4:
            Require all denied
        </LimitExcept>
    </Directory>

    <Directory /home/*/public_html/public>
        AllowOverride All
        Options MultiViews Indexes FollowSymLinks
        <Limit GET POST OPTIONS>
            # Apache <= 2.2:
            # Order allow,deny
            # Allow from all

            # Apache >= 2.4:
            Require all granted
        </Limit>
        <LimitExcept GET POST OPTIONS>
            # Apache <= 2.2:
            # Order deny,allow
            # Deny from all

            # Apache >= 2.4:
            Require all denied
        </LimitExcept>
    </Directory>
</IfModule>

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: 이 스크립트는 프레임워크에 접근이 필요한 다른 스크립트에 사용됩니다. 예외가 발생해도 정상적으로 실패하지 않으므로 테스트용이 아닌 스크립트에 사용하는 것을 권장합니다.

프로젝트 경로의 대부분은 부트스트랩 과정에서 정의됩니다. 미리 정의된 상수를 사용하여 이를 재정의할 수 있지만, 기본값을 사용할 때는 경로가 설치 방법에 맞는 예상 디렉터리 구조와 일치하는지 확인하세요.