ServBay에서 SCWS PHP 모듈 활성화 및 설정 방법
ServBay는 macOS와 Windows에서 사용 가능한 강력한 로컬 웹 개발 환경으로, PHP, Node.js, Python, Go, Java와 같은 다양한 언어 런타임과 MySQL, PostgreSQL, MongoDB, Redis 등 여러 데이터베이스, 그리고 Caddy, Nginx 등 웹 서버를 통합 제공합니다. 특히 PHP 애플리케이션에서 중국어 텍스트를 처리해야 하는 개발자를 위해, ServBay는 고성능의 SCWS (Simple Chinese Word Segmentation) 중국어 형태소 분석 모듈을 기본 포함하고 있으며, 설정도 매우 간단합니다.
이 문서에서는 ServBay에서 SCWS PHP 확장 기능을 활성화하고, 사전 파일을 설정하며, 예제 코드를 통해 기본 사용 방법까지 자세하게 설명합니다.
SCWS 모듈 개요
SCWS는 오픈 소스 중국어 형태소 분석 엔진으로, 고성능과 높은 정확도를 자랑합니다. 사전 기반과 통계 모델을 결합해 중국어 텍스트를 빠르고 정확하게 형태소 분석할 수 있어, 중국어 검색엔진 구축, 텍스트 마이닝, 콘텐츠 분석, 키워드 추출, 품사 태깅 등 다양한 응용에 적합합니다.
주요 특징
- 고성능 형태소 분석: SCWS는 최적화된 분할 알고리즘을 적용해 대량의 중국어 텍스트 데이터도 신속하게 처리합니다.
- 높은 정확도: 사전과 통계 모델을 결합해 중국어 분할 작업에서 우수한 정확성을 자랑합니다.
- 풍부한 기능: 기본 형태소 분석 외에도 키워드 추출, 품사 태깅 등 고급 기능을 지원합니다.
- 쉽게 통합 가능: 간편한 API 인터페이스로 PHP 애플리케이션에 손쉽게 통합할 수 있습니다.
- 오픈 소스 및 무료: SCWS는 오픈 소스이므로 무료로 사용할 수 있으며, 필요에 따라 커스터마이징도 가능합니다.
ServBay에 선탑재된 SCWS 버전
ServBay는 여러 PHP 버전을 지원하며, 각 버전에 맞는 SCWS 모듈이 사전에 설치되어 있습니다. 본 문서 기준 ServBay는 PHP 5.6부터 PHP 8.4까지 모두 SCWS 1.2.3 확장을 선탑재하고 있습니다.
SCWS 모듈 활성화 방법
기본적으로 SCWS 모듈은 ServBay에서 비활성화되어 있습니다. 활성화하는 방법은 두 가지가 있으며, ServBay 그래픽 인터페이스를 이용하거나 직접 설정 파일을 수정할 수 있습니다.
추천 방법: ServBay UI를 통한 활성화
가장 쉽고 빠른 방법입니다:
- ServBay 메인 화면을 엽니다.
- 좌측 내비게이션에서 **언어 (Languages)**를 클릭 후 PHP를 선택합니다.
- 우측에 나열된 PHP 버전 리스트에서 SCWS를 활성화하려는 PHP 버전(예:
PHP 8.4
)을 선택합니다. - 해당 PHP 버전 오른쪽의 확장 기능 (Extensions) 버튼을 클릭합니다.
- 팝업된 확장 목록에서
SCWS
모듈을 찾습니다. SCWS
왼쪽의 스위치를 켬(일반적으로 초록색)으로 변경합니다.- 화면 하단의 저장 (Save) 버튼을 클릭합니다.
- 변경 사항 적용을 위해 PHP 패키지 재시작 안내가 표시되면, 재시작 (Restart) 버튼을 클릭합니다.
위 과정을 완료하면, 선택한 PHP 버전에서 SCWS 모듈이 성공적으로 활성화됩니다.
수동 설정 파일 수정 (고급 사용자 또는 트러블슈팅용)
더 세밀한 제어가 필요하거나 문제 해결 시 직접 PHP 설정 파일을 수정할 수도 있습니다:
설정 파일 위치 확인: 사용 중인 PHP 버전의
conf.d
디렉터리를 찾습니다. SCWS 설정은 해당 폴더의scws.ini
파일에 있습니다. 일반적으로 파일 경로는 다음과 같습니다:/Applications/ServBay/etc/php/X.Y/conf.d/scws.ini
1여기서
X.Y
는 각 PHP 버전(예:8.4
)으로 변경하세요.scws.ini
파일 편집: 텍스트 에디터로scws.ini
를 엽니다. 아래 내용을 찾습니다:ini[scws] ; Uncomment the following line to enable scws ;extension = scws.so ;scws.default.charset = gbk ;scws.default.fpath = /Applications/ServBay/etc/scws
1
2
3
4
5세미콜론(
;
)을 제거하여extension = scws.so
행을 활성화하세요:ini[scws] ; Uncomment the following line to enable scws extension = scws.so ;scws.default.charset = gbk ;scws.default.fpath = /Applications/ServBay/etc/scws
1
2
3
4
5(선택) 이곳에서 기본 문자셋이나 사전 경로도 설정할 수 있지만, 일반적으로 PHP 코드 내에서 동적으로 지정하는 것이 더 유연합니다. 만약 여기서 설정한다면 해당 행의 세미콜론을 제거하고 값을 수정하세요, 예를 들어 사전 파일이 UTF-8 인코딩일 경우:
ini[scws] ; Uncomment the following line to enable scws extension = scws.so scws.default.charset = utf8 scws.default.fpath = /Applications/ServBay/etc/scws
1
2
3
4
5파일을 저장하고 닫으세요.
PHP 패키지 재시작: ServBay 메인 화면을 열고 **패키지 (Packages)**로 이동하여 설정을 수정한 PHP 버전(예: PHP 8.4) 옆의 재시작 버튼(원형 화살표 아이콘)을 클릭합니다.
SCWS 모듈 정상 로드 여부 확인
모듈을 활성화한 후에는 정상적으로 로드되었는지 확인하는 것이 중요합니다. 가장 널리 쓰이는 방법은 PHP의 phpinfo()
를 확인하는 것입니다:
- ServBay 권장 웹사이트 루트 디렉토리
/Applications/ServBay/www
에scws-test
와 같은 테스트용 하위 폴더를 만듭니다. - 해당 디렉토리(
/Applications/ServBay/www/scws-test
)에phpinfo.php
파일을 만듭니다. - 아래 PHP 코드를
phpinfo.php
에 작성하세요:php<?php phpinfo(); ?>
1
2
3 - ServBay 웹 서버(Caddy 또는 Nginx)가 제대로 설정 및 실행 중이며,
/Applications/ServBay/www
경로가 접근 가능한지 확인하세요. ServBay는 기본적으로/Applications/ServBay/www
에servbay.demo
도메인을 연결합니다. - 브라우저로
https://servbay.demo/scws-test/phpinfo.php
에 접속합니다. - 표시된 PHP 정보 페이지에서 "SCWS" 항목을 찾습니다. SCWS 관련 설정과 정보(버전, 옵션 등)가 표시된다면 정상적으로 모듈이 로드된 것입니다.
(참고: 이미지 경로는 예시이며, 실제 ServBay 문서를 참고하세요)
SCWS 사전 생성 및 설정
SCWS는 사전 기반의 형태소 분석 엔진이기 때문에, 분할 품질은 사용하는 사전에 크게 좌우됩니다. ServBay는 기본 SCWS 사전 및 규칙 파일을 /Applications/ServBay/etc/scws
폴더에 미리 제공합니다. 추가로 사용자 정의 사전도 직접 만들 수 있습니다.
SCWS 사전 파일 형식
SCWS는 기본 텍스트 형식과 xdb 바이너리 형식의 사전 파일을 지원합니다. xdb 형식이 더 빠르고 메모리 사용이 적어 권장됩니다.
기본 텍스트 사전 파일 예시(각 행마다 한 단어, 뒤에 빈도(숫자, 클수록 더 자주 등장), 품사 정보를 선택적으로 추가):
단어1 [빈도1] [품사1]
단어2 [빈도2] [품사2]
...
1
2
3
2
3
예시:
인공지능 1000 n
자연어처리 800 n
ServBay 500 nz
1
2
3
2
3
사용자 정의 단어를 my_dict.txt
와 같이 텍스트 파일로 저장하세요. 파일 인코딩은 사용 환경과 맞게(권장: UTF-8) 지정합니다.
xdb 형식 사전 파일 생성
ServBay는 SCWS에서 제공하는 scws-gen-dict
툴을 사전 설치하여, 텍스트 형식 사전을 xdb로 변환할 수 있도록 합니다.
- macOS 터미널(Terminal)을 엽니다.
cd
명령어로 ServBay의 bin 디렉터리로 이동하거나,scws-gen-dict
의 경로를 직접 지정하여 사용합니다. 일반적으로 다음과 같이 실행합니다:bash/Applications/ServBay/bin/scws-gen-dict -i /path/to/your/my_dict.txt -o /Applications/ServBay/etc/scws/my_dict.utf8.xdb -c utf8
1/path/to/your/my_dict.txt
는 실제 텍스트 사전 파일 경로로 변경하세요.-o
옵션은 xdb 출력 파일 경로로,/Applications/ServBay/etc/scws
폴더를 권장합니다.-c utf8
은 입력 파일 인코딩을 지정합니다.
SCWS에서 사전 파일 사용하기
xdb 파일을 생성했으면, PHP 코드에서 SCWS가 해당 사전을 활용하도록 지정할 수 있습니다:
php
<?php
$scws = scws_new();
$scws->set_charset('utf8'); // 텍스트 및 사전의 인코딩에 맞게 문자셋 지정
// 메인 사전 경로 설정은 ServBay의 기본 사전이나, 생성한 xdb 파일 등
$scws->set_dict('/Applications/ServBay/etc/scws/dict.utf8.xdb');
// 추가 사전이 있다면 다음과 같이 로드
$scws->add_dict('/Applications/ServBay/etc/scws/my_dict.utf8.xdb', SCWS_XDICT_TXT); // SCWS_XDICT_TXT는 사용자 사전 추가를 의미
$scws->set_rule('/Applications/ServBay/etc/scws/rules.utf8.ini'); // 품사 태깅 등 규칙 파일 설정, ServBay에서 기본제공
// ... 이후 형태소 분석 작업 진행 ...
?>
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
set_dict()
는 메인 사전 설정(주로 SCWS 공식 대형 사전), add_dict()
는 사용자 정의 사전 추가에 사용합니다. SCWS_XDICT_TXT
는 사용자 사전 추가를 위한 상수입니다.
SCWS 사용 예제
SCWS 모듈을 활성화하고 사전까지 설정했다면, PHP에서 SCWS 함수를 직접 호출해 형태소 분석을 할 수 있습니다. 아래는 기본적인 형태소 분석 사용 예제입니다:
php
<?php
// SCWS 확장이 로드되어 있는지 확인
if (!extension_loaded('scws')) {
die('SCWS extension is not loaded.');
}
// SCWS 객체 초기화
$scws = scws_new();
if (!$scws) {
die('Failed to initialize SCWS.');
}
// 문자셋 지정 (텍스트와 사전 파일 인코딩과 반드시 일치)
$scws->set_charset('utf8');
// 사전 파일 설정 (ServBay 기본 경로 사용 가능)
// set_dict()는 메인 사전을 지정
$scws->set_dict('/Applications/ServBay/etc/scws/dict.utf8.xdb');
// add_dict()로 추가 사용자 사전 로드 가능
// $scws->add_dict('/Applications/ServBay/etc/scws/my_dict.utf8.xdb', SCWS_XDICT_TXT);
// 규칙 파일 설정 (ServBay 기본 제공), 품사 태깅 등에 활용
$scws->set_rule('/Applications/ServBay/etc/scws/rules.utf8.ini');
// 형태소 분석 모드 설정 (선택, 기본값은 SCWS_XDICT_XPINYIN | SCWS_XDICT_DUALITY)
// SCWS_XDICT_XPINYIN: x 문자(한자가 아닌 문자, 예: email, url 등) 분할
// SCWS_XDICT_DUALITY: 결합형(2-gram) 분할 방식
// $scws->set_ignore(true); // 구두점 무시 여부
// $scws->set_multi(SCWS_MULTI_WORD | SCWS_MULTI_ZHONGCI); // 결합형 분할 단계 설정
// 형태소 분석 대상 중국어 텍스트
$text = "ServBay는 강력한 로컬 웹 개발 환경으로, PHP, Node.js 및 다양한 데이터베이스를 지원합니다.";
// SCWS에 텍스트 전달해 처리 시작
$scws->send_text($text);
// 형태소 분석 결과 가져오기
echo "원본 텍스트: " . $text . "\n\n";
echo "형태소 분석 결과:\n";
// 모든 결과를 순환 출력
while ($result = $scws->get_result()) {
foreach ($result as $word) {
// $word는 'word', 'idf', 'attr'(품사) 등에 대한 연관 배열
echo "단어: " . $word['word'] . " (품사: " . $word['attr'] . ")\n";
}
}
// SCWS 리소스 해제
$scws->close();
?>
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
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
위 코드를 .php
파일(예: scws_example.php
)로 저장해 ServBay 웹 디렉터리(/Applications/ServBay/www/scws-test/
등)에 위치시키고, 브라우저로 https://servbay.demo/scws-test/scws_example.php
에 접속하면 형태소 분석 결과를 확인할 수 있습니다.
주의 사항
- 활성화한 SCWS 모듈 버전이 실제 사용 중인 PHP 버전과 호환되는지 반드시 확인하세요. ServBay는 자동으로 호환성을 처리하지만 수동 설정 시 특히 주의가 필요합니다.
- SCWS의 형태소 분석 품질은 사전의 품질에 직접적으로 좌우됩니다. 특정 분야의 텍스트에는 해당 분야 전문 사전을 사용하거나 생성하시길 권장합니다.
- SCWS 설정 파일(
scws.ini
), 사전 파일(.xdb
), 규칙 파일(.ini
) 경로 지정이 정확해야 하며, PHP 프로세스가 해당 파일을 읽을 수 있는 권한이 있어야 합니다. - PHP 설정 변경 후에는 항상 해당 PHP 패키지를 재시작해야 변경사항이 적용됩니다.
FAQ (자주 묻는 질문)
Q: ServBay UI로 SCWS를 활성화했는데, phpinfo()
에서 SCWS가 보이지 않습니다.
A: 반드시 올바른 PHP 패키지를 재시작했는지 확인하세요. 여러 PHP 버전이 동시에 실행 중일 수 있으니, 사용 중인 웹사이트와 연결된 PHP 버전을 재시작해야 합니다. 여전히 문제라면, scws.ini
파일을 수동으로 수정하고, 경로나 문법 오류 여부를 재점검하세요.
Q: 사용자 정의 사전을 어떻게 생성하고 적용하나요?
A: 본 문서의 “SCWS 사전 생성 및 설정” 항목을 참고해, scws-gen-dict
툴로 텍스트 사전을 xdb 형식으로 변환한 뒤, PHP 코드에서 add_dict()
메소드로 사용자 사전 파일을 추가하세요.
Q: SCWS 규칙 파일(rules.utf8.ini
)은 어떤 역할인가요?
A: 규칙 파일은 품사 태깅 및 특수한 형태소 분석 규칙에 사용됩니다. ServBay는 기본 규칙 파일을 제공하며, 대부분의 경우 별도 수정이 필요 없습니다.
요약
ServBay는 SCWS PHP 중국어 형태소 분석 모듈을 간편하게 활성화하고 관리할 수 있는 환경을 제공합니다. 직관적인 그래픽 UI와 유연한 수동 설정 모두 지원하므로, 개발 과정에서 SCWS를 손쉽게 PHP 프로젝트에 적용할 수 있습니다. ServBay에 기본 포함된 SCWS 도구와 사전 덕분에 바로 사용할 수 있어, 중국어 텍스트 처리(검색, 콘텐츠 분석 등)에 뛰어난 성능을 제공합니다. SCWS의 통합은 ServBay의 풍부한 소프트웨어 생태계와 결합되어, 로컬 개발 환경의 완성도와 실용성을 한층 높여줍니다.