개요
라이믹스 프레임워크는 모듈과 테마 등을 구동하는 핵심 기능을 제공하는 부분이다. 일부 기능은 모듈에 위임하지만, 프레임워크에 포함된 대부분의 클래스와 함수는 특정 모듈에 종속되지 않고 독립적으로 쓸 수 있다.[1]
크게 네 부분으로 이루어져 있다.[1]
레거시 클래스는 서드파티 자료의 하위 호환성을 위해 남아 있으나 점차 Rhymix\Framework로 흡수되고 있으며, 이미 껍데기만 남아 별칭 역할만 하는 것도 있다. 장기적으로 Context를 제외한 모든 전역 클래스는 지원이 중단될 예정이다.[1]
코어 클래스
Rhymix\Framework 네임스페이스에 속한 클래스이다. 이름 뒤에 (*)가 붙은 것은 인스턴스를 만들어 사용하고, 나머지는 static으로 사용한다.[1]
| 클래스 | 설명 |
|---|---|
| Cache | 처리 속도 향상을 위한 캐시 처리 |
| Calendar | 달력 UI 제작에 쓰는 유틸리티 함수 |
| Config | 시스템 설정의 로딩, 변환, 저장 |
| Cookie | 쿠키 생성과 조회 |
| DateTime | 날짜·시간 형식 변환과 표준 시간대 처리 |
| DB (*) | DB 접속과 관리, XML 쿼리 및 커스텀 쿼리 실행 |
| Debug | 디버그 관련 기능 |
| Exception (*) | 라이믹스 공통 예외 클래스. \Exception을 상속한다
|
| Formatter | 텍스트와 HTML의 상호 변환, SCSS 컴파일, 압축 및 합치기 |
| HTTP | API 호출, 크롤링, 파일 다운로드 등 외부 리소스 가져오기 |
| i18n | 표준화된 국가 및 언어 목록 제공 |
| Image | 이미지 포맷 감지 및 변환 |
| Korea | 국내 전화번호 유효성 확인과 형식 변환 등 |
| Lang (*) | 다국어 기능 |
| Mail (*) | 이메일 발송 |
| MIME | 파일 타입 파악과 확장자 처리 |
| Pagination | 페이지 분할 유틸리티 |
| Password | 여러 형식의 비밀번호 암호화와 검증 |
| Push (*) | 푸시 알림 발송 |
| Queue | 비동기 작업의 생성, 관리, 실행. 실행에는 크론 설정이 필요하다. 라이믹스/매뉴얼/Crontab 설정 방법 참고 |
| Request (*) | 하나의 HTTP 요청을 표현. Router가 이 클래스의 인스턴스를 반환한다
|
| Router | 짧은주소 처리. 라이믹스/라우터 문서 참고 |
| Security | 랜덤 문자열 생성, 암호화, 전자서명, CSRF 방어 |
| Session | 세션 처리 |
| SMS (*) | SMS 발송 |
| Storage | 파일과 디렉터리를 안전하게 다루는 유틸리티 |
| Template (*) | 템플릿 로딩, 컴파일, 출력. 라이믹스/매뉴얼/템플릿 문법 v2 참고 |
| Timer | 작업 소요 시간 측정 |
| UA | User-Agent 해석과 그에 따른 구분
|
| URL | URL 해석과 변환 |
명세 읽기와 사용 예
표의 클래스 이름은 공식 메서드 명세로 연결된다. 각 메서드의 가시성, static 여부, 필수 인자, 반환값과 실패 시 동작을 확인한다. 공식 매뉴얼의 현재 명세와 설치한 코어의 버전이 다를 수 있으므로 도입 버전과 실제 소스도 함께 확인한다.
다음은 라이믹스가 초기화된 모듈 등에서 Cache를 사용하는 간단한 예이다. 독립 PHP 파일에서 라이믹스를 로딩하지 않은 채 실행하는 예제는 아니다.
use Rhymix\Framework\Cache;
$key = 'example:greeting';
$value = Cache::get($key);
if ($value === null)
{
$value = '안녕하세요';
Cache::set($key, $value, 60);
}
get()은 키가 없을 때 null을 반환하고, set()의 TTL은 초 단위이다. 캐시 쓰기는 드라이버 상태 등에 따라 실패할 수 있으므로 중요한 데이터의 유일한 저장소로 사용하지 않는다. 삭제는 delete($key)로 해당 키를 지정한다.
예외 클래스
Rhymix\Framework\Exceptions 네임스페이스에 있다. 모두 Rhymix\Framework\Exception을 상속하며 용도에 따라 골라 쓴다.[1]
| 클래스 | 용도 |
|---|---|
| DBError | DB 접속 오류 등 |
| FeatureDisabled | 사용할 수 없는 기능 |
| InvalidRequest | 잘못된 요청 |
| MustLogin | 로그인이 필요함 |
| NotPermitted | 권한이 없음 |
| QueryError | DB 쿼리 오류 |
| SecurityViolation | 보안 정책상 허용되지 않음 |
| TargetNotFound | 대상을 찾을 수 없음 |
필터 클래스
Rhymix\Framework\Filters 네임스페이스에 있다. 신뢰할 수 없는 외부 입력값을 처리하는 최전방에 위치하여 라이믹스의 보안에서 핵심적인 역할을 한다.[1]
| 클래스 | 역할 |
|---|---|
| FileContentFilter | 업로드된 파일의 내용에 따른 상세 필터링 |
| FilenameFilter | 파일명 필터링 |
| HTMLFilter | XSS 방지를 위한 HTML 태그 및 속성 필터링 |
| IpFilter | IP 주소 필터링 (허용·차단 목록) |
| MediaFilter | iframe 등으로 본문에 삽입된 외부 미디어의 URL 필터링 |
그 밖의 네임스페이스
Rhymix\Framework\Drivers— 메일, SMS 발송이나 서버 환경별 캐시 사용을 위한 드라이버가 용도별로 분류되어 있다.Rhymix\Framework\Helpers— 프레임워크의 다른 영역에서 필요할 때 임의로 선언하여 쓰는 도우미 클래스.Rhymix\Framework\Parsers— 템플릿과 쿼리를 비롯한 여러 파일을 해석하여 적절한 형태로 변환한다.[1]
레거시 클래스
XE 1.x부터 존재해 온 전역 클래스이다.[2]
| 클래스 | 설명 |
|---|---|
| BaseObject | 모듈, DB 쿼리, 이벤트 핸들러 등의 반환값을 담는 데 사용 |
| Context | 요청의 전반적인 환경 관리, 전역변수 관리, 응답 작성 메소드 제공 |
| FrontEndFileHandler | HTML 응답에 사용할 CSS, JS 리소스 관리 |
| ModuleHandler | 모듈 라이프사이클 관리 |
| ModuleObject | 모든 모듈 클래스의 기초가 되는 클래스 |
| DisplayHandler | 응답 렌더링 |
| FileHandler | 대부분 Storage로 대체 가능하나 일부 기능이 유지되고 있다
|
| Mobile | 대부분 UA로 대체 가능하나 일부 기능이 유지되고 있다
|
- ※
BaseObject는 PHP 7.2부터Object가 예약어가 되면서 이름이 바뀐 것이다. 오래된 서드파티 자료에서 발생하는 관련 오류는 설치 환경 문서를 참고하자.
공통 상수
실행 환경
설치 경로, 버전, 접속 환경 정보가 필요할 때는 다른 파일을 해석하거나 $_SERVER 같은 전역변수를 참조하기보다 아래 상수를 쓰는 것이 권장된다.[1]
| 상수 | 설명 |
|---|---|
RX_VERSION |
라이믹스 버전 |
RX_MICROTIME |
실행 시작 시간 (유닉스 타임스탬프, 마이크로초까지) |
RX_TIME |
실행 시작 시간 (유닉스 타임스탬프, 정수) |
RX_BASEDIR |
설치된 서버 파일시스템 절대경로 (마지막 슬래시 있음) |
RX_BASEURL |
설치된 URL의 절대경로 (마지막 슬래시 있음) |
RX_REQUEST_URL |
현재 요청 URL에서 RX_BASEURL을 제외한 나머지
|
RX_CLIENT_IP |
현재 방문자의 IP 주소 |
RX_CLIENT_IP_VERSION |
방문자 IP가 IPv4면 4, IPv6면 6
|
RX_SSL |
현재 요청이 SSL/TLS를 사용하면 true
|
RX_POST |
현재 요청이 POST면 true
|
RX_WINDOWS |
윈도우 서버면 true
|
문서 상태값
문서나 댓글의 상태를 표현하는 값이다. 현재 PUBLIC과 SECRET이 코어에 구현되어 있고, 나머지는 서드파티 자료가 공통으로 쓰도록 미리 선언해 둔 표준이다.[1]
| 상수 | 값 | 상수 | 값 |
|---|---|---|---|
RX_STATUS_TEMP |
0 | RX_STATUS_CENSORED |
5 |
RX_STATUS_PUBLIC |
1 | RX_STATUS_CENSORED_BY_ADMIN |
6 |
RX_STATUS_SECRET |
2 | RX_STATUS_DELETED |
7 |
RX_STATUS_EMBARGO |
3 | RX_STATUS_DELETED_BY_ADMIN |
8 |
RX_STATUS_TRASH |
4 | RX_STATUS_OTHER |
9 |
RX_STATUS_PRIVATE |
10 |
이 밖에 DIGITS, XDIGITS, ALPHABETS, UPPER, LOWER 같은 문자 범위 상수와 CR, LF, CRLF 개행 문자 상수가 선언되어 있다.[1]
XE 호환용 상수
__XE__, __XE_VERSION__, _XE_PATH_, Y, N 등 XE 시절의 상수도 호환을 위해 제공되지만, 더 이상 사용하지 않는 것이 권장된다.[1]