bluetronix CMS의 사이트 렌더링 프로세스 작동 방식
각 페이지 호출 시 bluetronix CMS는 여러 처리 단계를 거칩니다. 이 튜토리얼에서는 전체 렌더링 프로세스를 배우고 보안 검사가 언제 수행되는지, PHP 스크립트가 실행되고, 레이아웃 변수가 대체되고 완성된 HTML 페이지가 생성되는지를 알 수 있습니다.
1. 보안 스크립트 로드
시작 시 bluetronix CMS는 보안 관련 스크립트를 로드합니다. 여기에는 보안 검사, 호출 수 확인, MySQL 매개변수의 준비 또는 검토, GET 및 POST 매개변수의 분석이 포함됩니다.
데이터베이스 연결이 필요 없는 검사들은 이미 이 시점에서 수행됩니다.
2. 모듈 구성 로드
존재하는 경우 /bx_Mod/config_own.php 파일이 로드됩니다. 이 파일에 정의된 스크립트와 구성 변수는 렌더링 프로세스의 시작부터 이미 사용할 수 있습니다.
3. 세션 시작
CMS는 @session_start();를 사용하여 PHP 세션을 시작합니다. 여기서 특히 중요한 세션 변수는 $_SESSION["S_User"] (CMS 사용자 또는 편집 모드), $_SESSION["S_Language"] (현재 언어), $_SESSION["Web_User"] (프론트엔드 로그인 사용자)입니다.
4. 페이지 매개변수 로드
그런 다음 CMS는 서버 변수에서 현재 호출에 대한 정보를 읽습니다. $domain은 $_SERVER["SERVER_NAME"]에서 도메인 이름을 받고, $FileParameter는 GET 매개변수를 포함한 요청 경로를 $_SERVER["REQUEST_URI"]에서 받아오며, $file은 $_SERVER["PHP_SELF"]에서 실행된 파일 경로를 가져옵니다.
$ReferURL는 $_SERVER["HTTP_REFERER"]의 값을 포함하며, 이는 전송된 경우에만 해당됩니다. 예를 들어, 프레임이나 페이지 영역을 로드할 때 사용할 수 있습니다.
5. 데이터베이스 연결 설정
CMS는 자동으로 데이터베이스 연결을 설정합니다. 그 후 CMS 데이터베이스 테이블은 추가 검사 및 페이지 내용 로드에 사용할 수 있습니다.
6. GET 및 POST 매개변수 다시 확인
데이터베이스 연결이 설정된 후, CMS는 SECUREGetPost();를 호출합니다. 전달된 GET 및 POST 매개변수는 다시 검사되며 필요에 따라 조정됩니다. 이제 데이터베이스 정보를 요구하는 검사가 가능합니다.
7. 도메인, 편집, 언어 리디렉션
CMS 구성, 호출된 도메인, 편집 모드, 선택된 언어 및 호출 매개변수에 따라 리디렉션이 발생할 수 있습니다. 가능한 목표는 메인 도메인, 편집 도메인 및 언어별 도메인 또는 URL입니다.
8. HTTPS 리디렉션
웹사이트가 HTTPS 없이 호출되면 SSL 또는 HTTPS 버전으로 리디렉션됩니다.
9. 중앙 PHP 스크립트 로드
이제 CMS는 주요 PHP 기능을 로드합니다. 여기에는 전송을 위한 BlueSMTPMail()와 양식 처리를 위한 BlueFormSend()가 포함됩니다. 추가 주요 기능도 포함됩니다.
10. 00_site에서 페이지 데이터 로드
요청된 페이지의 데이터는 데이터베이스 테이블 00_site에서 읽어옵니다. 이 과정에서 $Template와 같은 CMS 변수가 결정됩니다.
또한 $LayoutHTML 및 $SitePHP가 초기화됩니다. $LayoutHTML는 이후 전체 HTML 레이아웃을 포함하며, $SitePHP는 현재 호출된 페이지와 관련된 PHP 코드를 포함합니다.
11. 00_layout에서 레이아웃 로드
페이지에 할당된 레이아웃은 데이터베이스 테이블 00_layout에서 로드되며, 이는 $LayoutHTML에서의 추가 처리의 기초가 됩니다.
12. 언어 의존적인 JavaScript 파일 설정
언어별 파일이 있는 경우, CMS는 기본 파일 BxScript.js 및 BxHeadScript.js를 적합한 언어 변형으로 교체할 수 있습니다. 예를 들어 BxScript_de.js 또는 BxScript_en.js로 교체됩니다.
파일 마크업 __FV_/bx_script/BxScript_own_min.js__ 및 __FV_/bx_script/BxHeadScript_own_min.js__는 레이아웃에서 조정됩니다.
13. 헤더 및 동적 콘텐츠 생성
이제 동적 콘텐츠가 생성되고 페이지별 PHP 스크립트가 실행됩니다. DynMenue()는 동적 메뉴를 생성하고, IncludeModul()은 구성된 모듈을 포함하며, EditMARK()는 CMS의 편집 마크를 설정합니다.
eval($SitePHP)는 현재 페이지의 PHP 코드를 실행하고, eval($IncludePHP)는 포함된 PHP 스크립트를 실행합니다.
14. CSS 및 JavaScript의 변경 매개변수 설정
CSS 및 JavaScript 파일에는 변경 매개변수가 설정됩니다. 이를 통해 브라우저는 업데이트된 파일의 새 버전을 로드할 수 있으며, 구 버전의 캐시된 파일을 사용하지 않습니다.
예를 들어, 파일 참조 /css/style.css에서 버전 매개변수가 포함된 호출 /css/style.css?v2026...가 생성될 수 있습니다.
15. 다크 모드 또는 라이트 모드 설정
CMS는 /bx_style/BxSource/CSSEditDarkLight.bx에서 구성된 표시 모드를 읽습니다. 파일 내용에 따라 레이아웃에서 다크 모드 또는 라이트 모드를 설정합니다.
16. 레이아웃에 모듈 구성 변수 설정
/bx_Mod/config_own.php의 모듈 구성이 레이아웃에 적용됩니다. 예를 들어, 쇼핑, 검색, 로그인 또는 번역 모듈이 비활성화된 경우 관련 컨트롤이 자동으로 숨겨질 수 있습니다.
레이아웃 마크업 __DB_GB_DesktopIconBasket_Display__, __DB_GB_DesktopIconSearch_Display__, __DB_GB_DesktopIconLogin_Display__ 및 __DB_GB_DesktopIconLang_Display__는 none으로 교체됩니다.
17. 남아있는 대체 마크 제거
교체되지 않은 CMS 플레이스홀더는 완성된 HTML에서 제거됩니다. 이는 특히 __DB_...__ 및 __ST_...__ 패턴의 마크 및 이를 위한 내부 xxx 주석 마크에 적용됩니다.
18. HTML 주석 제거
CMS는 이후 $LayoutHTML에서 HTML 주석을 제거합니다. 이를 통해 불필요한 주석 텍스트가 브라우저에 전달되지 않습니다.
19. 언어 번역 수행
$_SESSION["S_Language"]가 $GBMainLang와 같지 않은 경우, 표시된 텍스트가 현재 사용되는 언어로 번역됩니다. 번역은 데이터베이스 테이블 Translation에서 가져옵니다.
필요한 텍스트가 거기에 아직 없는 경우, Translation에 새로운 항목이 생성됩니다. CMS는 My Text 및 My Text를 기준으로 번역 가능한 콘텐츠를 인식합니다.
20. 이미지 호출을 IMG.pl로 교체
이미지 요청 및 이미지 자르는 작업은 IMG.pl을 통해 이전에 생성되거나 최적화된 이미지 파일로 대체됩니다. 최종 HTML 페이지는 해당 이미지 변형에 직접 접근할 수 있습니다.
21. 완성된 페이지 출력
처리가 완료된 후, $LayoutHTML이 내용 유형 text/html; charset=utf-8로 브라우저에 출력됩니다. 예를 들어, print $LayoutHTML;를 통해서입니다.
활성화되지 않았거나 내부 도메인에 대해서는 noindex, nofollow가 표시되어 이 페이지가 검색 엔진에 의해 인덱스되지 않도록 합니다.
22. 캐시 기록
페이지 출력 후 CMS는 생성된 페이지를 캐시에 저장할 수 있습니다. 전제 조건은 S_User가 로그인하지 않았고, 페이지가 편집 모드에 있지 않으며, 이 페이지에 대한 캐싱이 활성화되어야 합니다.
이후 호출 시 저장된 HTML 페이지를 사용할 수 있으며, 전체 렌더링 프로세스를 다시 실행할 필요가 없습니다.
FAQ
고객들이 자주 묻는 질문
사이트 렌더링 프로세스란 무엇인가요?
여기서 튜토리얼은 bluetronix CMS가 페이지 및 레이아웃 데이터로부터 최종 HTML 페이지를 생성하고 브라우저에 출력하는 과정을 의미합니다.
데이터베이스 연결 전에 어떤 보안 검사가 수행되나요?
데이터베이스 연결 전에 Secure Check, 호출 수 확인, MySQL 매개변수 준비, GET 및 POST 매개변수 분석 등이 수행됩니다.
모듈 구성은 언제 로드되나요?
파일 /bx_Mod/config_own.php가 존재하는 경우 세션 시작 전에 데이터베이스 연결 전에 로드됩니다.
S_User, S_Language 및 Web_User는 각각 무엇에 사용되나요?
S_User는 CMS 사용자 또는 편집 모드를, S_Language는 웹사이트의 현재 언어를, Web_User는 프론트엔드 로그인 사용자를 나타냅니다.
페이지와 레이아웃은 어떤 데이터베이스 테이블에서 가져오나요?
페이지 데이터는 00_site에서 로드됩니다. 관련 레이아웃은 00_layout에서 읽어 $LayoutHTML로 처리됩니다.
페이지의 PHP 코드는 언제 실행되나요?
헤더와 동적 콘텐츠를 생성할 때 페이지 고유의 코드는 eval($SitePHP)를 통해 실행되고, 포함된 PHP 코드는 eval($IncludePHP)를 통해 실행됩니다.
언어별 JavaScript 파일은 언제 사용되나요?
적절한 언어 변형이 있는 경우 BxScript.js와 BxHeadScript.js는 각각의 언어별 파일로 대체될 수 있습니다.
다크 모드 또는 라이트 모드는 어떻게 결정되나요?
CMS는 파일 /bx_style/BxSource/CSSEditDarkLight.bx를 읽고 그 내용을 바탕으로 레이아웃의 표시 모드를 설정합니다.
텍스트는 언제 자동으로 번역되나요?
현재 언어가 $GBMainLang와 다를 경우, 해당 텍스트는 Translation 테이블의 항목을 기준으로 번역됩니다.
완성된 페이지가 캐싱되는 조건은 무엇인가요?
캐시는 S_User가 로그인되어 있지 않고 페이지가 편집 모드가 아니며 이 페이지에 대한 캐싱이 활성화된 경우에 기록할 수 있습니다.