DCL 프로젝트의 소개 250.5KB [455]

Download Report

Transcript DCL 프로젝트의 소개 250.5KB [455]

DCL 프로젝트의 소개
2006-02-23
김 대 중
[email protected]
http://www.sysdeveloper.net/dcl/
DCL 프로젝트의 개요
DCL 프로젝트의 개요

목적



라이브러리 패키지



Informix, InterBase, Oracle, MySQL
DHE : DCL HTTP Server Extension



DCLCore
DCLNet
DDBC : 데이터베이스 드라이버


UNIX, Windows에서 소스레벨 이식성이 있는 C++ 라이브러리와
어플리케이션 프레임워크 구축을 목표
웹 서버 어플리케이션 개발 및 실행환경
Windows와 UNIX에서 IIS, Apache1, Apache2
DCL Fast Page



웹 어플리케이션을 위한 객체기반의 어플리케이션 프레임워크
웹 디자이너를 위한 도구
DHE 어플리케이션
2006-02-23
http://www.sysdeveloper.net/dcl/
2
DCL의 라이브러리 패키지
라이브러리 패키지

특징



DCLCore





String, Vector, List, HashMap, Date, Time, DateTime, Interval
InputStream, OutputStream, TextTemplate, IniFile, Regex
File, Dir, Thread, Mutex, ThreadCond, DSO 와 같은 시스템 객체 클래스
데이터베이스 드라이버를 위한 인터페이스 및 클래스
DCLNet


JDK, MFC, VCL, Qt, STL 등 기존의 잘 알려진 라이브러리를 분석하여 그 장점
이 적용
DSO로 만들어진 공유 라이브러리
AsyncSocket, DHE 명세, 서블릿 관련 클래스와 HTTP 관련 클래스
타 라이브러리와의 비교




JDK : 시스템 프로그래밍에 적합하지 않음
MFC, VCL : Microsoft의 Windows 운영체제 의존, VCL은 Object Pascal
Qt : X-Windows, MS-Windows 이식성이 있으나 윈도우 어플리케이션 중심
STL : C++ 템플릿 라이브러리로 이식성 있으나 DSO 개발에 적합하지 않음
2006-02-23
http://www.sysdeveloper.net/dcl/
3
DCL의 런타임 디버깅 환경
DCL의 런타임 디버깅 환경

목적


특징




프로그램의 실행 중간에 값들을 확인하기 위한 목적으로 사용
ASSERT



C/C++의 프리프로세서와 C++의 연산자 오버로딩을 사용
프로세스 수준 뿐만 아니라 스레드별 추적이 가능
__DCL_DEBUG로 컴파일된 라이브러리에서만 가능
TRACE


라이브러리 차원에서 어플리케이션의 디버깅 정보 생성
프로그램 실행의 특정 위치에서 적법한 상태를 테스트하여
그 상태가 실패했으면 abort 하거나 AssertException을 발생
동적 메모리관련 디버그


malloc, calloc, realloc, free, new, new[], delete, delete[] 을 추적하고
이들의 잘못 사용에 대한 경고 메시지를 출력

2006-02-23
예) new[]로 할당한 객체는 delete[]로 파괴해야 하는데 delete로 파괴하면 경고
http://www.sysdeveloper.net/dcl/
4
DCL의 런타임 디버깅 환경
다중 스레드 환경에서 디버깅 정보

TRACE의 사용 예와 스레드에서 해제하지 않은 메모리 객체의 표시.
40: void MyServlet::onService(HttpServletContextEx& ctx)
41:
__DCL_THROWS1(Exception*)
42: {
43:
ctx.setContentType("text/html", "euc-kr");
44:
45:
// 디폴드 HtmlOutputStream의 디폴트 파라미터를 사용하여
46:
// 스트림 객체를 구성한다.
47:
HtmlOutputStream& out = ctx.getOutputStream();
48:
49:
out << "<html>\n"
50:
"<head><title>MyServlet HTTP Service</title></head>\n"
53:
"<hr/>\n"
54:
"<p>Hello World !</p>\n";
55:
56:
// 해제하지 않은 메모리 블록
57:
char* p = new char[100];
58:
59:
__DCL_TRACE1(
60:
"서로다른 이름의 변수 개수 : %d\n",
61:
ctx.m_mapQuery.count()
62:
);
63: }
2006-02-23
http://www.sysdeveloper.net/dcl/
5
DCL Database Connectivity
DDBC의 개요

목적


특징





