ServBay에서 Zend Framework(Laminas) 프로젝트 생성 및 실행하기
개요
Zend Framework(현재 Laminas Project의 일부)는 현대 웹 애플리케이션과 서비스를 구축하기 위한 강력한 오픈소스 PHP 프레임워크입니다. 이 프레임워크는 유연성, 모듈형 설계, 고성능으로 유명하며, 간단한 웹사이트부터 복잡한 엔터프라이즈 애플리케이션에 이르기까지 폭넓은 개발에 이상적입니다.
ServBay는 macOS와 Windows를 위해 설계된 로컬 웹 개발 환경으로, PHP, 웹 서버(Caddy, Nginx 등), 데이터베이스(MySQL, PostgreSQL, MongoDB 등), 캐시 서비스(Redis, Memcached 등), 다양한 개발 도구를 통합합니다. ServBay를 통해 이러한 소프트웨어 패키지를 쉽고 편리하게 관리하고, 여러 PHP 프레임워크 프로젝트를 로컬에서 간단하게 실행할 수 있습니다.
이 문서는 ServBay 환경에서 Zend Framework(Laminas) 프로젝트를 생성하고 실행하는 법, ServBay에서 제공하는 데이터베이스 및 캐시 서비스를 통합하는 법을 단계별로 안내합니다.
사전 준비
시작하기 전에 아래 준비사항을 확인하세요.
- ServBay 설치: macOS 혹은 Windows 시스템에 ServBay가 정상적으로 설치 및 실행되고 있어야 합니다. 미설치 시 ServBay 공식 웹사이트에서 다운로드 및 가이드를 참고하세요.
- 필수 소프트웨어 패키지: ServBay에서 다음 소프트웨어들이 설치·실행되어 있어야 합니다.
- PHP 버전 하나 이상(권장: PHP 8.x 이상, 최신 Laminas에서는 높은 PHP 버전이 필요할 수 있음)
- 웹 서버(Caddy 또는 Nginx)
- Composer(ServBay 기본 포함)
- 사용할 데이터베이스(MySQL, PostgreSQL 등)와 캐시 서비스(Memcached, Redis 등) → ServBay 콘트롤 패널을 통해 손쉽게 서비스를 시작할 수 있습니다.
Zend Framework 프로젝트 생성하기
ServBay에서는 웹사이트 프로젝트를 다음 디렉터리에 표준으로 저장하는 것을 추천합니다. 이는 ServBay의 웹사이트 자동 관리 및 설정에 도움이 됩니다.
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
웹사이트 루트 폴더로 이동
터미널을 열어 ServBay의 추천 루트 디렉터리로 이동하세요:
macOS:
bashcd /Applications/ServBay/www
1Windows:
cmdcd C:\ServBay\www
1Composer로 프로젝트 생성
ServBay는 Composer를 기본 제공하므로 따로 설치할 필요 없습니다. Composer의
create-project
명령어로 Zend Framework(Laminas skeleton application) 프로젝트를 생성하세요. 예시로servbay-zend-app
이라는 서브폴더에 생성합니다:bashcomposer create-project laminas/laminas-skeleton-application servbay-zend-app
1위 명령어는 Zend Framework(Laminas) 스켈레톤 앱을 해당 폴더에 내려받고 모든 의존성도 설치합니다.
프로젝트 디렉터리로 진입
새로 생성한 프로젝트 폴더로 이동하세요:
bashcd servbay-zend-app
1
웹 서버 설정
브라우저에서 Zend Framework 프로젝트를 접근하려면 ServBay에서 "웹사이트"를 따로 설정해야 합니다.
- ServBay 콘트롤 패널 실행: ServBay 앱을 시작합니다.
- 웹사이트 설정 진입: 콘트롤 패널에서 웹사이트(Websites) 탭을 클릭하세요.
- 새 웹사이트 추가: 좌측 하단의
+
버튼을 눌러 새 웹사이트를 등록합니다. - 웹사이트 정보 입력:
- 이름(Name): 알아보기 쉬운 이름 입력 (예:
My Zend Dev Site
) - 도메인(Domain): 브라우저 접속용 도메인 입력(실제 도메인 충돌 방지를 위해
.local
또는.test
추천, 예:servbay-zend-test.local
). ServBay가 로컬 DNS를 자동 설정합니다. - 웹사이트 타입(Website Type):
PHP
선택 - PHP 버전(PHP Version): 사용할 PHP 버전 선택(예:
8.3
). 해당 버전이 설치 및 실행 중이어야 함. - 웹사이트 루트(Document Root): 웹서버가 서비스하는 폴더로, Zend Framework의 진입점
index.php
가 있는public
디렉터리여야 합니다. 즉, 프로젝트 내public
폴더 지정:/Applications/ServBay/www/servbay-zend-app/public
- 이름(Name): 알아보기 쉬운 이름 입력 (예:
- 저장 및 재시작: 저장(Save) 클릭 → 적용 안내창에 확인하면 웹 서버가 재구동, 신규 웹사이트 반영됩니다.
자세한 설정법은 ServBay 문서의 웹사이트 추가 챕터를 참고하세요.
기본 "Hello ServBay!" 예제
프로젝트 코드를 수정하여, 루트 URL(/
) 접속 시 "Hello ServBay!"가 출력되도록 해보겠습니다.
라우팅 및 컨트롤러 설정(module.config.php)
프로젝트 루트의
module/Application/config/module.config.php
파일을 열고, 다음과 같은 기본 라우터 및 컨트롤러 설정이 포함되어 있는지 확인하세요:php// ... 기존 코드 생략 ... // ... 중국어 주석 번역: // ... 다른 라우터 설정 // ... 다른 설정들
1
2
3
4참고: 위 코드는 일부 예시이므로, 기존 설정 배열에 해당 부분이 들어있어야 합니다.
'home'
라우팅과Controller\IndexController::class
팩토리 정의가 반드시 존재해야 합니다.컨트롤러 생성 및 수정(IndexController.php)
module/Application/src/Controller/IndexController.php
파일을 생성하거나 수정하여,indexAction
메서드가 메시지가 담긴 ViewModel을 반환하도록 합니다:php// ... 번역 : /** * 기본 액션 - 환영 페이지 출력 */ public function indexAction() { // ViewModel 반환, 'message' 변수 뷰에 전달 return new ViewModel([ 'message' => 'Hello ServBay!', ]); } // ... 다른 action 메서드
1
2
3
4
5
6
7
8
9
10
11
12뷰 파일 생성 및 수정(index.phtml)
파일
module/Application/view/application/index/index.phtml
생성 또는 수정:php<h1><?php echo $this->message; ?></h1>
1Zend Framework(Laminas)의 뷰 헬퍼
$this->message
로 컨트롤러에서 전달한 값을 보여줍니다.
웹사이트 접속
웹 브라우저에서 ServBay에 설정한 도메인(예: https://servbay-zend-test.local
)으로 방문하세요.
올바르게 설정됐으면, "Hello ServBay!" 문구가 보일 것입니다. 이는 Zend Framework 프로젝트가 ServBay에서 성공적으로 동작 중임을 의미합니다.
데이터베이스 및 캐시 연동 예제
ServBay는 다양한 데이터베이스 및 캐시 서비스를 지원합니다. 아래는 Zend Framework 프로젝트에서 Memcached, Redis, MySQL, PostgreSQL을 연결 및 사용하는 예시입니다.
중요: 각 데이터베이스/캐시 예제는 독립적 데모입니다. 실제 프로젝트에서는 필요에 따라 한 가지 DB와 한두 가지 캐시를 선택하고, DI(의존성 주입) 등을 통해 연결을 관리하게 됩니다. 예제 실행 전 ServBay에서 해당 DB/캐시 서비스를 반드시 실행하세요(MySQL, PostgreSQL, Memcached, Redis 등).
데이터베이스 예제 - 테이블 생성
먼저 Laminas DB 컴포넌트로 DB의 테이블을 생성하는 예를 보여줍니다. 아래 코드는 수동으로 테이블을 생성하는 방식으로, 실제에선 Laminas Migrations 등을 사용할 수 있습니다.
Laminas DB 컴포넌트 설치
프로젝트 루트에서 Composer로 Laminas DB 컴포넌트 설치:
bashcomposer require laminas/laminas-db
1DB 수동 생성
DB 예제를 실행하기 전에 ServBay DB 서비스에서
servbay_zend_app
데이터베이스를 미리 수동 생성하세요. ServBay 콘트롤 패널을 통해 phpMyAdmin, pgAdmin, MongoDB Compass 등으로 접근 가능.- MySQL/MariaDB 기본 사용자:
root
, 비밀번호:password
- PostgreSQL 기본 사용자:
root
, 비밀번호:password
- MySQL/MariaDB 기본 사용자:
테이블 생성 스크립트 작성 및 실행
예:
create_users_table.php
라는 PHP 파일을 프로젝트에 생성, 아래 코드와 같이 작성:php// ... 번역: // MySQL 또는 MariaDB 사용 가정 // ServBay 기본 정보: 비밀번호 password, 호스트 127.0.0.1 // SQL 생성 후 예외 처리 등 // 성공 시 "users 테이블이 성공적으로 생성되었습니다." 출력, 실패 시 에러 메시지
1
2
3
4
5참고: 이 코드는 수동 실행 예시입니다. 실제에서는 Laminas Migrations로 DB 스키마를 관리하게 됩니다.
PHP CLI로 아래처럼 스크립트 실행:
bashphp create_users_table.php
1
MySQL 연동 예제
컨트롤러에서 MySQL DB에 연결해 데이터 추가 및 조회 기능을 살펴봅니다.
DB 연결 정보 설정
config/autoload/global.php
파일에서 MySQL 접속 정보 설정:php// ... 번역: // config/autoload/global.php // 'db' => [ ... ] // 데이터베이스명이 존재해야 함, ServBay 기본 사용자/비밀번호/호스트/포트/문자셋 등이 포함됨
1
2
3
4컨트롤러 팩토리 설정(module.config.php)
컨트롤러에서
Laminas\Db\Adapter\Adapter
를 DI로 받아오기 위해, 팩토리 정의가 필요합니다.module/Application/config/module.config.php
의controllers
영역을 아래처럼 수정:php// ... 번역: // controllers -> factories 설정 // Service Manager에서 Adapter를 꺼내 컨트롤러에 주입 // service_manager에 AdapterInterface 별칭 및 Adapter의 팩토리 등록
1
2
3
4라우팅 설정(module.config.php)
MySQL 예제용 라우터 추가:
php// ... 번역: // /mysql-add (사용자 추가) // /mysql (전체 사용자 조회) // routes 하위에 추가
1
2
3
4컨트롤러 메서드 추가(IndexController.php)
IndexController
에mysqlAddAction
,mysqlAction
등 추가:php// ... 번역: /** * MySQL로 users 테이블에 사용자 추가 */ public function mysqlAddAction() { // INSERT 실행, 성공/실패 메시지 반환 } /** * MySQL로 users 테이블의 전체 내용 조회 */ public function mysqlAction() { // SELECT 실행, JSON 변환 후 뷰에 전달 } // ... 기타 액션
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17뷰 파일 생성
module/Application/view/application/index/mysql-add.phtml
:php<h1><?php echo $this->message; ?></h1>
1module/Application/view/application/index/mysql.phtml
:php<h1>MySQL Users</h1> <pre><?php echo $this->users; ?></pre>
1
2MySQL 예제 접근
ServBay에서 MySQL 서비스가 실행 중이어야 합니다.
https://servbay-zend-test.local/mysql-add
접속 → "MySQL User added successfully." 메시지 출력.https://servbay-zend-test.local/mysql
→ users 테이블 JSON 데이터 확인.
PostgreSQL 연동 예제
PostgreSQL DB에 연결해 사용자 데이터 조회/추가 기능 예시.
DB 연결 정보 설정
config/autoload/global.php
파일에서 PostgreSQL 접속 정보 설정:php// ... 번역: // 'db' => [드라이버: Pdo_Pgsql, 포트: 5432 등]
1
2컨트롤러 팩토리 설정
MySQL 예제에서 이미 설정됐다면, 추가 수정 불필요.
라우팅 설정(module.config.php)
PostgreSQL 예제용 라우터 추가:
php// ... 번역: // /pgsql-add (사용자 추가), /pgsql (사용자 전체 조회) // routes 하위에 추가
1
2
3컨트롤러 메서드 추가(IndexController.php)
IndexController
에pgsqlAddAction
,pgsqlAction
추가:php// ... 번역: /** * PostgreSQL로 users 테이블에 사용자 추가 */ public function pgsqlAddAction() { // INSERT 실행, 성공/실패 메시지 반환 } /** * PostgreSQL로 users 테이블 전체 조회 */ public function pgsqlAction() { // SELECT 실행, JSON 변환 후 뷰에 전달 }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16뷰 파일 생성
module/Application/view/application/index/pgsql-add.phtml
:php<h1><?php echo $this->message; ?></h1>
1module/Application/view/application/index/pgsql.phtml
:php<h1>PostgreSQL Users</h1> <pre><?php echo $this->users; ?></pre>
1
2PostgreSQL 예제 접근
ServBay의 PostgreSQL 서비스 실행 필요.
https://servbay-zend-test.local/pgsql-add
로 사용자 추가, "PostgreSQL User added successfully." 메시지 확인.https://servbay-zend-test.local/pgsql
에서 사용자 JSON 데이터 확인.
Memcached 연동 예제
Zend Framework 컨트롤러에서 Memcached로 데이터 캐싱하는 방법.
Memcached 어댑터 설치
Composer로 Laminas Cache의 Memcached 스토리지 어댑터 설치:
json// ... 번역: "require": { "laminas/laminas-cache-storage-adapter-memcached": "^2.0" // 추가 } // composer update 실행으로 의존성 설치
1
2
3
4
5ServBay는 PHP
memcached
확장이 사전 설치되어 있습니다.라우팅 설정(module.config.php)
/memcached
라우터 추가:php// ... 번역: // router > routes > 'memcached' 추가
1
2컨트롤러 메서드 추가(IndexController.php)
memcachedAction
추가:php// ... 번역: /** * Memcached 사용 예제 */ public function memcachedAction() { // 127.0.0.1:11211에 연결 // CACHE MISS/HIT 처리 후 메시지 반환 }
1
2
3
4
5
6
7
8
9뷰 파일 생성
module/Application/view/application/index/memcached.phtml
:php<h1>Memcached Example</h1> <p><?php echo $this->message; ?></p>
1
2Memcached 예제 접근
Memcached 서비스 실행 필수.
https://servbay-zend-test.local/memcached
첫 접속에 "CACHE MISS" 메시지, 300초 내 재접속 시 "CACHE HIT" 표시, 타임스탬프 불변.
Redis 연동 예제
Zend Framework 컨트롤러에서 Redis를 이용한 데이터 캐싱/저장 방식.
Redis 어댑터 설치
Composer로 Laminas Cache의 Redis 스토리지 어댑터 설치:
json// ... 번역: "require": { "laminas/laminas-cache-storage-adapter-redis": "^2.0", // 추가 "ext-redis": "*" // PHP의 redis 확장 필수 } // composer update 실행
1
2
3
4
5
6ServBay는 PHP의
redis
확장을 이미 설치하고 있습니다.라우팅 설정(module.config.php)
/redis
라우터 추가:php// ... 번역: // router > routes > 'redis' 추가
1
2컨트롤러 메서드 추가(IndexController.php)
redisAction
추가:php// ... 번역: /** * Redis 사용 예제 */ public function redisAction() { // 127.0.0.1:6379에 연결 // CACHE MISS/HIT 처리 후 메시지 반환 }
1
2
3
4
5
6
7
8
9뷰 파일 생성
module/Application/view/application/index/redis.phtml
:php<h1>Redis Example</h1> <p><?php echo $this->message; ?></p>
1
2Redis 예제 접근
Redis 서비스 실행 필요.
https://servbay-zend-test.local/redis
첫 접속에 "CACHE MISS" 메시지, 300초 내 재접속 시 "CACHE HIT" 표시 및 시간 불변(데이터가 캐시에서 읽힌다는 의미).
요약
위 단계를 따라하면 ServBay 로컬 개발 환경에서 Zend Framework(Laminas) 프로젝트를 성공적으로 생성·설정·실행할 수 있습니다. ServBay의 "웹사이트" 기능 활용으로 웹 서버를 프로젝트 public 폴더로 연결하고, MySQL, PostgreSQL, Memcached, Redis 등 ServBay의 데이터베이스/캐시 서비스를 프로젝트에 쉽게 통합하는 방법을 익히게 됩니다.
ServBay는 로컬 개발 환경 구축과 관리를 크게 단순화하여, 개발자는 코드와 프로젝트에 집중할 수 있습니다. ServBay의 풍부한 패키지와 유연한 설정으로, 로컬에서 실제 운영환경과 유사하게 개발 효율성을 극대화할 수 있습니다.