macOS에서 ServBay로 PHPixie 프로젝트 생성 및 실행하기
PHPixie는 빠른 웹 애플리케이션 개발을 위해 설계된 가볍고 고성능의 PHP 프레임워크입니다. HMVC(Hierarchical Model-View-Controller) 디자인 패턴을 따르며, 간결한 코드 구조와 효율적인 처리 능력을 제공합니다. PHPixie는 단순함, 유연성, 그리고 높은 퍼포먼스로 많은 개발자에게 사랑받고 있습니다.
PHPixie의 주요 특징 및 장점
- 경량 설계: PHPixie의 핵심 시스템은 꼭 필요한 내용으로만 구성되어 있어 구동과 실행이 매우 빠릅니다.
- 고성능: 효율성에 중점을 둔 설계로, 동시 요청 처리 능력이 뛰어나 높은 성능이 요구되는 애플리케이션에도 적합합니다.
- 학습이 쉬움: 명확하고 직관적인 API와 풍부한 문서로 개발자가 쉽게 익힐 수 있습니다.
- 유연성: 느슨한 결합 구조로 프로젝트 요구에 따라 외부 라이브러리나 컴포넌트를 자유롭게 통합할 수 있습니다.
- 활발한 커뮤니티 지원: 활발한 개발자 커뮤니티가 풍부한 써드파티 확장과 지원 리소스를 제공합니다.
PHPixie는 효율적으로 고성능·고품질의 웹 애플리케이션을 개발하고자 하는 개발자들에게 최적이며, 소규모 프로젝트부터 대규모 엔터프라이즈 환경까지 다양하게 활용할 수 있습니다.
ServBay로 PHPixie 프로젝트 생성 및 실행하기
이 문서에서는 ServBay가 제공하는 로컬 웹 개발 환경을 활용해 PHPixie 프로젝트를 생성하고 실행하는 방법을 소개합니다. ServBay의 통합된 PHP 환경, Composer 의존성 관리자, 그리고 "웹사이트" 기능을 활용해 웹 서버를 설정하고, 프로젝트의 로컬 접근 및 데이터베이스/캐시 연동을 간편하게 구현하는 과정을 안내합니다.
사전 준비 사항
- macOS에 ServBay가 설치 및 실행 중이어야 합니다. ServBay는 PHP, Composer, 다양한 데이터베이스(MySQL, PostgreSQL, MongoDB, Redis 등), 그리고 Caddy 웹서버가 포함되어 있습니다.
- 기본적인 명령어라인 사용법에 대해 알고 있어야 합니다.
PHPixie 프로젝트 생성하기
권장 웹사이트 경로
ServBay에서는 로컬 웹사이트 프로젝트를 /Applications/ServBay/www
경로 하위에 통일하여 관리할 것을 권장합니다. 이렇게 하면 관리와 ServBay 접근 권한 통제에 유리합니다.
- Composer 설치 여부 확인: ServBay는 기본적으로 Composer가 내장되어 있어 별도 설치가 필요 없습니다. 터미널을 열고
composer --version
명령어로 확인할 수 있습니다. - 프로젝트 디렉터리 생성: ServBay 권장 웹사이트 루트 경로에서 새로운 디렉터리를 만들어 PHPixie 프로젝트를 저장하고 해당 디렉터리로 이동합니다.bash
cd /Applications/ServBay/www mkdir servbay-phpixie-app cd servbay-phpixie-app
1
2
3 - Composer로 PHPixie 프로젝트 생성: 프로젝트 디렉터리에서 Composer 명령어로 PHPixie 프로젝트 템플릿을 받습니다.bashComposer가 PHPixie 및 의존성을 현재 폴더로 다운로드합니다.
composer create-project phpixie/project .
1
웹 서버 설정
ServBay의 웹사이트 기능을 이용해 Caddy 웹서버를 설정하고, PHPixie 프로젝트를 정상적으로 실행할 수 있도록 만듭니다.
ServBay 앱을 실행합니다.
웹사이트(Websites) 목록으로 이동합니다.
새 웹사이트 추가 버튼을 클릭합니다.
아래 정보를 입력합니다.
- 이름: 예시
My First PHPixie Dev Site
(ServBay 내부 구분명) - 도메인: 예시
servbay-phpixie-test.local
(브라우저에서 접속할 로컬 개발 도메인) - 웹사이트 타입:
PHP
선택 - PHP 버전: 원하는 PHP 버전 선택 (예:
8.3
) - 웹사이트 루트(문서 루트): 프로젝트의
web
디렉터리로 지정:/Applications/ServBay/www/servbay-phpixie-app/web
왜
/web
디렉터리인가요?PHPixie의 진입 파일은
web/index.php
입니다. 보안과 모범 사례를 위해 웹서버의 루트 디렉터리는 프로젝트 최상위가 아닌web
디렉터리로 지정해야 합니다. 이렇게 하면 프로젝트 설정 파일이나 vendor 디렉터리와 같은 민감 정보에 웹을 통해 직접 접근하는 것을 방지할 수 있습니다.- 이름: 예시
설정을 저장합니다. ServBay가 자동으로 Caddy 설정 및 hosts 파일을 갱신해
servbay-phpixie-test.local
도메인이 로컬 ServBay 서버로 연결되게 만듭니다.
상세 설정 절차는 첫 번째 웹사이트 추가하기 문서를 참고하세요.
예제 코드 추가
프로젝트가 제대로 실행되는지 확인하고, 데이터베이스 및 캐시 연동 샘플을 위해 예제 코드를 추가합니다.
예제 컨트롤러 생성:
src/App/HTTP/Controller/Home.php
파일에 아래 코드를 추가합니다. (경로 및 파일이 없으면 직접 생성하세요.)php<?php namespace App\HTTP\Controller; use PHPixie\HTTP\Request; use PHPixie\Template; use PHPixie\Database\Query; // Query 클래스 불러오기 class Home extends \PHPixie\Controller { protected $template; public function __construct(Template $template) { $this->template = $template; } // 기본 홈 action public function action_index(Request $request) { // assets/templates/app/home.php 템플릿 렌더링 return $this->template->render('app:home'); } // Memcached 예제 action public function action_memcached(Request $request) { $cache = $this->components->cache(); $cache->set('key', 'Hello Memcached from ServBay!', 60); // 데이터 저장(60초 유효) $value = $cache->get('key'); // 데이터 가져오기 return $this->response()->string($value); // 문자열 응답 반환 } // Redis 예제 action public function action_redis(Request $request) { $redis = $this->components->redis(); $redis->set('key', 'Hello Redis from ServBay!'); // 데이터 저장 $value = $redis->get('key'); // 데이터 가져오기 return $this->response()->string($value); // 문자열 응답 반환 } // MySQL/PostgreSQL 유저 추가 예제 action public function action_add_user(Request $request) { // 데이터베이스 컴포넌트에서 쿼리 빌더 가져오기 $query = $this->components->database()->query(); // 'users' 테이블에 새로운 유저 데이터 삽입 $query->insert('users')->data([ 'name' => 'ServBay Demo User', 'email' => 'demo-' . uniqid() . '@servbay.test', // 고유한 이메일 사용 ])->execute(); // 인서트 실행 return $this->response()->string('User added successfully.'); // 성공 메시지 반환 } // MySQL/PostgreSQL 유저 목록 조회 예제 action public function action_list_users(Request $request) { // 데이터베이스 컴포넌트에서 쿼리 빌더 가져오기 $query = $this->components->database()->query(); // 'users' 테이블의 모든 유저 조회 $users = $query->select('*')->from('users')->execute()->fetchAll(); // 쿼리 실행 및 결과 전체 가져오기 return $this->response()->json($users); // JSON 포맷 유저 목록 반환 } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67예제 템플릿 생성:
assets/templates/app/home.php
파일에 아래 코드를 추가합니다. (경로 및 파일이 없으면 직접 생성하세요.)php<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Welcome to PHPixie on ServBay</title> <style> body { font-family: sans-serif; line-height: 1.6; margin: 20px; } h1 { color: #333; } p { margin-bottom: 15px; } code { background-color: #f4f4f4; padding: 2px 5px; border-radius: 4px; } ul { list-style: none; padding: 0; } li { margin-bottom: 10px; } li a { text-decoration: none; color: #007bff; } li a:hover { text-decoration: underline; } </style> </head> <body> <h1>Welcome to PHPixie on ServBay</h1> <p>This page is being generated dynamically by your PHPixie application running on ServBay.</p> <h2>예제 기능 링크:</h2> <ul> <li><a href="/home/memcached">Memcached 테스트</a></li> <li><a href="/home/redis">Redis 테스트</a></li> <li><a href="/home/add_user">데이터베이스에 유저 추가</a></li> <li><a href="/home/list_users">데이터베이스 내 유저 목록 보기</a></li> </ul> <p>관련 데이터베이스 및 캐시 설정 단계를 마쳤는지 확인하세요.</p> </body> </html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
기본 사이트 접속
ServBay의 웹사이트 설정과 예제 코드 추가가 끝났다면, 브라우저에서 설정한 도메인 주소로 접속할 수 있습니다.
- 브라우저를 열고
https://servbay-phpixie-test.local
로 접속합니다. - "Welcome to PHPixie on ServBay"라는 메시지와 예제 기능 링크가 표시되어야 합니다.
접속이 되지 않을 경우 아래 항목을 확인하세요.
- ServBay가 실행 중인지 여부
- 웹사이트의 도메인, 타입, 루트 디렉터리 등 설정이 올바른지
- 로컬 hosts 파일에
servbay-phpixie-test.local
이 적절히 매핑되어 있는지 (대부분 ServBay가 자동 처리함) - ServBay의 해당 PHP 버전이 활성화되었는지
데이터베이스 및 캐시 연동 예제
PHPixie는 다양한 데이터베이스와 캐시 시스템 연동을 기본 지원합니다. ServBay에서는 MySQL, PostgreSQL, Redis, Memcached 등 소프트웨어 번들을 제공하며, 이들을 쉽게 PHPixie 프로젝트에 통합할 수 있습니다.
중요: 데이터베이스를 사용하기 전, ServBay에서 해당 DB 서비스를 반드시 시작하고, 프로젝트 전용 데이터베이스를 만들어야 합니다. 본 예제에서는 DB 이름을 servbay_phpixie_app
으로 가정합니다. DB 생성은 ServBay의 데이터베이스 관리툴(Sequel Ace, Postico, TablePlus 등) 혹은 커맨드라인 클라이언트로 할 수 있습니다. 기본 DB 사용자는 대체로 root
, 비밀번호는 password
입니다. (환경에 따라 다를 수 있으니 설정을 참고하세요.)
데이터베이스 연결 설정
사용할 DB 종류에 따라(예: MySQL, PostgreSQL) 프로젝트 루트의 assets/config/database.php
파일을 아래와 같이 수정합니다. ServBay의 기본 DB 주소는 일반적으로 127.0.0.1
입니다.
MySQL 예시 설정(assets/config/database.php
):
php
<?php
return [
'default' => [
'driver' => 'pdo',
// connection 문자열은 본인 DB 종류 및 ServBay 설정에 따라 조정
'connection' => 'mysql:host=127.0.0.1;dbname=servbay_phpixie_app',
'user' => 'root', // ServBay 기본 사용자
'password' => 'password', // ServBay 기본 비밀번호(환경에 따라 변경 요망)
'options' => []
]
];
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
PostgreSQL 예시 설정(assets/config/database.php
):
php
<?php
return [
'default' => [
'driver' => 'pdo',
// connection 문자열은 본인 DB 종류 및 ServBay 설정에 따라 조정
'connection' => 'pgsql:host=127.0.0.1;dbname=servbay_phpixie_app',
'user' => 'root', // ServBay 기본 사용자
'password' => 'password', // ServBay 기본 비밀번호(환경에 따라 변경 요망)
'options' => []
]
];
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
데이터베이스 테이블 생성(마이그레이션)
PHPixie는 커맨드라인 툴을 통해 DB 마이그레이션(스키마 버전 관리)을 지원합니다.
- 터미널 열기: 프로젝트 루트로 이동합니다.bash
cd /Applications/ServBay/www/servbay-phpixie-app
1 - 마이그레이션 파일 생성: PHPixie CLI 툴로 마이그레이션 파일(테이블 생성용)을 만듭니다.bash
php pixie generate:migration create_users_table
1assets/migrations
폴더에 새 PHP 파일이 생성됩니다(파일명에 타임스탬프 포함). - 마이그레이션 파일 수정: 새로 생성된 마이그레이션 파일(ex:
YYYY_MM_DD_HHMMSS_create_users_table.php
)을 열어,up()
및down()
메서드를 아래와 같이 작성합니다.php<?php use PHPixie\Database\Migration; use PHPixie\Database\Schema\Table; class CreateUsersTable extends Migration { public function up() { // schema 빌더로 'users' 테이블 생성 $this->schema->create('users', function(Table $table) { $table->increments('id'); // 자동 증가 기본키 $table->string('name'); // 이름 컬럼 $table->string('email')->unique(); // 이메일(고유) $table->timestamps(); // created_at 및 updated_at 타임스탬프 }); } public function down() { // schema 빌더로 'users' 테이블 삭제 $this->schema->drop('users'); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 - 마이그레이션 실행: 프로젝트 루트에서 아래 명령어로 실제 테이블을 생성합니다.bash정상적으로 완료되면 터미널에 성공 메시지가 표시되며, DB 툴로
php pixie migrate
1servbay_phpixie_app
내에users
테이블이 생성된 것을 확인할 수 있습니다.
관계형 데이터베이스(MySQL/PostgreSQL) 연동
앞서 생성한 src/App/HTTP/Controller/Home.php
컨트롤러에는 데이터베이스 컴포넌트를 활용하는 action_add_user
, action_list_users
메서드가 포함되어 있습니다.
- 사용자 추가:
https://servbay-phpixie-test.local/home/add_user
에 접속하면users
테이블에 새 유저가 추가됩니다. - 사용자 목록:
https://servbay-phpixie-test.local/home/list_users
에 접속하면users
테이블의 모든 유저 정보를 JSON으로 확인할 수 있습니다.
NoSQL 데이터베이스(Memcached/Redis) 설정 및 사용
ServBay는 Memcached, Redis 소프트웨어 및 관련 PHP 확장 모듈이 기본 설치되어 있습니다. PHPixie 프로젝트 설정만 추가하면 바로 사용할 수 있습니다.
Memcached 설정(assets/config/cache.php
):
assets/config/cache.php
파일을 편집(또는 새로 생성)하여 아래와 같이 설정합니다.
php
<?php
return [
'default' => [
'driver' => 'memcached',
'servers' => [
[
'host' => '127.0.0.1', // ServBay Memcached 기본 주소
'port' => 11211, // ServBay Memcached 기본 포트
'weight' => 100,
],
],
],
];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
Redis 설정(assets/config/redis.php
):
assets/config/redis.php
파일을 편집(또는 새로 생성)하여 아래와 같이 설정합니다.
php
<?php
return [
'default' => [
'hostname' => '127.0.0.1', // ServBay Redis 기본 주소
'port' => 6379, // ServBay Redis 기본 포트
'timeout' => 0,
'database' => 0, // Redis DB 인덱스
],
];
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Memcached/Redis 사용 예:
src/App/HTTP/Controller/Home.php
컨트롤러에 있는 action_memcached
, action_redis
메서드를 통해 PHPixie의 캐시 컴포넌트(설정에 따라 Memcached 또는 Redis)를 테스트할 수 있습니다.
- Memcached 테스트:
https://servbay-phpixie-test.local/home/memcached
에 접속하면 Memcached에 데이터를 쓴 후 읽어 반환합니다. - Redis 테스트:
https://servbay-phpixie-test.local/home/redis
에 접속하면 Redis에 데이터를 쓴 후 읽어 반환합니다.
해당 소프트웨어(Memcached, Redis)가 ServBay에서 실행 중인지 확인하세요.
정리
위 안내를 따라 ServBay를 활용해 macOS 로컬 환경에서 PHPixie 프로젝트를 만들고, 설정하고, 실행하였다면 Composer를 통한 프로젝트 생성, ServBay의 웹사이트 기능으로 웹 서버 설정, 기본 데이터베이스 및 캐시 연동 설정과 그 기능 확인까지 모두 경험한 것입니다.
ServBay의 통합 환경은 PHP 개발 환경 구축을 크게 단순화해주며, 개발이 코드 그 자체에 집중될 수 있도록 돕습니다. 이 가이드가 PHPixie로 차세대 웹 프로젝트를 빠르게 시작하는 데 도움이 되길 바랍니다!