웹 개발 툴로 변신한「파워빌더 9」

일반입력 :2003/05/15 00:00

김종진

얼마 전까지만 해도 많은 개발자들은 혼돈 속에 살았다. 매일매일 새롭게 선보이는 기술 속에서 지금 사용하고 있는 기술을 버려야 할지, 새로운 기술을 도입할 경우 발생할 수 있는 불확실성들을 고민해야만 했다. 하지만 요즘은 어느 정도 웹 기술들(특히 기업에서 필요로 하는 것)이 자리를 잡아가고 있다. 물론 지금 이 순간에도 새로운 기술이 나오고 있지만 대부분 기존 기술에 대한 확장이나 부가적인 기술이 아닌가 한다.파워빌더는 야심차게도 기업에서 사용하는 그 많은 기술을 파워빌더 하나만을 가지고 개발할 수 있도록 하겠다며 9 버전을 발표했다. 실제로 C/S를 위한 4GL 툴과 웹 개발을 위한 수많은 에디터 툴을 단 하나의 툴만으로 해결할 수 있다면 얼마나 편할까? 동일한 인터페이스에서 모든 작업이 가능하다면 개발자에겐 대환영일 것이다. 하지만 개발자들은 이미 자신만의 많은 툴에 익숙해져 있으며 그것만으로도 충분하다고 생각할지 모른다. 파워빌더 9이 막강한 기능을 앞세워서 많은 개발자에게 '익숙한 것에 대한 이별'과 '낯선 곳에서의 아침'을 받아들이게 할 것인가, 아니면 기능 미달(?)로 기존 파워빌더 사용자에게 단지 익숙한 것에 안주하는 정도로 그칠 것인지 개발자들의 반응이 궁금하다. 지금부터 새로워진 파워빌더의 기능을 하나씩 살펴보도록 하자.기업 전산환경에서 파워빌더 9의 역할일반적인 기업환경에서 파워빌더의 위치(역할)가 어디까지인지 먼저 살펴보자. 일반적인 기업의 전산환경은 <그림 1>과 같이 구성된다. 물론 개략적인 그림이기 때문에 많은 요소들이 빠져 있지만 큰 구성은 차이가 없다. 크게 C/S(2티어, 3티어)와 웹(인터넷, 인트라넷)으로 구분할 수 있다. 파워빌더 9은 여기서 C/S의 클라이언트 작성, 애플리케이션 서버의 컴포넌트 작성(EAServer인 경우)과 배포, 웹 서버의 웹 페이지(ASP, JSP, 파워다이나모)의 작성과 배포를 담당한다. 그럼 파워빌더 9에서 추가되고 향상된 기능에 대해서 살펴보자.

