Textcube (이하 텍스트큐브) 1.8의 세번째 발표 후보 (1.8.8161.20091207)를 공개합니다.
텍스트큐브 1.8은 텍스트큐브 1.7을 기반으로 새로운 환경에 대응하기 위하여 하부 구조를 재설계하는 첫 버전입니다. 원래 예정되었던 텍스트큐브 2.0 로드맵 이전에 텍스트큐브 2.0이 설치되기 위한 제반 환경의 구축 및 홍보를 위한 버전입니다.
텍스트큐브 1.8은 1.7 코어의 하부 구조를 새로운 기반인 PHP 5.2 / MySQL 4.1의 기능을 충분히 활용하여 개선함과 동시에 대량 트래픽에 대한 대응 및 다양한 데이터베이스 지원과 텍스트큐브 2.0 프레임웍의 일부 테스트를 목표로 합니다.
이번 RC3에서는 RC1 및 RC2 릴리즈 후 발견된 자잘한 버그들이 수정되었습니다. 테스트하고 문제점을 보고해주신 분들께 감사드립니다.
주의사항
이 버전은 테스트를 위한 버전입니다. 관련한 인터페이스 및 코드 규격은 언제든지 변경될 수 있습니다. 또한 안정성에 대한 검증이 되지 않은 버전입니다. 실제 사용하는 블로그에는 적용하지 않는 것을 권장합니다.
업그레이드 하신 경우 반드시 블로그 주소 끝에 /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)
(RC3) * 블로그 : 글목록+글내용 보기 화면에서 댓글을 펼칠 때 AJAX로 글목록 불러오는 기능 추가 (#1201)
(RC3) * 블로그 : 대량의 글이 있는 블로그에서 새 글 작성 및 수정시 생기는 지연 감소 (#1358)
- 관리패널 : 백업시 백업 파일에 블로그 식별자가 들어가도록 함 (#1286)
- 관리패널 : 관리 패널의 하위 메뉴의 가독성 개선 (#1288)
- 관리패널 : 관리 패널의 댓글 보기에서 바로 수정 지원 (#1188)
- 관리패널 : 관리 패널 스킨 선택 화면에 미리 보기 도입 (#1288)
- 관리패널 : 태그 정리 및 관리/변경 페이지 지원 (#1248)
- 관리패널 : 전체 관리 페이지를 /admin 경로로 원래 관리패널에서 따로 분리함. (#1357)
(RC3) * 모바일 : iPod touch / iPhone 모드에서 하드웨어 가속 지원 (#1249)
(RC3) * 모바일 : iPhone 페이지에서 최근 트랙백 목록 지원 (#1249)
(RC3) * 모바일 : iPhone 페이지에서 최근 댓글 목록 보기 지원 (#1249)
(RC3) * 모바일 : iPhone 페이지에서 최근 방명록 보기 지원 (#1249)
(RC3) * 모바일 : 유입 경로에 상관없이 기기에 따라 해당되는 iPhone 페이지로 맞게 이동됨 (#1249)
- 플러그인 : 플러그인에서도 언어팩 지원 (#1154)
- 플러그인 : BlogAPI 사용시 동작하는 이벤트 추가 (#1268)
(RC3) * 플러그인 : 확장팩에 트위터 클라이언트 / 글 발송 플러그인 추가 (#1379)
- 에디터 : 에디터 지원 코드 재작성
- 에디터 : 브라우저가 지원하는 경우, geolocation API를 지원하여 글 정보에 추가함 (#1291)
- 일반 : Singleton 패턴 도입 (#1153)
- 일반 : URL-based Dispatching 구조 추가 (#1156)
- 일반 : NAF 1.5 도입
- 일반 : 기존 구조를 NAF 1.5 및 PHP5에 맞추어 재작성
- 일반 : 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)
- 관리패널 : 다량의 글의 속성을 변경하는 경우 일부에 반영이 되지 않을 수도 있는 문제 수정 (#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/12/09 09:02 PERMALINK MODIFY/DELETE REPLY
조만간 1.8 정식으로 판올림 하겠군요~~
기대가 많이 됩니다^^
2009/12/09 22:34 PERMALINK MODIFY/DELETE REPLY
부푼 마음으로 1.8 RC3로 판올림 했지만, 버전업 체크에서
"원격 댓글 지원 기능을 위해 트랙백 테이블의 이름을 변경합니다.: 실패" 라고 뜨는군요.
회사에서 사용하는 서버도 그렇고, 개인적으로 사용하는 서버도 그렇고...
일단 1.7.9 RC1 으로 갈아타야 겠습니다.
2009/12/10 01:58 PERMALINK MODIFY/DELETE
혹시 사용하시는 데이터베이스 버전이 MySQL 몇인지 알 수 있을까요? RENAME이 지원되지 않는 것 같아서 확인차 여쭈어 봅니다.^^
2009/12/10 07:53 PERMALINK MODIFY/DELETE
아 그렇군요~
제가 사용하는 MySQL 버전은 5.0.77 입니다^^;
2009/12/10 13:05 PERMALINK MODIFY/DELETE REPLY
나오자 마자 판올림햇는데 리플은 이제 다는군요..
아직까지는 별문제 없는거 같네요.. 수고하셧구요 잘쓰겠습니다. 아그리고 저도 1.7.x버젼대에서 갈아탔습니다만.
일단 저도 덥어 씌우기 식에 판올림 했을때 디렉토리 구조등이 변경등이 있어서 문제가 생기더라구요 저같은 경우는 다음과 같이 햇어요 첨부파일 포함 DB백업과 스킨및 플러그인 백업하시고 기존꺼 싹지우신후 1.8 버젼 설치하시고 복구하시는면 문제는 해결될꺼예요 백업하시고 한번 갈아 업어주시는게 낳을꺼예요 ^^
2009/12/18 16:42 PERMALINK MODIFY/DELETE REPLY
호스팅서버운영자로서 1.8 에 대해 미리 준비하고자 합니다.
앞서서 1.8 의 beta4 를 설치해본 바로는 정상이였던 서버이고,
1.7.9 도 문제가 없는데, 이번 1.8. rc3 을 설치하니 위 지우개님 처럼 버전체크페이지에서 두가지 에러가 납니다.
"원격 댓글 지원 기능을 위해 트랙백 테이블의 이름을 변경합니다.: 실패"
"트랙백 테이블에 컨텐츠 종류를 판단하기 위한 필드를 추가합니다.: 실패"
지우개님께서는 어떻게 해결하셨을까요..
apcche1.3. /php5.2.5/ mysql5.0.45 /OS는 센트5.3 페도라10 둘다
mysql버전을 더 올려야할까요?
2009/12/20 05:49 PERMALINK MODIFY/DELETE REPLY
저도 1.8 RC3 중에 계속 에러가 나서 한번 이유나 알아보자 해서 php 파일을 찾아봤습니다.
tc/interface/blog/checkup.php 파일의 내용 중 407, 419줄이 잘못되어 있더군요.
해당 행의 명령은 RemoteResponses라는 테이블의 type 이라는 필드가 있는지 체크하는 것인데, 해당 테이블에 그런 필드는 없습니다.
그래서 최신 개발자 소스를 확인해보니 해당 문제가 수정되었더군요.
그에 따르면 type 대신 체크해야 할 필드명은 407번째 줄은 blogid, 419번째 줄은 responsetype 입니다.
2009/12/20 22:27 PERMALINK MODIFY/DELETE
경민님 감사합니다. 덕분에 의문이 잘 해결되었습니다. 소스가 문제였군요. 좋은일 많이 생기시길...