macOS에서 ServBay로 PHPixie 프로젝트 만들기 및 실행하기
PHPixie는 빠른 웹 애플리케이션 개발을 위해 설계된, 경량 고성능 PHP 프레임워크입니다. HMVC(Hierarchical Model-View-Controller) 설계 패턴을 따르며, 간결한 코드 구조와 효율적인 처리 능력을 제공합니다. PHPixie는 간단함, 유연함, 그리고 높은 성능 덕분에 많은 개발자들의 사랑을 받고 있습니다.
PHPixie의 주요 특징과 장점
- 경량 설계: PHPixie의 핵심 시스템은 매우 간소화되어, 애플리케이션에 필요한 필수 구성 요소만 포함합니다. 시작 및 실행 속도가 빠릅니다.
- 고성능: 효율성을 중시한 프레임워크 설계로, 동시 요청 처리에 능하며 성능이 중요한 애플리케이션에 적합합니다.
- 학습 용이: 명확하고 간결한 API와 자세한 문서를 제공해 상대적으로 빠르게 사용법을 익힐 수 있습니다.
- 유연성: 느슨한 결합 구조 덕분에, 프로젝트 요구에 따라 타사 라이브러리나 컴포넌트의 선택과 통합이 자유롭습니다.
- 활발한 커뮤니티 지원: 적극적인 개발자 커뮤니티가 있어 다양한 서드파티 확장 및 지원 리소스를 제공합니다.
PHPixie는 개발자가 소형 프로젝트부터 대형 엔터프라이즈급 애플리케이션까지, 다양한 환경에서 효율적이고 품질 높은 웹 어플리케이션을 구축할 수 있게 도와줍니다.
ServBay로 PHPixie 프로젝트 생성 및 실행하기
이 글에서는 ServBay의 로컬 웹 개발 환경을 활용하여 PHPixie 프로젝트를 생성하고 실행하는 방법을 안내합니다. ServBay 통합 PHP 환경, Composer 의존성 관리 도구, 그리고 “웹사이트” 기능을 통해 웹 서버를 쉽게 설정하고, 간편한 단계별 절차로 프로젝트를 로컬에서 접근하고 DB/캐시 통합을 구현해 보겠습니다.
사전 준비
- 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
) - 웹사이트 루트 디렉터리(Document Root): 프로젝트의
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', 'ServBay에서 온 Memcached!', 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', 'ServBay에서 온 Redis!'); // 데이터 저장 $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 데모 사용자', 'email' => 'demo-' . uniqid() . '@servbay.test', // 고유 이메일 사용 ])->execute(); // 삽입 실행 return $this->response()->string('사용자 추가가 완료되었습니다.'); // 성공 메시지 반환 } // 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>ServBay에서 PHPixie에 오신 것을 환영합니다</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>ServBay에서 PHPixie에 오신 것을 환영합니다</h1> <p>이 페이지는 ServBay에서 실행 중인 PHPixie 애플리케이션이 동적으로 생성한 것입니다.</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
에 접속하세요. - "ServBay에서 PHPixie에 오신 것을 환영합니다"라는 문구와 여러 예제 기능 링크가 보이면 정상입니다.
접속이 되지 않는다면 다음 사항들을 확인해보세요:
- ServBay가 실행 중인지 확인
- 해당 웹사이트의 ServBay 설정(도메인, 타입, 루트 디렉터리 등)이 올바른지 체크
- 로컬 hosts 파일에
servbay-phpixie-test.local
이 정상적으로 등록됐는지(ServBay가 자동 관리) - 사용 중 PHP 버전이 ServBay에서 활성화 되어있는지
데이터베이스 및 캐시 통합 예제
PHPixie는 다양한 데이터베이스와 캐시 시스템을 기본 지원합니다. ServBay는 MySQL, PostgreSQL, Redis, Memcached 같은 패키지를 제공하므로, PHPixie 프로젝트에 쉽게 통합할 수 있습니다.
중요: 데이터베이스 작업 전, ServBay에서 해당 DB(MySQL 또는 PostgreSQL)가 실행 중임을 확인하고, 프로젝트용 데이터베이스를(예: servbay_phpixie_app
) 생성하세요. ServBay의 기본 DB 사용자명은 root
, 패스워드는 password
입니다(실제 환경에 따라 다를 수 있습니다). 데이터베이스 관리 툴: Sequel Ace, Postico, TablePlus 또는 커맨드라인 도구를 이용하면 됩니다.
데이터베이스 연결 설정
사용하는 데이터베이스 종류에 따라(예: 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는 데이터베이스 구조를 버전 관리할 수 있는 마이그레이션 관리 커맨드라인 도구를 제공합니다.
- 터미널 열기: PHPixie 프로젝트 루트 디렉터리로 이동:bash
cd /Applications/ServBay/www/servbay-phpixie-app
1 - 마이그레이션 파일 생성: PHPixie CLI 도구로 새로운 마이그레이션 파일 생성(
users
테이블용):bashphp pixie generate:migration create_users_table
1assets/migrations
디렉터리 아래에 타임스탬프가 붙은 PHP 파일이 생성됩니다. - 마이그레이션 파일 편집: 생성된 마이그레이션 파일(예:
YYYY_MM_DD_HHMMSS_create_users_table.php
)의up()
와down()
메서드에users
테이블 구조 정의: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'); // 자동 증가하는 PK $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 - 마이그레이션 실행: 프로젝트 루트 터미널에서 아래 명령으로 마이그레이션 실행,
users
테이블 생성:bash정상적으로 완료되면 터미널에 성공 메시지가 출력됩니다. 데이터베이스 관리 툴로php pixie migrate
1servbay_phpixie_app
DB에users
테이블이 있는지 확인할 수 있습니다.
관계형 DB(MySQL/PostgreSQL) 활용
앞서 작성한 컨트롤러(src/App/HTTP/Controller/Home.php
)의 action_add_user
, action_list_users
메서드를 통해 PHPixie의 데이터베이스 컴포넌트로 MySQL/PostgreSQL과 연동하는 방법을 배웠습니다.
- 사용자 추가:
https://servbay-phpixie-test.local/home/add_user
접속 시users
테이블에 사용자 레코드를 INSERT합니다. - 사용자 리스트:
https://servbay-phpixie-test.local/home/list_users
에 접속하면 모든 사용자 정보를 JSON으로 반환합니다.
NoSQL DB(Memcached/Redis) 설정 및 사용
ServBay는 Memcached, Redis 패키지 및 PHP 확장 모듈을 기본 탑재합니다. PHPixie 프로젝트에서 설정만 하면 바로 활용 가능합니다.
Memcached 설정(assets/config/cache.php
):
assets/config/cache.php
파일을 새로 생성하거나 편집하여 Memcached 설정 추가:
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
파일을 새로 생성하거나 편집하여 Redis 설정 추가:
php
<?php
return [
'default' => [
'hostname' => '127.0.0.1', // ServBay Redis 기본 주소
'port' => 6379, // ServBay Redis 기본 포트
'timeout' => 0,
'database' => 0, // Redis 데이터베이스 인덱스
],
];
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에 키-값을 저장 후, 해당 값을 읽어 출력합니다.
ServBay에서 관련 패키지(Memcached, Redis)가 실행 중이어야 합니다.
요약
위 단계들을 모두 마치면, ServBay를 이용해 macOS 로컬 환경에서 PHPixie 프로젝트를 성공적으로 생성, 설정, 실행할 수 있습니다. Composer로 프로젝트를 만들고, ServBay의 웹사이트 기능을 통해 웹서버를 설정하며, 데이터베이스 및 캐시 통합 설정과 그 기능 검증까지 모두 배웠습니다.
ServBay의 통합 환경은 PHP 개발 환경 구축을 아주 간편하게 해주므로, 여러분은 본격적인 코드 개발에만 집중할 수 있습니다. 이 가이드가 PHPixie로 차세대 웹 프로젝트를 빠르게 시작하는 데 도움이 되길 바랍니다!