UNIX, Windows에서 이식성과 성능을 목표로 함
객체기반의 인터페이스 모델을 사용
ANSI SQL92에서 정의하고 있는 모든 RDBMS 데이터 타입을 지원
데이터베이스 서버와의 인터페이스 역할만을 충실히 하도록 설계
Time-Zone이 동반한 날짜, 시간 지원
다른 데이터베이스 인터페이스와의 비교





ODBC : C 언어 기반의 인터페이스로 운영체제 의존되진 않지만 윈도우 이외의
운영체제를 위한 드라이버가 거의 없음
ADO(ActiveX Database Object) : 윈도우(COM/DCOM)에 의존
BDE(Borland Database Engine) : C 기반의 인터페이스로 Delphi의 클래스 라
이브러리를 사용할 수 있음. 윈도우에 의존
JDBC : JAVA에 의존
ESQL : 특정 벤더에 의존되고 CLOB, BLOB와 같은 데이터의 조작이 어려움
2006-02-23
http://www.sysdeveloper.net/dcl/
6
DCL Database Connectivity
어플리케이션 인터페이스의 비교
DDBC
(Windows, UNIX)
ADO
(Windows)
JDBC
(JVM)
Delphi
(Windows)
SQLConnection
Connection
Connection
TDatabase
SQLQuery
Command
Recordset
Statement
ResultSet
TQuery
SQLField
Field
rs.getXXX
TField
SQLParam
Parameter
stmt.setXXX
TParam
SQLFields
Fields
TFields
SQLParams
Parameters
TParams
2006-02-23
http://www.sysdeveloper.net/dcl/
7
DCL Database Connectivity
인터페이스간의 성능비교


2004.06
INSERT, SELECT을 100회 실시하는 프로그램의 4회 실행 평균
서버
Oracle 9
인터페이스
소요시간(초)
ODBC(MFC,
C++)
49.5
ADO(C++)
21
60
50
40
BDE(Delphi,
20
Object Pascal)
30
DDBC(C++)
10
17.25
20
0
IBExpress
8.25
InterBase 6
BDE
Oracle 9
DDBC
2006-02-23
ODBC ADO
DDBC
IBEx DDBC
InterBas e 6
9.25
http://www.sysdeveloper.net/dcl/
8
DCL Database Connectivity
데이터베이스 어플리케이션의 예

HtmlTemplate를 사용한 DHE 서블릿
62: <table id="zipcodeTable" border=1 cellspacing=0 style="width:100%;
534:
HtmlTemplate&
text-align:center">
ZIPCODE = (*this)["ZIPCODE"];
63: <col span="1" width="15%" style="text-align:center"/>
535:
SQLQuery& q = m_pOwner->session()->m_query;
64: <tr>
536:
q.execute(
537:
"SELECT ZIPCODE“
65:
<th>우편번호</th>
538:
", CONCAT(SIDO, ' ', GUGUN, ' ', DONG) AS ADDRESS“
66:
<th>주소</th>
539:
", BUNJI\n“
67:
<th>번지</th>
540:
"FROM DCLWC_ZIPCODE “
68: </tr>
541:
"WHERE DONG LIKE '%" + (*it).value[0] + "%'“
69: <!-- BEGIN ZIPCODE -->
70: <tr onclick="selectItem(this);">
542:
);
71:
<td>$ZIPCODE</td>
543:
q.fetch();
72:
<td style="text-align:left">$ADDRESS</td> 544: if (q.eof())
73:
<td>$BUNJI</td>
546:
erase("ZIPCODE");
74: </tr>
548:
else
75: <!-- END ZIPCODE -->
549:
{
76: </table>
550:
while(!q.eof())
551:
{
552:
ZIPCODE.assign(q.fields(), "&nbsp;");
553:
append("ZIPCODE", ZIPCODE);
554:
q.fetch();
555:
}
556:
}
2006-02-23
http://www.sysdeveloper.net/dcl/
9
DCL HTTP Server Extension
DHE의 기본개념
웹 서버 어플리케이션 기술간의 비교

1.
2.
3.
서버기술
언어
번역 및 실행
이식성
데이터베이스
PHP
PHP
Interpreter
○1
PHP lib
ASP
VBScript, JScript,
Perl
Interpreter
△2
ADO
ASP.NET
VB, JScript, C#,
C++, J#
Compiler
X
ADO
JSP
(Java Servlet)
JAVA
Compiler,
Interpreter(JVM)
○
JDBC
FastCGI3
(C++)
(Compiler)
○
-
DHE(DCL)
C++
Compiler
○
DDBC
PHP의 데이터베이스 함수는 DBMS 종속되므로 DBMS 이식성이 없음
ASP의 경우 Perl을 사용하면 이식성이 있으나 ADO와 같은 ActiveX를 사용하면
이식성이 없음
FastCGI는 CGI의 발전된 형태로 인터페이스만 제공
2006-02-23
http://www.sysdeveloper.net/dcl/
10
DCL HTTP Server Extension
기본 구성요소

