유닛테이블 – 07.동작

유닛테이블의 동작 메커니즘

데이터뿐만 아니라 레이아웃까지 해석해서 HTML을 생성한다는 것은 역시 오버헤드가 클 수밖에 없었습니다. 편하기는 한데(?) 템플릿을 해석해서 화면에 뿌려주는 시간이 좀 길더라고요. 저도 이것 때문에 고민을 많이 했죠. 그러다가 우연히 컴퓨터 잡지책을 보다보니 JSP와 서블릿 동작 메커니즘을 설명하는 기사가 있었어요. JSP는 한번도 사용해 본 일이 없기 때문에 코드야 다 이해할 수는 없었지만 그 기사에서 설명하는 동작 메커니즘에 대한 개념은 저에게 오버헤드를 해결할 수 있는 단서를 제공해 주었어요. 오! 이 기쁨….

추측하건대 JSP도 자바의 모든 것을 끌어안다 보니 자연히 그 실행속도에 문제가 되지 않았나 하는 생각이 들더군요.(물론 아닐지도 모르지만) 그래서 자연히 매번 실행할 때마다 해석하기보다는 JSP 스크립트 파일이 변경되었을 때만 다시 해석하여 서블릿 코드로 만들어 놓은 후 그 다음에 실행할 때는 JSP를 해석하는 것이 아니라 컴파일 된 서블릿 코드를 실행하는 것이지요.

그래서 유닛테이블 엔진에서도 템플릿을 PHP 스크립트가 실행될 때마다 해석하는 것이 아니라 템플릿 파일이 변경될 때만 실행할 수 있도록 했습니다. 그리고 처음 해석된 데이터는 데이터베이스에 저장시켜 놓았습니다. 해당 페이지에 2번째 접속할 때부터는 이미 해석된 데이터를 데이터베이스에서 읽어들여 이 데이터를 가공하여 HTML 태그를 생성시켰습니다. 그러고 나니 레이아웃 해석으로 인한 오버헤드는 거의 해결되었지요.

< 유닛테이블의 동작 메커니즘 >

유닛테이블의 구성 요소

그림에서 UT 엔진(Unit Table Engine)은 유닛테이블을 종합적으로 관리해주는 엔진이고, UTIS 엔진(Unit Table Input String Engine)은 템플릿 파일을 해석하여 해석 결과를 데이터베이스에 저장하는 엔진이고, UTOS 엔진(Unit Table Output String Engine)는 데이터베이스에 저장된 해석 데이터를 읽어와 HTML 태그를 생성해주는 엔진입니다. 이 모든 엔진은 클래스를 이용하여 작성되었으며 관련된 클래스들은 모두 차례대로 상속되어 하나의 객체로 생성되도록 하였습니다.

데이터베이스 테이블 생성(MySQL의 경우)

중간코드인 UTEA 데이터를 저장하게 되는 데이터베이스 테이블에 대한 스키마는 아래와 같습니다.

id 필드는 페이지를 구별해주는 인식자이며, 데이터는 value 필드에 저장됩니다. 중간코드인 UTEA 데이터는 다차원배열 구조이므로 value 필드에 저장하기 전에 serialize() 함수를 이용하여 직렬화(serializing)시킵니다. 데이터베이스에서 데이터를 읽을 때는 unserialize() 함수를 이용하여 배열화(unserializing) 작업을 한 후 메모리로 데이터를 보냅니다.

답글 남기기