애플리케이셔너 개요
MS의 ASP에서 사용되는 Application 객체에서와 같이 웹애플리케이션에서 모든 방문자가 데이터를 공유할 수 있는 변수를 등록하여 사용할 수 있도록 해 줍니다. 방문자공용변수와 동일한 기능을 수행하는 것이지만, 사용자 인터페이스가 매우 간결해졌기 때문에 방문자공용변수보다 사용하기가 훨씬 편합니다.
애플리케이셔너란?
애플리케이셔너(Applicationer)는 PHP3 & PHP4에서 동작되는 클래스로 작성된 방문자공용변수를 사용할 수 있도록 제작된 툴로 ASP의 애플리케이션 객체와 같은 역할을 합니다.
저장 매체
애플리케이셔너에서 지원하는 저장 매체는 파일시스템과 데이터베이스이고, 파일시스템과 데이터베이스 모두를 동일한 인터페이스로 사용할 수 있도록 작성되어 있습니다. 따라서 향후 동일한 코드로 저장 매체만 변경할 경우 애플리케이셔너 파일을 인클루드하는 부분만 변경하면 됩니다.
애플리케이셔너의 파일 구성
애플리케이셔너는 저장매체에 따라 별도로 작성되어 있습니다. 파일시스템을 위해 개발된 class.applfile.php와 데이터베이스를 위해 개발된 class.applbase.php가 있습니다. class.applbase.php의 경우는 별도로 DB Layer인 MiniDB가 필요합니다.
저장 매체 | 파일명 |
---|---|
파일시스템 | class.applfile.php |
데이터베이스 | class.applbase.php |
파일시스템용 애플리케이셔너
파일시스템을 이용한 애플리케이셔너는 디폴트로 /tmp 디렉토리에 파일로 저장할 수 있습니다. "/tmp"는 웹서버 상에 공유하는 임시 디렉토리이므로, 하나의 서버로 여러 명이 사용하는 경우, 예를 들면 직접 웹서버를 운영하는 것이 아니고 웹호스팅 서비스를 받는 경우에는 아래와 같이 생성자를 통하여 이 디렉토리를 자신의 웹사이트에서만 접근할 수 있는 디렉토리로 변경할 필요가 있습니다.
[code php;gutter:false]
<?php
require("./class.applfile.php");
$argv["resource"] = "/home/httpd/phpclass/applicationer";
$appl = new Applicationer($argv);
.
.
. [/code]
require("./class.applfile.php");
$argv["resource"] = "/home/httpd/phpclass/applicationer";
$appl = new Applicationer($argv);
.
.
. [/code]
위에서 지정된 디렉토리 내에 방문자공용변수에 대한 정보가 기록되어 있는 파일들이 저장됩니다. 각 변수마다 별도의 파일에 그 정보가 기록 유지됩니다. 결국 애플리케이셔너 디렉토리에는 현재 웹사이트에서 사용되고 있는 방문자공용변수의 수량만큼의 파일이 존재합니다. 이 파일명은 "appl_$varname"입니다. 여기서 $varname은 방문자공용변수명을 나타냅니다.
복수의 방문자가 동일한 방문자공용변수를 사용할 때 발생할 지도 모르는 변수값의 불확실성을 해결하기 위해 "appl_$varname" 파일에 대한 locking 및 unlocking이 필요하며, 이러한 locking 및 unlocking 역할을 할 파일이 또 하나 필요합니다. 이 파일명은 "appllock_$varname"입니다. 애플리케이셔너 디렉토리에 해당변수에 대한 lock 파일이 없으면 unlocking 상태이고, lock 파일이 있으면 locking 상태입니다.
데이터베이스용 애플리케이셔너
데이터베이스용의 경우(파일명:class.applbase.php)에는 내부적으로 미니디비를 이용하기 때문에 애플리케이셔너 객체를 생성하기에 앞서 미니디비 객체를 생성하여야 합니다.
[code php;gutter:false]
<?php
require("./class.mysql.php"); // 미니디비(MySQL용) 0.2.2
require("./class.applbase.php"); // 애플리케이셔너(디비용) 0.0.2
$base = new MiniDB(
"디비 호스트명",
"사용자 id",
"디비 패스워드",
"디비명",
"접속방식"
);
$appl = new Applicationer;
.
.
. [/code]
require("./class.mysql.php"); // 미니디비(MySQL용) 0.2.2
require("./class.applbase.php"); // 애플리케이셔너(디비용) 0.0.2
$base = new MiniDB(
"디비 호스트명",
"사용자 id",
"디비 패스워드",
"디비명",
"접속방식"
);
$appl = new Applicationer;
.
.
. [/code]
데이터베이스를 이용하는 애플리케이셔너는 여러가지 데이터베이스를 다루기 위해 내부적으로 공개된 DB 레이어인 미니디비를 사용하기 때문에 미니디비에서 지원되는 데이터베이스를 애플리케이셔너에서도 그대로 사용할 수 있습니다. 미니디비에 대해서는 미니디비 메뉴를 참조하세요. 현재(2001.6)까지 MiniDB에서 지원되는 데이터베이스로는 MySQL, 오라클, 포스트그레스, 사이베이스, MSQL, MSSQL, Informix가 있습니다.
데이터베이스용 애플리케이셔너에서 사용하는 디비 테이블명은 "Applicationer"입니다. 만약 이 테이블명을 변경하려면 아래와 같이 생성자의 입력인자로 테이블명을 지정하여 줍니다.
[code php;gutter:false]
<?php
require("./class.mysql.php"); // 미니디비(MySQL용) 0.2.2
require("./class.applbase.php");
$argv["resource"] = "새로운 테이블명";
$appl = new Applicationer($argv);
.
.
. [/code]
require("./class.mysql.php"); // 미니디비(MySQL용) 0.2.2
require("./class.applbase.php");
$argv["resource"] = "새로운 테이블명";
$appl = new Applicationer($argv);
.
.
. [/code]
데이터베이스용 애플리케이셔너에서의 locking 및 unlocking
아래에 있는 애플리케이셔너의 테이블 구조(MySQL용)를 보면 알 수 있지만, 현재 방문자공용변수를 사용 중인지 아닌지를 나타낼 수 있는 필드 islock가 준비되어 있습니다. 이 필드에 "0"이 기록되어 있으면 현재 필드를 어떠한 방문자도 사용하고 있지 않는 상태이므로 현재 필드에 해당하는 방문자공용변수를 자유롭게 읽고 쓸 수 있습니다. 그러나 이 필드에 "1"이 기록되어 있으면 누군가 현재 필드를 사용하고 있는 상태를 나타내므로 이 때는 이 필드에 기록되어 있는 방문자공용변수를 다룰 수 없습니다.
[code sql;gutter:false]
CREATE TABLE Applicationer (
id varchar(255) not null PRIMARY KEY,
value text not null,
islock SET("0","1") not null DEFAULT "0",
lastused int(8)
); [/code]
id varchar(255) not null PRIMARY KEY,
value text not null,
islock SET("0","1") not null DEFAULT "0",
lastused int(8)
); [/code]
대기 시간(Waiting Time)
만약 다른 방문자가 임의의 방문자공용변수를 다루기 위해 lock 파일을 생성하거나 또는 islock 필드에 "1"이 기록한다면 또 다른 방문자의 스크립트는 대기 상태에 들어가게 됩니다. 최대 대기 시간은 5초로 설정되어 있으며, 이 대기 시간 내에 현재 방문자공용변수를 사용하고 있는 스크립트가 사용을 끝내고 lock 파일을 삭제하거나 또는 islock 필드에 "0"으로 설정한 후 종료하게 됩니다. 그러면 대기 상태에 있던 또 다른 스크립트가 해당하는 방문자공용변수를 사용할 수 있게 됩니다. 5초로 설정된 최대 대기 시간은 비상시를 대비하여 설정된 시간이며, 접속하는 방문자가 많다고 하더라도 대부분의 경우에는 수(십) 밀리세컨드 이내에 제어권을 되돌려 받게 될 것입니다. 최대 대기 시간이 지나도록 lock 파일이 존재하거나 또는 islock 필드의 값이 계속 "1"인 경우에는 강제로 lock 파일을 삭제하거나 islock 필드의 값을 "0"으로 재설정한 후 해당하는 방문자공용변수를 다룰 수 있게 해 줍니다. 애플리세이셔너가 이러한 알고리즘을 이용하기 때문에, 전부 또는 전무를 요구하는 트랙잭션 처리로 얻어지는 100% 신뢰성있는 데이터를 제공하지는 않습니다. 100% 신뢰성있는 데이터를 얻기를 원한다면 소스코드를 수정하여 데이터베이스에서 제공하는 트랙잭션 기능을 이용하여야 할 것 입니다.
'phpsource > 캐시&세션&쿠키' 카테고리의 다른 글
{애플리케이셔너}5.업그레이드 및 패치 (0) | 2000.11.23 |
---|---|
{애플리케이셔너}4.사용자 인터페이스 (0) | 2000.11.23 |
{애플리케이셔너}2.세셔너와의 관계 (0) | 2000.11.23 |
{애플리케이셔너}1.방문자공용변수와의 관계 (0) | 2000.11.23 |
{방문자공용변수}3.클래스 구성 (0) | 2000.11.22 |