방문자공용변수란?
페이지 내에서 사용할 수 있는 변수를 사용범위(scope)를 가지고 분류하면 전역변수(global), 정적변수(static), 클래스의 데이터멤버(var), 지역변수 등이 있습니다. 이 중에 지역변수는 논외로 하고 나머지 전역변수, 정적변수, 데이터멤버는 페이지 내에서만 사용되는 변수(이하 "일반변수")들이며 따라서 다른 페이지로 이동되면 그 값이 소멸되기 때문에 페이지 상호간에 그 값이 전달, 유지되지 않습니다. 반면 방문자공용변수는 다른 페이지가 이동하더라도 그 값을 계속 유지된 상태로 사용할 수 있습니다.
다른 한편, 페이지에 접근하는 방문자 측면에서 볼 때의 변수의 사용범위를 살펴보면, 여러 방문자가 동일한 페이지에 접근하여 이 페이지에 있는 동일한 변수에 접근하더라도 각 방문자가 인식하는 변수는 서로 전혀 상관이 없습니다. 사용범위가 단일 방문자로 제한되지요. 이를 위한 변수가 세션변수인데 이에 대한 것은 PHP3에서도 이미 많이 다루어져 있고 PHP4에서는 기본 내장함수로 제공되고 있으므로 이를 이용하면 될 것입니다.
위에서 살펴본 바와 같이 현재의 일반변수는 그 사용범위가 단일페이지와 단일방문자로 정해져 있으며, 단일페이지 내에서도 그 값이 유지되지 않습니다. 따라서 웹 상에서 전체페이지, 전체방문자가 공유해야 하는 데이터를 다루기에는 적합하지 않습니다. 이러한 제한을 극복하고자 현재 다른 매체를 이용하여(파일, 공유메모리, 데이터베이스 등) 공유하고자 하는 데이터를 페이지 및 방문자 상호간에 주고받지요. 예를 들어 페이지에 접근하는 방문자수를 보여주기 위한 카운터를 보면, 이 카운터는 실제로는 단일페이지에서 사용하지만 전체방문자가 공유하는 데이터라고 할 수 있습니다.
이와 같이 전체 또는 복수페이지가 공유해야 하는 데이터는 아마 수도 없이 많이 있을 것입니다. 이는 사용범위가 전체 또는 복수페이지 확장할 수 있는 변수의 존재가 필요하다는 것을 의미하지요. ASP에서도 Application 객체를 가지고 모든 방문자들에게 읽히고 전체페이지에서 다루어지는 변수를 정의하여 사용할 수 있지요. 여기서는 좀더 발전하여 ASP Application에서 정의할 수 있는 전체페이지 & 전체방문자에 적용되는 변수뿐만 아니라 임의로 정하는 복수페이지, 단일페이지를 서로 혼합되어 적용할 수 있는 방문자공용변수를 정의하고, 선언하고, 사용하고, 삭제하기 위한 기능을 하는 함수를 클래스를 이용하여 작성하였습니다.
방문자공용변수 사용범위(scope)
방문자공용변수 사용범위 지정자에 지정할 수 있는 키워드에는 pageglobal, pagemember와 pagestatic이 있습니다.
pageglobal : 모든 웹페이지에서 사용하는 변수를 지정할 때 사용하는 지정자로 데이터베이스 테이블 pageid 필드에 "pageglobal" 라고 저장됩니다.
pagemember : 정해진 복수 페이지에서만 사용되는 변수를 생성하기 위한 지정자로 데이터베이스 테이블 pageid 필드에는 클래스 clsWebpage의 멤버함수인 webpage_member_id()로 지정된 현재 페이지의 멤버 ID가 저장됩니다.
pagestatic : 지정된 한 장의 웹페이지에서만 접근할 수 있는 변수를 지정할 때 사용하는 지정자로 데이터베이스 테이블 pageid 필드에는 클래스 clsWebpage의 멤버함수인 webpage_static_id()로 지정된 현재 페이지의 고유한 "페이지 ID"값이 저장됩니다.
방문자공용변수 값 유지관리 메커니즘
데이터베이스에 저장되어 있는 방문자공용변수들은 uglobal_lock() 멤버함수가 실행될 때 테이블로부터 그 값을 읽어들여 방문자공용변수값을 복원시킵니다. 반대로 uglobal_unlock() 멤버함수가 실행될 때 메모리 상에 데이터를 읽어 데이터베이스 테이블에 저장시킵니다.
방문자공용변수를 위한 데이터베이스 설계
방문자공용변수들은 페이지 이동에 관계없이 그 값을 계속 유지할 수 있어야 하는데, 값을 유지하기 위해 페이지 종료할 때 MySQL 데이터베이스의 정해진 테이블에 방문자공용변수 값을 저장한 후 다른 페이지를 읽어들일 때 데이터베이스 테이블로부터 저장된 값을 읽어 들여와 해당 방문자공용변수의 값을 원래대로 복원시켜줍니다. 이 때 사용되는 데이터베이스 테이블명이 저장된 데이터멤버에 접근할 수 멤버함수는 uglobal_db_table() 입니다. 테이블명의 초기 값은 "admin_uglobal"로 설정되어 있습니다. 그리고 테이블 스키마는 아래와 같습니다.
[code sql;gutter:false] CREATE TABLE 테이블명 (
pageid varchar(32) not null,
value blob not null,
PRIMARY KEY (pageid)
); [/code]
필드명 pageid : "pageglobal", "페이지 멤버 ID" 또는 "페이지 ID"가 저장됩니다.
필드명 value : 변수명과 변수 값이 저장됩니다.

Posted by 방글24