<그림 1> 일반적인 기업 전산환경
익숙한 개발환경 파워빌더 9은 이전과 달리 통합개발환경(IDE)의 변화가 전혀 없다. 이전 버전까지는 버전 업마다 정도의 차이는 있었지만 개발환경이 많이 바뀌어 왔었다. 따라서 새 버전을 접할 때마다 달라진 개발환경에 익숙해지는 데 어느 정도 시간을 투자해야 했었지만 버전 8 사용자가 9을 접한다면 익숙한 환경을 그대로 사용할 수 있다.XML, JSP 웹 기능 향상에 중점 파워빌더 9에서는 특히 통합개발 툴의 이미지를 높이기 위해 웹 개발 환경 쪽에 많은 기능이 추가된 점에 주목할만 하다. 사실 시대의 흐름이 변화하기 때문에 같이 변해가는 것이라 할 수 있다. 웹에서 강화된 기능은 다음과 같이 XML과 JSP에 집중되어 있다.데이터윈도우 XML 지원데이터윈도우와 데이터스토어의 데이터를 XML 템플릿 객체를 사용하여 XML로 Export(SaveAs)할 수 있고 Import도 가능하다. 템플릿은 여러 개를 사용할 수 있으며 경우에 따라서 바꾸면서 사용할 수 있다. Export하는 방법도 이전의 HTML이나 PSR과 같은 방식으로 SaveAs(), Describe() 함수와 Dot Notation을 사용할 수 있다.
Dw_1.SaveAs("c:/sample.xml",XML!,TRUE)Ls_xml = dw_1.object. DataWindow.Data.XMLLs_xml = dw_1.Describe(DataWindow.Data.XML)
Import도 ImportFile(), ImportString(), ImportClipboard() 함수를 사용하여 가능하다. XML 문서 외에 CSV(콤마 구분자 사용) 문서도 import가 가능하게 되어 총 4가지의 문서(Text, DBF, XML, CSV)로 import 가능 문서가 확장되었다.
<화면 1> XML Export와 관련된 속성 정의
XML을 위한 파워빌더 DOMXML 문서에 접근하고 조작할 수 있는 PBDOM을 제공한다. PBDOM은 W3C DOM API로 구현된 것은 아니지만 매우 비슷하다. 또한 JDOM과도 유사하다. PBDOM 파워빌더 API는 파워스크립트 내에서 표준 형식의 XML을 읽고 쓰고 조작할 때 사용할 수 있다.
<그림 2> PBDOM의 계층
PDF와 XSL-FO로 변환파워빌더 9은 2가지 방법으로 데이터윈도우의 데이터와 프리젠테이션을 PDF(Portable Document Format) 파일로 저장할 수 있다. 기본적인 방식은 Distiller를 이용하는 것이고 다른 방식으로는 XSL-FOP를 이용할 수 있다.
<화면 2> PDF 저장 포맷
JSP 타겟이번 버전에서는 JSP를 쉽게 작업할 수 있는 개발 환경을 제공한다(<화면 3>). 쉽게 JSP 페이지를 만들 수 있고 JSP 1.2 호환 웹 애플리케이션 서버에 배포할 수 있다. 이것은 새로운 기능이라기 보다는 이전 버전의 파워다이나모와 ASP 작업이 가능한 웹 타겟과 유사하다고 생각하면 된다.
<화면 3> JSP 타겟 기능
JSP 클라이언트를 위한 웹 서비스사용자 태그를 생성해서 JSP 페이지에서 웹서비스를 사용할 수 있다. 파워빌더 9에서 제공하는 마법사(JSP Web Service Proxy Wizard)를 이용해서 JSP 페이지에서 웹 서비스를 호출하는 데 필요한 정보를 갖고 있는 사용자 태그를 만들 수 있다. 마법사를 이용하면 WSDL(Web Services Description Language) 파일 위치, 서비스, 포트와 같은 정보를 수집할 수 있다.강화된 클라이언트 기능 지난 버전에 비해 C/S쪽에 신경을 많이 썼다는 느낌이다. 획기적인 기능이 추가되지는 않았지만 아기자기하게 도움이 될 만한 기능들이 추가된 것을 확인할 수 있다. 파워빌더 NIPBNI(PowerBuilder Native Interface)는 표준 프로그래밍 인터페이스로서 개발자가 파워빌더의 기능을 무한정 확장할 수 있도록 해주는 기능이다(<그림 3>). PBNI를 이용해서 파워빌더(nonvisual, visual, marshaler)의 기능을 확장할 수 있으며 C++ 애플리케이션에 PBVM(PowerBuilder virtual machine)을 내장할 수 있다. 또한 JNI를 통해서 자바 애플리케이션과 PBVM이 통신할 수 있다.이전 버전에서 왓콤 C++를 제공하고 nonvisual userobject를 이용해서 이것을 활용했던 기억이 난다. PBNI는 예전의 이 기능이 강화된 것 같다. 주로 nonvisual을 이용하겠지만 visual userobject를 이용해서 C++로 만든 객체를 사용할 수 있어 그 활용성이 확장됐다.
<그림 3> PBNI 흐름도
애플리케이션 서버의 EJB 클라이언트기존에는 웹 애플리케이션에서 만들어진 비즈니스 로직(EJB로 작성)은 웹에서만 사용됐다. 파워빌더 9에서는 EJB로 작성되어 WAS에 배포되어 있는 비즈니스 로직을 사용할 수 있다. 이것은 소스를 이중으로 작성해야 하는 문제점을 극복할 수 있지만 실제로 애플리케이션이 웹과 C/S가 중복되어 처리되는 경우가 얼마나 많은가에 따라 그 효율성을 따질 수 있을 것이다.윈도우 클라이언트를 위한 웹 서비스앞의 JSP에서와 마찬가지로 윈도우 클라이언트에서도 인터넷을 통해서 공급되는 다양한 웹 서비스 데이터를 사용할 수 있다. 이 기능은 프론트 페이지와 백 오피스가 분리되어 운영되는 많은 사이트에 프로그램 구현에 많은 유연성을 제공하게 된다. 즉 배송정보와 같은 내용을 사용자와 같은 화면을 띄우지 않고서도 윈도우 클라이언트에서 바로 확인할 수 있다는 것이다.OrcaScript 언어Orca(Open Repository Case API)Script는 파워빌더에서 제공되는 IDE를 사용하지 않고 직접 파워빌더 애플리케이션과 파일을 처리할 수 있는 배치 스크립트를 작성하는 데 사용한다. 이것은 소스 컨트롤에서 파워스크립트 타겟의 최종 버전을 찾는 데도 사용할 수 있으며, 타겟 PBL을 만들고 EAServer에 배포하고 파워빌더 실행파일을 컴파일하는 등의 작업에 사용할 수 있다. 대량의 빈 PBL 껍데기를 만들기 위해서 IDE에서는 일일이 버튼을 눌러서 만들어야 하지만 OrcaScript를 이용하면 build library 명령어를 이용해서 한꺼번에 만들어 낼 수 있다.파워빌더 런타임 패키저파워빌더 런타임 패키저는 <화면 4>에서 보듯이 별도의 툴이다. 이전에는 개발자들이 최종 사용자에게 필요한 파일을 골라서 사용했으나 이 툴을 이용하면 필요한 파일만을 골라서 MSI(마이크로소프트 윈도우 Instaler 패키지)파일로 만들어 준다.
<화면 4> pbpack90.exe를 실행한 화면
파워빌더 리소스 모니터파워빌더 리소스 모니터(PBRESMON)는 파워빌더가 OS 내의 USER/GDI 자원이 충분한지 아닌지를 결정하는 데 도움을 주기 위한 외부 유틸리티이다. 간혹 자원이 부족하여 파워빌더를 사용하다 다운되는 경우를 겪게 된다. 이는 개발자들이 여러 툴을 같이 띄워놓고 쓰기 때문인데, 여러 개의 파워빌더를 함께 띄워놓고 사용하는 경우가 있다. 파워빌더의 새로운 페인터가 열리기 전에 PBRESMON과 상호 작용을 하여 리소스가 부족하다면 페인터가 열리지 않고, 자원 부족 메시지를 보여준다. Pb.ini 파일에 다음과 같은 내용을 적어주면 파워빌더가 시작할 때 같이 시작한다.
[ResourceMonitor]PerformResourceMonitoring=1
물론 이 내용없이 직접 pbresmon90.exe를 직접 실행할 수도 있다. PBRESMON은 시스템 트레이에 보여지고 여러 번 실행시켜도 한 번만 실행한다. PBRESMON은 파워빌더 8.0.2부터 소개된 기능이다.소스 컨트롤 기능 향상여러 명의 개발자가 동시에 개발할 때 소스를 관리하기 위해서 형상관리 툴을 사용하는데 파워빌더 9은 이전 버전에 비해서 여러 가지 기능을 향상시켰다.
◆ PBL에서의 소스 조작 기능(Poeration) : Check-in, Check-out과 같은 조작이 편해졌다.◆ 오버라이트 프롬프트를 감추는 기능◆ 체크리스트 다이얼로그 박스◆ 소스 컨트롤 히스토리 기능◆ 각 구성요소의 상태 결정 기능◆ PBNative 구성◆ 라이브러리 페인터 리스트 뷰 기능◆ 소스 컨트롤 로깅 기능
데이터윈도우 기능 향상 향상된 데이터윈도우 기능 중에서 우선 프린트와 관련된 부분을 살펴보겠다. 5개의 속성이 추가됐는데 이중 대표적인 두 가지만 소개하겠다.
◆ DataWindow.Print.PrinterName : 데이터윈도우에 프린터를 지정할 수 있다. 특히 여러 개의 프린터를 사용해야 하는 경우(일반 프린터, 전표 출력…)는 사용자가 프린트할 때마다 프린터를 바꾸면서 사용하거나, API 함수를 이용해서 기본 프린터를 바꾸면서 사용하는 불편함을 덜 수 있게 되었다.◆ DataWindow.Print.Copies : 프린터 드라이버가 지원하지 않는 경우라도 사용할 수 있다. 이전에는 프린터 드라이버가 기능을 제공하는 경우만 이 기능이 유효했다.
또한 데이터윈도우 내의 Child 데이터윈도우의 자동 조회(parent 데이터윈도우가 조회될 때 같이 retrieve되는) 기능을 제어할 수 있다. DDDW(DropDownDataWindow) 탭의 AutoRetrieve 체크박스의 선택에 따라서 제어가 되며 스크립트에서는 Edit.AutoRetieve 속성의 값(Yes/NO)을 바꾸면 된다.그룹 리포트 스크롤링에서는 데이터윈도우가 그룹 헤더를 가진 경우 이 속성(DataWindow.HideGrayLine)이 유효하다. 그룹 헤더를 가진 데이터윈도우가 스크롤될 때 고정된 페이지가 겹쳐지는 것을 가리키는 회색 라인이 존재하는데, 속성값을 'Yes'로 바꿈으로써 이 라인을 나타나지 않게 할 수 있다.파워스크립트 기능 향상파워스크립트에도 여러 가지 기능이 추가됐다. 하나씩 살펴보자.
◆ Accessibility 형식 추가 : 이 형식은 MicroSoft Active Accessibility 기술과 인터페이스하기 위해서 제공된다.◆ Environment 객체에 파워빌더 BuildNumber 속성 추가 : 파워빌더로 개발된 시스템들의 각각 BuildNumber가 어떻게 되는지 확인할 수 있다(env.pbbuildnumber).◆ 새로운 AddToLibraryList() 함수 : 기존의 라이브러리 리스트에 새로운 PBL이나 PBD를 추가할 때 사용한다. 컴포넌트가 자원을 공유하면서 생기는 문제를 해결하기 위해서 EAServer에 적용된 컴포넌트의 서치(Search) 리스트에 PBD 파일을 추가할 때 사용할 수 있다.◆ 새로운 XMLParseFile()과 XMLParseString() 함수 : 이 두 함수는 XML 서비스를 지원하기 위해 추가되었다. XML 파일이나 문자열을 parse하고 제대로 된 형식인지 검사하고 컴파일한다. ImportString(), ImportClipboard(), ImportFile(), SaveAs() 함수도 XML을 지원한다.◆ GetFileOpenName()과 GetFileSaveName()의 새로운 아규먼트 : 이 두 함수는 새로운 아규먼트를 가지는데, 이 아규먼트(string initdir)는 초기 폴더를 가리키는 것으로 Optional이다.◆ 새로운 LongLong 데이터 형식과 함수 : C++, 자바와 XML에서 사용되는 64비트 integer 형식과 매치되는 LongLong 데이터 형식을 지원한다. EAServer EJB 클라이언트, 웹서비스 SOAP 클라이언트와 PBNI 애플리케이션에서 사용된다. String이나 BLOB 형식의 데이터를 LongLong 형식으로 바꾸는 LongLong(string or blob) 함수와 두 개의 unsigned long을 하나의 longlong 값으로 합치는 LongLong(lowword, highword) 함수가 추가되었다.◆ 문자열 관련 함수의 DBCS : 문자열 관련 함수(Trim, Left, Mid…)는 DBCS(Double Byte Character Set) 환경에서 사용 가능하다. DBCS 환경에서는 1바이트 문자와 2바이트 문자가 섞여 있으면 표준 문자열 함수(Trim, Left, Mid…)들은 1바이트 결과만 리턴한다. DBCS 함수(TrimW, LeftW, MidW…)는 혼합된 결과를 리턴한다. Left('1가abc',3)의 결과는 '1가'이지만 LeftW('1가abc',3)의 결과는 '1가a'이다. 단 머신이 SBCS라면 두 함수의 결과는 동일하다.
QuickWatch 지원하는 디버거 얼마나 쉽고 빠르게 프로그램의 오류를 찾을 수 있느냐 하는 부분도 중요한 요소 중 하나다. 파워빌더 9의 향상된 디버거 기능을 살펴보면 다음과 같다.
◆ TipWatch : BreakPoint에 의해서 멈췄을 때 소스뷰의 변수위에 마우스를 가져가면 팝업 tip 윈도우가 나타나고 변수의 현재 값이 보여진다. 일일이 변수값을 찾아보지 않고 원하는 변수의 값을 쉽게 얻을 수 있다.◆ QuickWatch : 소스뷰의 변수나 객체이름 위에 마우스를 가져다 놓고 오른쪽 버튼을 클릭하거나 을 누르면 QuickWatch 창이 나타난다. 이 창에서는 특정 변수의 값은 물론이고 객체와 관련된 속성 값이 모두 보여진다. 또 해당 변수나 속성 값을 변경할 수도 있다(<화면 5>).
<화면 5> QuickWatch 창
오라클 9i 통합한 데이터베이스 연결 기능 데이터베이스 연결 기능은 오라클 9i와 유니코드 데이터베이스 지원의 두 가지 측면을 살펴볼 수 있다. 우선 오라클 9i와 관련한 기능은 다음과 같다.
◆ 연결풀링 : 연결풀링은 부하조절을 하기 위해 여러 세션을 묶어서 사용하는 것이다. 풀은 애플리케이션에서 관리되지 않고, OCI에 의해서 관리된다. 스크립트에서는 CnnPool DBParm값을 'Yes'로 하면 사용할 수 있다.◆ NCHAR과 NVARCHAR2 지원 : pbo9090.dll을 이용하여 오라클 9i를 사용할 때 NCHAR와 NVARCHAR2 데이터형식을 지원한다.◆ 오라클 스토어저프로시저의 LOB outpub 파라미터 : pbo9090.dll 인터페이스를 사용하여 오라클에서 BLOB데이터를 가져오기 위해서 스토어저프로시저나 함수의 output 파라미터로 LOB(Large Object)를 사용할 수 있다. LOB의 개수 제한은 없다.◆ ConnectAs DBParm : 일반 사용자가 권한을 부여받아 SYSOPER나 SYSDBA 시스템 권한을 가지고 연결할 수 있다. 이때 username과 연관된 스키마가 아닌 기본 스키마로 연결된다. SYSDBA의 스키마는 SYS이고 SYSOPER의 스키마는 PUBLIC인데, ConnectAs DBParm을 이용하여 원하는대로 연결할 수 있다.
ASE(Adaptive Server Enterprise) 12.5와 오라클 9i를 위해서 파워빌더 9은 DBCS와 유니코드간의 데이터 변환이 가능한 유니코드 데이터베이스의 접근을 지원하다. 또한 이들 DBMS 내의 유니코드 데이터 형식을 지원한다. 그 외 DBMS에 있어서 유니코드 데이터베이스의 연결, 데이터 저장, 조회는 가능하지만 DBCS와 유니코드간의 데이터전환은 지원하지 않는다.그 밖의 기능들끝으로 주요기능 외에 파워빌더 9의 달라진 기능들을 살펴보겠다.
◆ 프로젝트 페인터의 새로운 버전 필드 : 프로젝트(Project) 페인터에 있는 File과 Product Version 필드는 제품이 설치될 때 파일의 변경이 필요한지 여부를 결정하기 위해서 MSI(인스톨러)에 의해서 사용되며, 포맷은 'N,N,N,N'이어야 한다. 네 가지 숫자는 제품의 메이저, 마이너, 포인트 릴리즈, 빌드 넘버를 나타낼 때 사용한다. 사용하지 않는 숫자는 0으로 채워야 한다(<화면 6>).◆ 컴파일할 때 데이터베이스 연결 끊기 : 내장 SQL을 사용한다면 컴파일할 때 최근에 연결된 DBMS와 비교하여 SQL문이 정상인가 확인한다. 하지만 2개 이상의 데이터베이스와 관련된 내장 SQL문들이 있다면 하나의 데이터베이스 외의 다른 문장은 경고 메시지가 난다. PB.ini 파일에 다음과 같이 지정하면 데이터베이스와 연결되지 않은 상태에서 컴파일을 진행한다.[pb]dbsign=0◆ 클립 윈도우에 설명 컬럼 추가 : 클립 윈도우에 기존의 Name, Preview 컬럼 외에 설명 컬럼이 추가되었다. Modify 버튼을 이용해서 나타난 다이얼로그 창에서 설명 컬럼에 내용을 넣는다. 클립 윈도우의 활용도가 높아졌다(<화면 7>).
<화면 6> 제품의 정보를 나타내는 숫자
<화면 7> 클립 윈도우의 활용도가 높아졌다.
웹 통합, 포켓PC 지원으로 한 걸음 전진!지금까지 파워빌더 9의 전체적으로 달라진 기능들을 살펴봤다. 우선 웹 기능이 향상되어 파워빌더 사용자에게 힘을 실어준 것은 환영할 만하다. 앞으로 추가로 포켓PC와 닷넷과의 통합을 지원할 예정이고, 웹로직이나 웹스피어 같은 WAS의 EJB 클라이언트로 사용될 수 있다는 것 등은 파워빌더가 사용자를 위해서 노력하고 있다고 인정할 만하다. 또한 클라이언트에서도 웹과의 통합을 시도하는 것은 긍정적이다. 기업의 전산환경은 웹과 C/S가 별개로 작성되고 운영되는 것이 아니라 하나의 환경 내에서 사용되어야 하는 것이 당연하기 때문이다. 그렇다면 과연 파워빌더가 웹과 C/S를 함께 개발할 수 있는 통합개발 툴로서 성공할 수 있을까. 이에 대한 답은 각 개발자들의 전체적인 시스템의 이해정도와 개인적인 성향에 달려있다 하겠다. 기존의 파워빌더 사용자라면 더 이상 좋은 해답은 없을듯하다. 만약 WAS를 이용해서 웹으로만 애플리케이션을 구성하고자 한다면 그리 매력적인 툴로 개발자에게 다가가기는 힘들어 보인다. 물론 파워빌더의 데이터윈도우가 굉장히 매력적이기는 하지만, 너무 데이터윈도우 중심으로 방향을 끌고 가는 것은 웹 개발자들을 끌어들이기에는 힘들지 않나 느껴진다. 대부분의 기업은 비용이 많이 투입되는 웹으로 모든 시스템을 가져갈 수는 없을 것이다. 어차피 대부분의 데이터는 데이터베이스에 들어 있고, 그 데이터를 클라이언트(윈도우 클라이언트, 브라우저 클라이언트)에 보여주고 받아들이는 것이므로 하나의 통합된 툴에서 모두 해결할 수 있다는 것은 전산 관계자들의 귀를 솔깃하게 만들기에 충분하다. 어떤 특정한 툴에 얽매이는 것을 싫어하는 국내 개발자들의 마음을 어떻게 돌려세우느냐 하는 것과 투박한 디자인 부분을 어떻게 개선느냐가 파워빌더 9이 파워빌더 제 2전성기의 주역이 될 수 있는지를 판가름하는 열쇠가 될 것이다.파워빌더가 추구하는 개방성은 어떤 특정기술에 얽매이지 않고 다양한 기술을 사용할 수 있는 점에서 좋고 추천할 만하다. 앞으로 계획된 많은 기술들을 제때에 선보이고 많은 기능이 추가되면서 안정성도 향상된다면 파워빌더에서 멀어졌던 개발자들이 다시 돌아올 수 있을 것이다. @