Textcube (이하 텍스트큐브) 1.8의 첫 발표 후보 (1.8.8062.20091015)를 공개합니다.
텍스트큐브 1.8은 텍스트큐브 1.7을 기반으로 새로운 환경에 대응하기 위하여 하부 구조를 재설계하는 첫 버전입니다. 원래 예정되었던 텍스트큐브 2.0 로드맵 이전에 텍스트큐브 2.0이 설치되기 위한 제반 환경의 구축 및 홍보를 위한 버전입니다.
텍스트큐브 1.8은 1.7 코어의 하부 구조를 새로운 기반인 PHP 5.2 / MySQL 4.1의 기능을 충분히 활용하여 개선함과 동시에 대량 트래픽에 대한 대응 및 다양한 데이터베이스 지원과 텍스트큐브 2.0 프레임웍의 일부 테스트를 목표로 합니다.
주의사항
이 버전은 테스트를 위한 버전입니다. 관련한 인터페이스 및 코드 규격은 언제든지 변경될 수 있습니다. 또한 안정성에 대한 검증이 되지 않은 버전입니다. 실제 사용하는 블로그에는 적용하지 않는 것을 권장합니다.
업그레이드 하신 경우 반드시 블로그 주소 끝에 /checkup을 붙여서 데이터베이스 구조를 변경하시기 바랍니다. 그렇지 않으면 정상적으로 동작하지 않습니다.
또한 텍스트큐브 1.8은 PHP 5.2 이하의 버전에서 정상적으로 동작하지 않을 수 있습니다. 설치하는 서버의 PHP 버전이 5.2 이상인지 반드시 확인하시기 바랍니다.
텍스트큐브 1.8의 대부분의 기능 변경점과 버그 수정은 텍스트큐브 1.7.8에 백포트되어 선반영 된 상태입니다. 아래는 텍스트큐브 1.8에서 고유하게 변경된 내용입니다.
텍스트큐브 1.7.8 코어와 비교하여 텍스트큐브 1.8 발표후보 1에서 변경된 점은 다음과 같습니다.
아래는 변경사항 기록입니다.
more..
추가된 점
- 블로그 : 방명록에서도 단축키 지원 (#1037)
- 블로그 : 메모리 설정이 24M 미만인 경우 PHP의 메모리 사용량을 24M으로 설정 (#1073)
- 블로그 : 설치시 데이터 베이스 관련 설명 추가 (#1103)
- 블로그 : 카테고리별 RSS/ATOM 출력 지원 (#1077)
- 블로그 : 태그별 RSS/ATOM 출력 지원 (#1077)
- 블로그 : 검색 결과의 RSS/ATOM 출력 지원 (#1077)
- 블로그 : 라인 기능 (인스턴트 블로깅 기능) 추가 (#1300)
- 블로그 : 최근 수정일자 출력 지원 (#1081)
- 블로그 : 공지글 출력 갯수 변경 지원 (#1241)
- 블로그 : HTML5 형식의 스킨을 만들 경우 generator 코드 지원 (#1309)
- 블로그 : 서버의 보안상 쿠키 변조에 의하여 로그인에 성공해도 계속 로그인을 시도하는 서버에서도 로그인이 가능하도록 함 (#1322)
- 블로그 : localhost 에 설치할 경우에도 동작하는 기능 추가
- 블로그 : 피드 출력시 전문을 공개하는 경우 피드의 끝에 댓글을 남길 수 있는 링크 추가 (#1345)
- 관리패널 : 백업시 백업 파일에 블로그 식별자가 들어가도록 함 (#1286)
- 관리패널 : 관리 패널의 하위 메뉴의 가독성 개선 (#1288)
- 관리패널 : 관리 패널의 댓글 보기에서 바로 수정 지원 (#1188)
- 관리패널 : 관리 패널 스킨 선택 화면에 미리 보기 도입 (#1288)
- 관리패널 : 태그 정리 및 관리/변경 페이지 지원 (#1248)
- 플러그인 : 플러그인에서도 언어팩 지원 (#1154)
- 플러그인 : BlogAPI 사용시 동작하는 이벤트 추가 (#1268)
- 에디터 : 에디터 지원 코드 재작성
- 에디터 : 브라우저가 지원하는 경우, geolocation API를 지원하여 글 정보에 추가함 (#1291)
- 일반 : Singleton 패턴 도입 (#1153)
- 일반 : URL-based Dispatching 구조 추가 (#1156)
- 일반 : NAF 1.5 도입
- 일반 : DBMS의 포트 번호를 설치시 입력받도록 함 (#1276, #1277)
- 일반 : memcached 가속 지원(알파) (#1071)
- 일반 : MySQLi 데이터베이스 지원 (#1066)
- 일반 : PostgreSQL 데이터베이스 지원 (#1276)
- 일반 : Cubrid 데이터베이스 지원 (#1277)
- 일반 : EAF/NAF 에서 범용적인 이벤트 핸들러 지원 (#1134)
변경된 점
- 블로그 : 전체 하부 구조 변경 (#824)
- 블로그 : 컴포넌트 자동 로드 지원 (#824)
- 블로그 : 휴지통의 댓글 출력시 내용을 잘라서 출력함. (#1080)
- 블로그 : WebSlice 지원을 치환자를 통해서만 지원하도록 변경 (#1231)
- 블로그 : 피드 출력시 스팸을 막기 위해 도입되었던, 저자 이름의 괄호 처리를 제거 (#1302)
- 플러그인 : listener 의 기술 방법을 tag 와 통일함.
- 플러그인 : ViewPostTitle 이벤트가 트랙백 출력때는 동작하지 않도록 수정 (#1258)
- 일반 : 스킨 디렉토리 구조 변경
- 일반 : 권한 설정 테이블 네이밍 변경 (#1150)
- 일반 : 언어팩 기반 루틴 재작성 및 구조 변경 (#1154)
- 일반 : PHP 5.2 이상에 대응하도록 코드 변경 (#824)
- 일반 : 일부 서버에서 텍스트큐브 에이전트의 접근 방식을 막는 문제 수정 (#1223)
- 일반 : 리퍼러 지원 코드가 블로그 속도를 느리게 만드는 부분 개선 (#1261)
버그 수정
- 블로그 : 첨부파일 캐시 버그로 특정 디렉토리 접근 시 백지가 출력되는 현상 수정 (#1073)
- 블로그 : 첨부파일 캐시 처리시 첨부파일이 없는 경우를 검사하지 않아 블로그가 백지로 출력될 수 있는 문제 수정 (#1073)
- 블로그 : 이메이징(플래쉬 갤러리)의 버튼 요소들이 가운데 정렬되지 않는 문제 수정 (#1043)
- 일반 : 서버의 Zend 옵션에 따라 OpenID 로그인이 전혀 동작하지 않는 문제 수정 (#1078)
- 플러그인 : 모블로깅 플러그인에서 글 작성 후 캐시를 갱신하지 않는 문제 수정 (#1230)
- 관리패널 : 마지막 관리 패널 상위 메뉴의 하위 메뉴가 두 번 중복출력되는 문제 수정 (#1318)
- 관리패널 : 글 목록에서 여러 글을 공개/비공개/발행을 지정하는 경우 페이지를 이동하려고 하는 동작 수정 (#1325)
- 모바일 : 아이폰 모드에서 그림 파일 출력에 발생하는 문제 수정 (#1321)
아래는 1.8에서 변경된 부분들 중 지원 환경, 스킨 및 플러그인에 대한 안내문입니다.
더보기...
IIS / Nginx 웹서버 지원
텍스트큐브 1.7.6 이후의 버전은 IIS를 지원합니다. 또한 텍스트큐브 1.8부터 공식적으로 Nginx 웹서버의 설치를 지원합니다. 설치 및 설정에 관한 내용은 소스에 포함되어 있는 /documents/INSTALL 및 setup_nginx.txt 문서를 참고하시기 바랍니다..
언어팩 구조 변경 및 플러그인 언어 리소스 지원 안내
기존의 언어팩 지원 구조가 변경되었습니다. /language 에서 /resource/locale 하위로 이동되었으며, 하나의 파일로 언어를 처리하지 않고 부분별로 따로 언어팩을 지원합니다. blog, owner, setup, checkup, mobile 안에 언어팩이 별도로 모두 들어 있습니다. 번역을 위해서는 원하는 부분부터 차례로 번역할 수 있습니다.
또한 플러그인에서도 언어팩을 사용할 수 있습니다. 플러그인 디렉토리 안에 locale 디렉토리를 만들고, 그 안에 언어 코드 이름의 파일을 넣으면 플러그인에서 여러 언어를 지원할 수 있습니다. 플러그인에서
- _t() 함수는 안의 언어 문자열을 번역해줍니다.
- 예) _t("가나다라") 의 경우, 현재 언어팩 설정에 따라 "가나다라" 를 번역해줍니다.
- _f() 함수는 _t() 와 동일하지만, 문자열의 일부를 다르게 패치할 수 있습니다.
- 예) _f("오늘은 %1 번 졸았습니다",7) 의 경우, %1을 뒤의 숫자인 7로 대치한 결과가 출력됩니다. %n 은 원하는 만큼 쓸 수 있습니다.
언어팩은 php 형식의 파일이며, $__text[index] = value 의 형태로 작성되어야 합니다.
예) $__text["가나다라"] = "abcd";
스킨 치환자 추가
카테고리 피드 지원
텍스트큐브 글 내에서 현재 글의 같은 카테고리 내의 최근 글을 출력하는 치환자가 두 개 추가 되었습니다.
- [##_article_rep_category_rssurl_##] : 카테고리 RSS 의 링크입니다.
- [##_article_rep_category_atomurl_##] : 카테고리 ATOM 의 링크입니다.
또한 블로그 설정에서 카테고리 출력 부분에도 RSS 링크를 출력할 수 있는 옵션이 추가되었습니다. 이 옵션을 사용하기 위해서는 현재는 해당 카테고리 부분의 디자인이 스킨에 반영되어 있어야 합니다. 기본적으로 포함되어 있는 coolant 스킨의 디자인을 참조하시기 바랍니다.
카테고리 리스트 / 태그 리스트 / 검색 결과 피드 지원
텍스트큐브 1.8부터는 목록이 출력되는 모든 곳에서 피드를 지원합니다. <s_list> 안에 추가하시면 됩니다.
- s_list 영역
- [##_list_rss_url_##] : 리스트의 RSS 피드 주소입니다.
- [##_list_atom_url_##] : 리스트의 ATOM 피드 주소입니다.
글별 댓글/트랙백 및 통합 피드 지원
텍스트큐브 1.8부터는 각 글에 달리는 댓글, 트랙백 및 둘 모두에 대한 ATOM 피드를 추가로 지원합니다.
- s_article 영역
- [##_article_rep_response_rssurl_##] : 해당 글의 댓글+트랙백 RSS 주소 (1.6에서 추가)
- [##_article_rep_comment_rssurl_##] : 해당 글의 댓글 RSS 주소 (1.6에서 추가)
- [##_article_rep_trackback_rssurl_##] : 해당 글의 트랙백 RSS 주소 (1.6에서 추가)
- [##_article_rep_response_atomurl_##] : 해당 글의 댓글+트랙백 ATOM 주소 (1.8에서 추가)
- [##_article_rep_comment_atomurl_##] : 해당 글의 댓글 ATOM 주소 (1.8에서 추가)
- [##_article_rep_trackback_atomurl_##] : 해당 글의 트랙백 ATOM 주소 (1.8에서 추가)
향상된 WebSlice 지원
텍스트큐브 1.8부터는 WebSlice를 명시적으로 스킨에 추가해야 지원합니다.
- s_rctps_rep (최근 글목록) 를 둘러싸는 s_rctp>
- s_rctrp_rep (최근 코멘트) 를 둘러싸는 s_rctrp
- s_rcttb_rep (최근 트랙백) 를 둘러싸는 s_rcttb
라인 기능 추가
텍스트큐브에 빠르게 글을 적는 기능인 라인 기능이 추가되었습니다. 이를 지원하기 위한 스킨 문법이 추가 되었습니다.
- s_line 영역
- [##_line_rssurl_##] : 라인의 RSS 피드 주소입니다.
- [##_line_atomurl_##] : 라인의 ATOM 피드 주소입니다.
- s_line_rep 반복 영역
- [##_line_rep_regdate_##] 라인의 등록 시간. 현재 시간부터 얼마 전을 보여줍니다.
- [##_line_rep_content_##]라인의 내용.
사용된 예제는 기본 스킨인 coolant를 참고하시기 바랍니다. 정식 발표 전까지 다른 치환자들이 추가될 수 있으므로, 관련하여 의견을 포럼에 남겨주시면 검토 후 추가하도록 하겠습니다.
아래는 플러그인 제작자들을 위한 하부 구조 변경에 대한 안내입니다.
자세히 보기...
플러그인 / 전역 변수 관련 변경
텍스트큐브 1.8 부터는 1.6/1.7 기술 문서의 안내에 따라 전역변수, 함수, 클래스를 포함한 다양한 부분이 삭제되거나 동작이 변경 되었습니다. 아래는 플러그인 제작자를 위한 간단한 안내입니다.
DBQuery static 클래스 (삭제)
텍스트큐브 1.7까지 지원하던 DBQuery 클래스는 1.8부터 더이상 사용되지 않습니다. 1.7부터 도입된 POD 클래스를 대신 사용하면 거의 같은 동작을 얻을 수 있습니다. 텍스트큐브 1.8은 POD 아답터를 바탕으로 새로 도입되는 DBModel 을 사용하여 데이터 동작 및 모델을 구성합니다.
TableQuery 객체 (삭제)
텍스트큐브 1.7까지 지원했던 TableQuery 객체는 1.8에서는 더이상 사용할 수 없습니다. TableQuery 객체는 NAF 1.5를 기반으로 한 DBModel 객체로 대체되었습니다. DBModel 객체는 TableQuery의 superset이지만, 문법 부분이 변경된 부분들이 있기 때문에 기존의 코드를 그대로 사용할 수는 없습니다. 하지만 기본적으로 동작하는 역할이 비슷하기 때문에, 기존의 코드를 쉽게 변환할 수 있습니다. DBModel 객체는 뒤에서 설명하도록 하겠습니다.
Singleton 구현
텍스트큐브 1.8은 creorix님의 PHP singleton 구현을 바탕으로 모델 구조가 개편되었습니다. 현재는 호환성 모드를 통하여 기존의 모델들을 병행 사용하고 있지만, 텍스트큐브 2로 이전하는 과정에서 모든 코드를 바뀐 구조에 따라 재작성할 예정입니다.
Singleton은 인스턴스를 생성한 후, 그 인스턴스를 메모리에서 지우지 않고 계속 재사용하기 위한 개념입니다. 이를 통하여 전역 변수 의존 / 메모리 사용 효율 및 기존의 MVC 모델이 PHP 언어와 잘 맞지 않는 부분을 극복하고 있습니다.
Singleton 기반으로 작성된 객체는 모델명::getInstance() 로 메모리에서 불러올 수 있습니다. 모든 Singleton 객체는 현재 뷰가 닫힐 때 소멸되며, 그 전까지는 강제로 핸들을 해제하지 않는 한 메모리에 상주합니다.
Context 객체 (추가)
Singleton을 사용하여 새로 구현한 부분 중 대표적인 부분은 Context 객체입니다. Context 객체는 현재 뷰에서 사용하는 모든 설정값을 저장하고 관리합니다. 아래는 사용 예 입니다.
$context = Model_Context::getInstance(); // context 객체를 불러옵니다.
$blogid = $context->getProperty('blog.id'); // 현재의 blog ID를 가져옵니다. 네임스페이스는 .으로 구분합니다.
$blogURL = $context->getProperty('uri.blog'); // 현재 블로그의 상대 주소를 가져옵니다. 두번째 인자를 줄 경우, 그 값이 현재 값이 컨텍스트에 없을 때의 기본값이 됩니다.
$sValue = $context->getProperty('suri.value'); // 현재 뷰를 호출한 주소 정보에서, 주소 쿼리 정보를 가져옵니다.
$context->useNamespace('service'); // 이후의 호출은 네임스페이스를 명시적으로 쓰지 않는 한 service 네임스페이스를 사용합니다.
$usePageCache = $context->getProperty('pageCache'); // service 네임스페이스 안의 pageCache 값을 읽어 옵니다.
만약 플러그인 안에서 context를 사용할 경우, 네임스페이스를 사용하지 않으면 자동으로 현재 플러그인의 이름의 네임스페이스가 됩니다. 참고하시기 바랍니다.
피드백
테스트 중 개선에 대한 건의 사항이나 버그 보고는 태터 네트워크 재단 / 태터앤 프렌즈 포럼 의 아이디어 포럼이나 버그 보고 및 품질 검수 포럼으로 부탁 드립니다.
소스에 대하여 궁금하거나 변경사항을 추적하고 싶은 분들께서는 텍스트큐브 소스 내의 doc 디렉토리에 여러 문서들이 있으므로 참고하시기 바랍니다.
아래의 링크에서 다운로드 할 수 있습니다.
이 글의 관련글(트랙백) 주소 : 이 글에는 트랙백을 보낼 수 없습니다
2009/10/15 11:13 PERMALINK MODIFY/DELETE REPLY
수고 많으셨습니다~ ^^/
2009/10/16 12:19 PERMALINK MODIFY/DELETE REPLY
드디어 RC 버전이 출시 됐네요~~
당장 설치해 봐야 겠습니다^^
감사합니다... 즐거운 하루 되세요`~~ ^^
2009/10/16 19:14 PERMALINK MODIFY/DELETE REPLY
고생 많으셨습니다.
기존의 블로그에 덮어 쓴 경우 로그인이 되지 않아 확인해 보니 Users 테이블의 암호 필드의 길이가 10이더군요. 그전에는 32이였는데,,, 결국 32로 테이블를 바꿨지만 여전히 로그인이 안되고 있습니다. 확인 부탁드립니다.
2009/10/24 05:06 PERMALINK MODIFY/DELETE
음, 그런 경우는 아직 저희가 발견하지 못했지만 혹시 발생할 수 있는지 살펴보도록 하겠습니다. 우선은 임시로 mysql의 md5 함수를 이용해서 비밀번호를 다시 세팅해주시면 됩니다. ^^
2009/10/17 01:06 PERMALINK MODIFY/DELETE REPLY
1.7.7에서 백업 및 복구 과정으로 1.8rc로 업뎃한 결과
공지사항과 링크가 날라가네요.
2009/10/19 20:46 PERMALINK MODIFY/DELETE REPLY
추가된 기능을 보면 바꾸고 싶은데 바뀐 부분이 많아 적응하려면 시간이 꽤 걸릴 것 같습니다.