HTTP Server


Servlet





Apache1, Apache2, IIS
DSO로 구현
HTTP요청에 대한 구체적인 분석과 실질적인 서비스 담당
둘 이상의 HTTP 요청에 대하여 다중 스레드 상태에 있을 수 있음
같은 운영체제에서 서로 다른 웹 서버간의 바이너리 레벨 이식성
Servlet Container




웹 서버의 확장모듈(Plug-In)로 구현
서블릿 모듈을 적재, 제거하고 실행기회를 제공
서로 다른 HTTP Server간의 API 차이점을 흡수
운영체제와 HTTP 서버에 종속되어 구현됨
2006-02-23
http://www.sysdeveloper.net/dcl/
11
DCL HTTP Server Extension
ApacheBench를 사용한 성능비교
160
119
120
80
108
60
56
40
80
87
74
25
4
1000
900
800
700
600
500
400
300
200
100
0
155
24
32
42
a p a c h e 2.0.54
G N U /Lin u x
(P -III 850M H z)
iis 5.0
jsp
.net/c#
asp/vb
dhe(c)
dhe
php5
dhe(c)
dhe
dhe(c)
apache
2.0.52
to m c a t
5.5.9
W in d o w s 2000
(P 25
-4 1500M h z)
re q u e s ts /s e c
20
V M (M B y te s )
15
10
10
requests/sec
a p a c h e 1.3.23
dhe
php4
dhe(c)
dhe
0
전체요청 : 640개
동시요청 : 64개
18
20
19
21
12
9
5
5
3
0
3
4
6
line=2000
(284126 bytes)

a p a c h e 1.3.23
apache
2.0.52
G N U /Lin u x
(P -III 850M H z)
iis 5.0
jsp
.net/c#
asp/vb
dhe(c)
dhe
a p a c h e 2.0.54
to m c a t
5.5.9
W in d o w s 2000
(P -4 1500M h z)
re q u e s ts /s e c
2006-02-23
php5
dhe(c)
dhe
dhe(c)
dhe
php4
dhe(c)
dhe
0
1000
900
800
700
600
500
400
300
200
100
0
MBytes
requests/sec

line=200 (28525 bytes)
line=2000 (284126 bytes)
200
MBytes

http://www.sysdeveloper.net/dcl/
V M (M B y te s )
12
DCL Fast Page
DCL Fast Page

목적



특징





웹 어플리케이션에 있어서 프로그램과 디자인을 분리
HTML만을 아는 디자이너가 스킨 개발이 가능
디자인(스킨)만 적용하면 다양한 웹 페이지를 쉽게 개발
프로그래머가 아닌 웹 디자이너가 동적인 페이지를 개발하는 것이 가능
이름을 “Fast Page”로 한 이유



동적인 콘텐츠를 생성하는 기존의 웹 어플리케이션의 개발에 있어서
프로그래머와 디자이너간의 업무 결합도가 높음으로 인한 생산성 저하를 개선
DHE 어플리케이션으로 웹 서버의 플러그인 수준의 빠른 페이지 생성 성능
단순화된 개발 방법을 제공하기 때문에 웹 페이지 개발의 기간이 빠름
개발경과


2005.08 ~ 현재
웹 디자이너를 위한 메뉴얼 작업
2006-02-23
http://www.sysdeveloper.net/dcl/
13
질의 및 응답
질의 및 응답

DCL의 개발 경과

2001.09 ~ 2002.04




2003.06 ~ 2004.02



IFC 2.0을 DCL 1.0으로 이름 변경
Informix, MySQL 드라이버 추가
2004.06 ~ 2005.04





IFC(현 DCL) : String, 컬렉션 클래스 중심의 라이브러리, 프로세스 수준의 디버깅 환
경
InterBase, Oracle 데이터베이스 드라이버
IWE(현 DHE) 프로토타입
DCL 2.0
데이터베이스 인터페이스 재 설계 및 Informix, InterBase, MySQL, Oracle 드라이버
재작성
스레드 수준의 디버깅 환경
DHE 인터페이스 재 설계
관련문서

http://www.sysdeveloper.net/dcl/
2006-02-23
http://www.sysdeveloper.net/dcl/
14