ServBay에서 ThinkPHP 8 프로젝트 생성 및 실행하기
이 문서에서는 강력한 로컬 웹 개발 환경인 ServBay를 사용하여 ThinkPHP 8 프레임워크 기반의 PHP 프로젝트를 빠르게 생성, 설정 및 실행하는 방법을 안내합니다. ServBay는 미리 구성된 PHP 환경, 웹 서버(Caddy 또는 Nginx), 다양한 데이터베이스를 제공하여 ThinkPHP 프로젝트의 로컬 구축을 매우 간편하게 만듭니다.
ThinkPHP란?
ThinkPHP는 중국에서 시작된 오픈소스, 빠르고 간단한 객체지향 PHP 개발 프레임워크입니다. 단순성, 효율성을 철저히 추구하며, 개발자가 현대적 웹 애플리케이션을 구축하는 데 필요한 다양한 도구를 제공합니다. 사용이 간편하고, 강력한 ORM, 유연한 라우팅, 내장 템플릿 엔진, 캐시 지원 등 풍부한 기능을 갖추고 있으며 활발한 커뮤니티가 지원합니다. 중국 내 PHP 개발 분야에서 널리 쓰이고 있습니다.
ThinkPHP의 주요 특징 및 장점
- 단순하고 효율적: 프레임워크 디자인이 간결하며, 코드 구조가 명확해 이해와 유지보수가 쉽고 개발 속도가 빠릅니다.
- 풍부한 기능: MVC 구조, ORM, 템플릿 엔진, 캐시, 세션 관리, 권한 인증, 폼 토큰 등 웹 개발에 필요한 기능 컴포넌트를 내장했습니다.
- 강력한 ORM: 쉽고도 강력한 객체-관계 매핑을 제공해 데이터베이스 작업을 단순화합니다.
- 유연한 라우팅: 다양한 방식의 라우팅을 지원해 복잡한 URL 구조에도 대응할 수 있습니다.
- 확장성, 생태계: 다양한 확장 라이브러리와 플러그인, 활발한 개발자 커뮤니티가 풍부한 리소스를 제공합니다.
- 지속적인 업데이트: 프레임워크는 빠른 속도로 버전이 업그레이드되며, PHP와 웹 개발 최신 트렌드를 적극 반영합니다.
ThinkPHP는 소규모 프로젝트부터 대규모 기업 웹 애플리케이션까지 다양한 규모의 웹 개발 요구에 적합합니다.
ServBay로 ThinkPHP 8 프로젝트 구축하기
ServBay는 ThinkPHP 8 프로젝트의 로컬 개발에 최적의 환경을 제공합니다.
- 다양한 버전의 PHP 및 주요 확장 미리 설치 완료
- 내장 웹 서버(Caddy 또는 Nginx)로 사이트 빠른 설정 가능
- MySQL, PostgreSQL, MongoDB, Redis, Memcached 등 데이터베이스 서비스 통합 제공
- 내장 Composer 의존성 관리 도구 포함
이 가이드에서는 ServBay의 기능을 이용해 ThinkPHP 8 프로젝트를 빠르게 구축하는 절차를 설명합니다.
사전 준비사항
아래 작업이 완료되어 있음을 확인하세요.
- macOS 또는 Windows에 ServBay 다운로드 및 설치를 완료
- ServBay가 실행 중이며 필요한 PHP 버전(ThinkPHP 8은 PHP 8.0 이상 필요)과 DB 서비스(MySQL, PostgreSQL, Redis, Memcached 등)가 실행 중임을 확인. ServBay 제어판의 "소프트웨어 패키지" 탭에서 서비스 활성화 가능
ThinkPHP 프로젝트 생성
ServBay는 모든 로컬 사이트 파일을 /Applications/ServBay/www
폴더에 통합 저장할 것을 권장합니다. ServBay의 사이트 관리가 더욱 용이해집니다.
Composer 설치 확인
ServBay는 설치 시 Composer를 기본 제공하므로 별도의 설치는 필요 없습니다. ServBay 터미널에서
composer --version
명령어로 Composer 설치를 확인하세요.Composer로 ThinkPHP 프로젝트 생성
macOS 터미널을 열고, ServBay 사이트 루트에서 다음 명령어로 새 ThinkPHP 8 프로젝트를 생성합니다.
bashcd /Applications/ServBay/www composer create-project topthink/think servbay-thinkphp-app
1
2위 명령으로
/Applications/ServBay/www
하위에servbay-thinkphp-app
폴더가 생성되고, ThinkPHP 8 핵심 파일과 의존성이 설치됩니다.프로젝트 디렉터리 이동
프로젝트가 생성되면 아래 명령으로 디렉터리에 진입하세요.
bashcd /Applications/ServBay/www/servbay-thinkphp-app
1
프로젝트 기본 설정 초기화
프로젝트 생성이 끝나면 몇 가지 기본 설정이 필요합니다.
데이터베이스 연결정보 설정
ThinkPHP의 데이터베이스 설정은 일반적으로
config/database.php
파일에서 관리합니다. ServBay에서 시작한 데이터베이스 환경에 맞게 이 파일의 연결 정보를 수정합니다.ServBay 기본 MySQL 서비스 사용 예시는 아래와 같습니다.
php<?php // config/database.php return [ // 기본 DB 연결 정보 'default' => env('database.driver', 'mysql'), // 각 DB 연결 설정 'connections' => [ 'mysql' => [ // 데이터베이스 타입 'type' => 'mysql', // 서버 주소 'hostname' => env('database.hostname', '127.0.0.1'), // 데이터베이스 이름 'database' => env('database.database', 'servbay_thinkphp_app'), // 프로젝트 별 DB 생성 권장 // 사용자명 'username' => env('database.username', 'root'), // 비밀번호 'password' => env('database.password', 'password'), // ServBay 기본 비밀번호, 로컬 개발용! // 포트번호 'hostport' => env('database.hostport', '3306'), // ... 그 외 설정 ... ], // ... 다른 DB 연결 ... ], ];
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중요 안내:
database
값은 해당 프로젝트용으로 실제 생성한 DB 이름으로 변경하세요(ServBay의 phpMyAdmin이나 Adminer에서 예:servbay_thinkphp_app
DB 생성).- ServBay의 기본
root
비밀번호는password
입니다. 이 비밀번호는 오직 로컬 개발 환경에서만 사용하세요!. 실서비스 환경에서는 반드시 강력한 암호와 최소 권한 사용자만 사용하세요. - 환경변수를 관리하는
.env
파일을 활용한다면, 해당 값이config/database.php
의 기본값을 덮어씁니다.
웹 서버 설정
ThinkPHP의 진입점 파일은 public/index.php
이며 URL Rewrite 규칙이 꼭 필요합니다. ThinkPHP 라우팅은 단순 정적 파일 처리와 다르므로, ServBay의 내장 Rewrite 규칙을 이용해야 합니다.
사이트 설정 화면에서 Rewrite 규칙 드롭다운에서 ThinkPHP
를 선택 후 저장하세요.
사이트 설정 전체 과정은 첫 번째 사이트 추가하기에서 자세히 안내합니다.
예제 코드 추가
사이트 설정과 라우팅 테스트 및 기본 기능 확인을 위해 간단한 라우트와 컨트롤러를 추가합니다.
프로젝트의 /Applications/ServBay/www/servbay-thinkphp-app/route/app.php
파일을 편집하여 다음 코드를 추가합니다.
php
<?php
// route/app.php
use think\facade\Route;
// servbay 라우트 정의. /servbay 접속 시 익명 함수 실행
Route::get('servbay', function () {
return 'Hello ServBay!';
});
// ... 기타 라우트 ...
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
사이트 접속 확인
위 모든 단계를 완료한 뒤 웹 브라우저에서 설정한 로컬 도메인과 예제 라우트의 URL을 입력해 접속하세요.
https://thinkphp.servbay.demo/servbay
설정이 정상적이라면 브라우저에서 Hello ServBay!
가 출력됩니다. 이로써 ThinkPHP 8 프로젝트가 ServBay 환경에서 성공적으로 동작하며, 웹 서버 및 PHP-FPM 설정이 모두 적용됐음을 의미합니다.
NoSQL 데이터베이스 활용 예시
ServBay에는 Memcached, Redis 등 다양한 NoSQL 서비스가 기본 제공됩니다. ThinkPHP는 캐시 추상화 레이어로 이러한 NoSQL 서비스를 간편하게 캐시 드라이버로 연동할 수 있습니다.
Memcached 예시
Memcached 확장 설치 확인
ServBay PHP 패키지는 Memcached 확장까지 기본 탑재되어 있습니다. ServBay 제어판 "소프트웨어 패키지" 탭에서 Memcached 서비스가 실행 중인지 확인하세요.
Memcached 캐시 설정
config/cache.php
파일을 편집하여 ThinkPHP가 Memcached를 캐시 드라이버로 사용하도록 설정합니다.php<?php // config/cache.php return [ // 기본 캐시 드라이버 'default' => env('cache.driver', 'memcached'), // 캐시 연결 설정 'stores' => [ 'memcached' => [ // 캐시 타입 'type' => 'memcached', // 서버 주소 'host' => '127.0.0.1', // ServBay Memcached 기본 주소 'port' => 11211, // ServBay Memcached 기본 포트 'persistent' => false, 'expire' => 0, 'timeout' => 0, 'prefix' => '', ], // ... 기타 캐시 설정 ... ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23코드 내에서 Memcached 캐시 사용
컨트롤러 또는 라우트에서 ThinkPHP의
Cache
파사드를 사용해 Memcached와 연동합니다.php<?php use think\facade\Cache; use think\facade\Route; Route::get('/memcached-example', function () { // 캐시 저장, 유효시간 600초 Cache::set('my_memcached_key', 'This value is from Memcached!', 600); // 캐시 조회 $value = Cache::get('my_memcached_key'); return 'Value from Memcached: ' . $value; });
1
2
3
4
5
6
7
8
9
10
11
12
13https://thinkphp.servbay.demo/memcached-example
에서 동작 확인 가능합니다.
Redis 예시
Redis 확장 설치 확인
ServBay PHP 패키지는 Redis 확장도 기본 포함되어 있습니다. ServBay 제어판 "소프트웨어 패키지" 탭에서 Redis 서비스 활성화 여부를 확인합니다.
Redis 캐시 설정
config/cache.php
파일을 편집하여 ThinkPHP가 Redis를 캐시 드라이버로 사용하도록 설정합니다.php<?php // config/cache.php return [ // 기본 캐시 드라이버 'default' => env('cache.driver', 'redis'), // 캐시 연결 설정 'stores' => [ 'redis' => [ // 캐시 타입 'type' => 'redis', // 서버 주소 'host' => env('cache.host', '127.0.0.1'), // ServBay Redis 기본 주소 // 포트 'port' => env('cache.port', 6379), // ServBay Redis 기본 포트 // 비밀번호(ServBay 기본은 없음) 'password' => env('cache.password', ''), // ServBay Redis 기본 비밀번호 없음 'select' => 0, 'timeout' => 0, 'expire' => 0, 'persistent' => false, 'prefix' => '', ], // ... 기타 캐시 설정 ... ], ];
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유의사항: ServBay에서는 Redis 비밀번호가 기본으로 설정되지 않습니다. 직접 비밀번호를 지정했다면
password
항목에 입력하세요.코드 내에서 Redis 캐시 사용
컨트롤러 또는 라우트에서 ThinkPHP의
Cache
파사드를 사용해 Redis와 연동합니다.php<?php use think\facade\Cache; use think\facade\Route; Route::get('/redis-example', function () { // 캐시 저장, 영구적으로(혹은 3번째 인자로 시간 지정) Cache::set('my_redis_key', 'Hello from Redis!'); // 캐시 조회 $value = Cache::get('my_redis_key'); return 'Value from Redis: ' . $value; });
1
2
3
4
5
6
7
8
9
10
11
12
13https://thinkphp.servbay.demo/redis-example
에서 테스트해보세요.
관계형 데이터베이스 예시
ServBay는 MySQL, PostgreSQL 등 대표적인 관계형 데이터베이스를 기본 제공하며, ThinkPHP ORM과 연동해 쉽게 사용할 수 있습니다.
ThinkPHP 데이터베이스 마이그레이션 도구 사용
ThinkPHP에선 데이터베이스 구조 변화를 관리하는 마이그레이션 도구를 통해 팀 협업 및 버전 관리를 용이하게 할 수 있습니다.
마이그레이션 도구 설치
프로젝트 루트에서 Composer 명령어로 ThinkPHP 마이그레이션 확장을 설치합니다.
bashcd /Applications/ServBay/www/servbay-thinkphp-app composer require topthink/think-migration
1
2마이그레이션 파일 생성
ThinkPHP CLI로 새 마이그레이션 파일을 생성합니다. 예시로
users
테이블 생성을 위해 다음을 실행:bashphp think migrate:create CreateUserTable
1이 과정에서
database/migrations
폴더에 타임스탬프와 지정한 이름이 함께 붙은 PHP 파일이 생성됩니다(예:20231027100000_create_user_table.php
).마이그레이션 파일 편집
database/migrations
에 생성된 파일의up()
메서드를 열어users
테이블 구조를 정의합니다.php<?php // database/migrations/YYYYMMDDHHMMSS_create_user_table.php use think\migration\Migrator; use think\migration\db\Column; class CreateUserTable extends Migrator { /** * Change Method. * * Write your reversible migrations using this method. * * More information on writing migrations is available here: * http://docs.phinx.org/en/latest/migrations.html#the-change-method * * The following commands can be used in this method and Phinx will * automatically reverse them when rolling back: * * createTable * renameTable * addColumn * addCustomColumn * renameColumn * addIndex * addForeignKey * createDatabase * renameDatabase * dropTable * dropColumn * dropIndex * dropForeignKey */ public function change() { // createTable 메서드로 테이블 생성 $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => '사용자 이름']) ->addColumn('email', 'string', ['limit' => 100, 'comment' => '이메일 주소']) ->addIndex(['email'], ['unique' => true]) // 유니크 인덱스 추가 ->addTimestamps() // created_at, updated_at 필드 자동 추가 ->create(); // 생성 실행 } // change() 대신 up(), down() 메서드 분리 정의도 가능 /* public function up() { $table = $this->table('users'); $table->addColumn('name', 'string', ['limit' => 50, 'comment' => '사용자 이름']) ->addColumn('email', 'string', ['limit' => 100, 'comment' => '이메일 주소']) ->addIndex(['email'], ['unique' => true]) ->addTimestamps() ->create(); } public function down() { $this->dropTable('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
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데이터베이스 마이그레이션 실행
ServBay 터미널에서 프로젝트 루트 위치에서 아래 명령으로
users
테이블을 생성합니다.bashphp think migrate:run
1성공 시 DB에 새로 생성된
users
테이블이 표시됩니다.
MySQL 예시
ServBay에서 MySQL 서비스가 실행된 상태이며 config/database.php
에 연결 정보가 올바르게 입력되어 있다고 가정합니다.
MySQL 연결 설정
"프로젝트 기본 설정 초기화"에서 설명한 MySQL 연결 예시와 같이
config/database.php
의 설정을 확인 및 수정합니다.코드에서 사용자 데이터 저장
ThinkPHP의
Db
파사드 또는 ORM 모델로 데이터 삽입이 가능합니다. 아래는Db
파사드 활용 예시입니다.php<?php use think\facade\Db; use think\facade\Route; Route::get('/mysql-add-user', function () { try { Db::table('users')->insert([ 'name' => 'ServBay Demo User', 'email' => 'demo@servbay.demo', // 브랜드 예제 이메일 'created_at' => date('Y-m-d H:i:s'), // 시간 자동입력이 없을 경우 수동 추가 'updated_at' => date('Y-m-d H:i:s'), ]); return 'User added successfully!'; } catch (\Exception $e) { return 'Error adding user: ' . $e->getMessage(); } });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17https://thinkphp.servbay.demo/mysql-add-user
에서 데이터 삽입 테스트 가능.코드에서 사용자 데이터 조회
역시
Db
파사드 또는 ORM 모델로 데이터 조회가 가능합니다.php<?php use think\facade\Db; use think\facade\Route; Route::get('/mysql-users', function () { $users = Db::table('users')->select(); // 모든 사용자 데이터 조회 return json($users); // 결과를 JSON으로 반환 });
1
2
3
4
5
6
7
8https://thinkphp.servbay.demo/mysql-users
에서 사용자 DB 데이터를 확인할 수 있습니다.
PostgreSQL 예시
ServBay에서 PostgreSQL 서비스가 실행 중이며 config/database.php
에 연결 정보가 입력되어 있다고 가정합니다.
PostgreSQL 연결 설정
config/database.php
에서 아래와 같이 PostgreSQL 연결 정보를 확인 또는 수정하세요.php<?php // config/database.php (부분) return [ // ... 다른 설정 ... 'connections' => [ // ... MySQL 연결 설정 ... 'pgsql' => [ // 데이터베이스 타입 'type' => 'pgsql', // 서버 주소 'hostname' => env('database.hostname', '127.0.0.1'), // 데이터베이스 이름 'database' => env('database.database', 'servbay_thinkphp_app'), // 프로젝트별 DB 생성 권장 // 사용자명 'username' => env('database.username', 'root'), // 비밀번호 'password' => env('database.password', 'password'), // ServBay 기본 비밀번호, 로컬 개발용! // 포트 'hostport' => env('database.hostport', '5432'), // PostgreSQL 기본 포트 // ... 기타 설정 ... ], // ... 기타 DB 연결 설정 ... ], ];
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중요 안내:
- MySQL과 마찬가지로 프로젝트별로 별도 PostgreSQL 데이터베이스를 생성 후, 설정에 반영하세요.
- ServBay PostgreSQL의 기본
root
비밀번호 역시password
입니다(로컬 개발용).
코드에서 사용자 데이터 저장
ThinkPHP의
Db
파사드 또는 ORM 모델로 데이터 삽입 시,pgsql
연결을 명시합니다.php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-add-user', function () { try { Db::connect('pgsql')->table('users')->insert([ // pgsql 연결 사용 'name' => 'ServBay PgSQL User', 'email' => 'pgsql-demo@servbay.demo', // 브랜드 예제 이메일 // PostgreSQL의 타임스탬프 필드는 마이그레이션 및 ThinkPHP 버전에 따라 수동 입력 필요 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]); return 'PostgreSQL User added successfully!'; } catch (\Exception $e) { return 'Error adding PostgreSQL user: ' . $e->getMessage(); } });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18https://thinkphp.servbay.demo/pgsql-add-user
에서 데이터 삽입 테스트.코드에서 사용자 데이터 조회
Db
파사드 또는 ORM 모델로pgsql
연결을 지정, 데이터 조회가 가능합니다.php<?php use think\facade\Db; use think\facade\Route; Route::get('/pgsql-users', function () { $users = Db::connect('pgsql')->table('users')->select(); // pgsql 연결로 데이터 조회 return json($users); // 결과를 JSON으로 반환 });
1
2
3
4
5
6
7
8https://thinkphp.servbay.demo/pgsql-users
에서 PostgreSQL 사용자 데이터를 확인할 수 있습니다.
요약
위 절차를 따라 ServBay 로컬 개발 환경에서 ThinkPHP 8 프로젝트를 성공적으로 구축, 설정 및 실행할 수 있습니다. ServBay 내장 Composer로 프로젝트 생성, Caddy 웹 서버로 ThinkPHP의 라우팅 처리, 그리고 MySQL, PostgreSQL, Memcached, Redis 등 ServBay의 데이터베이스 서비스를 연동 및 활용하는 법을 익혔습니다.
ServBay를 이용하면 ThinkPHP 등 PHP 프레임워크의 로컬 개발 환경 구축이 훨씬 쉬워지고, 비즈니스 로직에 집중하여 효율적인 개발이 가능합니다. 이제 ServBay가 제공하는 다양한 소프트웨어 패키지와 기능을 적극 활용해 ThinkPHP 애플리케이션을 개발해보세요.