'Report'에 해당되는 글 3건

  1. 2009.10.30 웹 어플리케이션 보안 취약점 테스트 (1)
  2. 2009.07.23 국내 기술로 개발된 오라클 개발 지원 및 튜닝 도구
  3. 2009.07.02 웹보고서 기능 만들기 (iReport->JasperReports)
2009. 10. 30. 15:56

웹 어플리케이션 보안 취약점 테스트


Developed by the Open Web Application Security Project (OWASP), WebScarab is first and foremost a proxy used to analyze browser requests and server replies. In addition to serving as a tool for packet analysis, you can use it to "fuzz" sites, looking for some of the same exploits mentioned above. To use WebScarab, you first configure proxy settings in your Web browser. For Mozilla Firefox, perform these steps (see Firefox keyboard shortcuts for the alternative accessible steps):

  1. Click Tools > Options > Advanced > Network.
  2. Click Settings.
    The Connection Settings window opens.
  3. Select the Manual proxy configuration option.
  4. For both HTTP Proxy and SSL Proxy, type localhost, and set the port to 8008.
  5. Make sure the No proxy for box is empty, then click OK.

Figure 1. Firefox connection settings

For Windows® Internet Explorer®, perform the following steps (see Internet Explorer keyboard shortcuts in the IE Help menu for the alternative accessible steps):

  1. Click Tools > Internet Options > Connections.
  2. Click LAN Settings to open the Proxy Settings window.
  3. Under Proxy Servers, select the Use a proxy server for your LAN check box, then click Advanced.
  4. For HTTP and Secure, type localhost for the proxy address to use, then type 8008 for the port.
  5. Make sure the Exceptions box is empty, then click OK.

Figure 2. Setting the proxy

Now, you are ready to scan a Web site.

Scan your site with WebScarab

The following examples use the Hacme Casino site, which is built by Foundstone with certain vulnerabilities so that it can be used for training purposes. The site comes packaged with Apache Tomcat, as well, so you can run it locally if you wish.

Next, open WebScarab. Once you launch it, you will see only two tabs: Summary and Intercept. Because you want to use WebScarab for fuzzing, change the view by clicking Tools > Use full-featured interface > OK. You will then be asked to restart WebScarab. When you have done so, you can begin with the interface shown in Figure 3. (WebScarab provides a list of keyboard shortcuts—unfortunately only two.)

Figure 3. The WebScarab interface

To start your new session, click File > New. You are presented with a box that asks where you would like to save your session. Select or create the storage directory, then click OK. When you use WebScarab with Hacme Casino, start the server before opening your browser. Then, in the browser's address bar, type http://localhost:3000.

Once you open the browser, you should start seeing some activity in WebScarab, because WebScarab is capturing all the requests and replies between the browser and the server. Because you want to use the fuzzing feature to test for vulnerabilities, first look at where the different vulnerabilities can exist. Start by looking at the login as a potential exploit. To test the login, you should record the interaction that takes place between the browser and the server. There is no need for a successful login here, so you can enter whatever you like for the user name and password: For this example, enter casino for both the user name and password, then click Login.

Of course, the login will be unsuccessful, but that is not what you're interested in. Instead, go back to WebScarab. In the Path column, right-click account\login, then click Use as fuzz template, as shown in Figure 4.

Figure 4. The fuzzing template

Modifying the all_attack.txt file

Add the lines 'or 'x'='x and ') or 1=1-- to the file, because they are basic SQL injection strings and will work in this example.

Perform the following steps:

  1. Click the Fuzzer tab at the top of the WebScarab interface.
  2. Click Source.
  3. Browse to the location of your dictionary. (I used all_attack.txt)
  4. Provide a description of the source, then click Add.
  5. Click Close to return to the Fuzzer window.

Now, go to the user_login parameter and click in the area under the Fuzz Source column. Because you have only loaded one source—All attack—select it from the drop-down menu. Do the same for the user_password parameter, as shown in Figure 5.

Figure 5. Selecting the attack file

Now that you have defined the source, click Start to begin the process. The fuzzer inserts the parameters from the file into both the user name and password inputs. You should see some activity on the screen as the tool completes each attempt. Typically, you would need to examine each ID in the results to analyze what takes place with each attempt. However, because you know that the added strings will produce a result, you can see what can happen when the fuzzer is successful.

Double-click the first string in the example, shown in Figure 6.

Figure 6. Finding a vulnerability

Note that in the top circle, the value for user_login and user_password is ‘) OR 1=1--. Next, note that the location has changed from http://localhost:3000, which is the home page, to http://localhost:3000/lobby/games, which is what a user who successfully logged in would see. What does this mean? It means that your site is vulnerable. Because ‘) OR 1=1-- is an SQL string, the site is vulnerable to an SQL injection. Scroll through the results using the Next button, and look for that value. Notice that the location here remains http://localhost:3000. You know from this result that inserting this type of string would not result in a successful login attempt, so the site is not vulnerable to this type of attack.

Paros Proxy

Another useful tool for security testing is Paros Proxy. Like WebScarab, Paros captures conversations between the browser and the server for analysis. You can also use it to test for vulnerabilities on a site. To run Paros, you must change the port number used in the proxy settings of your browser. For WebScarab, you used 8008; change this port to 8080 before running Paros, or the tool won’t work. For this exercise, the example uses WebGoat, another tool from OWASP. Like Hacme Casino, WebGoat runs using the Tomcat server as a local host. For the purposes of this article, WebGoat shows more vulnerabilities in the Paros scan than would Hacme Casino.

Using multiple scanners

Anyone testing his or her own sites should learn from this that different scanners may show different results for the same site. That is why professional pen-testers use multiple tools when working.

After changing the port, open Paros. Then, perform these steps:

  1. In the WebGoat folder, double-click WebGoat.ba to start Tomcat.
  2. Open your browser, then type http://localhost/WebGoat/attack.
  3. Type guest for the user name and password.
  4. Click Start WebGoat.

Now, go back to Paros and start your scan of the WebGoat site. Of course, you can use your own site instead by entering its URL in the address bar.

In Paros, expand the Sites folder to see http://localhost in the tree. Expand this folder to bring up WebGoat. Highlight WebGoat, and then click Analyse Scan. This immediately begins the scan of the site. Large sites may take a while, but this one should only take a few seconds. Once it starts scanning, the bottom pane changes to the Alerts tab automatically (see Figure 7). When the scan is complete, click OK in the pop-up window that tells you where to find the report.

Figure 7. Viewing alerts

You can expand the alerts to show them in greater detail. You can also view the report, which offers much more information. First, however, save the scan results by clicking File > Save As, choosing a location and file name for your scan, and then clicking Save.

To view a report, click Report > Last Scan Report. Click OK in the pop-up window, and a new browser tab opens with the report of the scan results, as shown in Figure 8. This report provides a great deal of information regarding each vulnerability detected, including a reference to the OWASP page that deals with the specific exploit.

Figure 8. The Paros report

Although scanners are a good way to find possible vulnerabilities in a Web site, the best security companies always test possible vulnerabilities by hand for false positives. Testing for these possible exploits means actually going to the areas of your site that were reported as vulnerable, inserting SQL code or a script into the site itself to see what the response is, and then going into the site itself and plugging any exploits. Large firms often hire professional programmers who specialize in this type of testing (called vulnerability validation), but as a developer, you can perform some of these tests yourself. Not only will doing so help you secure your site a bit more, but it will help you as you build future sites.

False positives with SQL injection

Using the Hacme Casino site again, let's look at the vulnerability that WebScarab found: an SQL injection exploit at the login. With Hacme Casino running, enter the SQL code that WebScarab used successfully—‘) OR 1=1--—in the Login input area of the site. When you click Login, the account Andy_Aces is opened. Because 1=1 is going to be true, the most basic form of an SQL injection works here. As for Andy, he has the bad luck of being the first account in the database.

Just how did this work? In the back end, the database runs a query like this:

SELECT * FROM users WHERE (username=username AND password=password)

The bit of code injected through the Login box turned the valid query into this:

SELECT * FROM users WHERE (username=’’) OR 1=1—AND password=’’)

This query returns a successful login for the first user of the site, which is unfortunately Andy.

Of course, this example only scratches the surface of an SQL injection. As someone becomes more skilled in attacking Web sites, he or she can actually exploit this vulnerability to create users, change passwords, and extract sensitive data from the site. Protecting your site against these attacks involves taking a few steps:

  • Use parameterized queries or stored procedures to access a database as opposed to using string concatenation. Parameterized queries require that you define all the SQL code and then pass in each parameter to the query later. This allows the database to distinguish between code and data, so it doesn't matter what type user input is supplied. Stored procedures are similar to parameterized queries in that they require you to define the SQL code first, then pass in the parameters later. These elements differ in that the SQL code for a stored procedure is defined and stored in the database itself, then called from the application.
  • Sanitize user input by "whitelisting" the characters allowed. If you are asking for a name, only allow a-z and A-Z. For phone numbers, limit characters to 0-9. Use the appropriate validation technique supported by your database to do this.
  • Escape user-supplied input using the character escaping scheme set up by your database. Escaping special characters tells your database that the characters provided in the query are in fact data, not code. If all user-supplied input is then escaped using the proper scheme, the database will not confuse that input with SQL code you have written.
  • Don't give attackers any help. Make sure error messages don't give away information that can be later used against the site.

False positives with XSS

To demonstrate an example of an XSS attack, turn back to WebGoat. Start this site by clicking Cross Site Scripting > LAB: Cross Site Scripting > Stage 1: Stored XSS. Log in to the demo site—Goat Hills Financial—with a user name of Larry Stooge and the password larry. Now, an attacker would need to find somewhere to input a malicious script. The Search Staff function probably has a text box where someone can enter a name: Click Search Staff to reveal it, as shown in Figure 9.

Figure 9. An XSS entry point

In the Name box, type alert("You got me with XSS");. This script may only show an alert box like you see in Figure 10, but think about what could happen if the script could redirect a user to a fake human resources site where he or she had to enter a social security number, home address, bank information, and so on. Altering the action associated with the OK button can do this. For really creative malicious hackers, the sky is the limit if the user trusts them.

Figure 10. A successful XSS attack

To protect against XSS attacks, you need to scrub all inputs. If the input will later be used as parameters to operating system commands, scripts, and database queries, then it is essential that you do so. You can scrub user inputs by escaping untrusted data before allowing it to be inserted into HTML element content and HTML common attributes. OWASP recommends that all ASCII values less than 256 be escaped in the latter. JavaScript™ data values, HTML-style property values, and HTML value attributes can also be escaped. Of course, before you escape input data, make sure you have validated any input to your Web site. If you are looking for specific input values, numbers, letters, e-mail addresses, and the like, then only allow this type of data and refuse anything else.

원문 : http://www.ibm.com/developerworks

Trackback 0 Comment 1
  1. 한글번역 2009.12.11 09:17 address edit & del reply


2009. 7. 23. 18:54

국내 기술로 개발된 오라클 개발 지원 및 튜닝 도구

국내 기술로 개발된 오라클 개발 지원 및 튜닝 도구

김형일│데이터베이스 컨설턴트

시스템 개발·운영시에 다양한 소프트웨어나 솔루션을 도입해 구축하게 된다. 이때 어떠한 솔루션을 도입하느냐에 따라 시스템의 성패가 좌우된다. 또한 다양한 툴의 구매도 그 목적에 따라 해당 업무의 효율성을 높일 수도 있고 효과를 주지 못하는 경우도 있다. 이 글에서는 데이터베이스를 이용하는 개발 프로젝트에서 필수 불가결한 툴인 데이터베이스 클라이언트 툴 가운데 웨어밸리의 Orange for Oracle(이하 오렌지) 제품의 기술적인 기능에 대해 알아보고자 한다. 오렌지 도입시 판단의 기준에 도움이 되길 바란다.

1990년대부터 데이터베이스 시장이 급성장하면서 오라클 개발지원 도구 시장에 먼저 선보인 외산 제품들은 국내 고객에게 쉽게 파고들었다. 하지만 국내 제품이 아닌 탓에 사용자는 사용상의 불편함이나 비용 측면의 불리한 점이 있더라도 눈감고 외산 제품을 사용할 수밖에 없었다. 웨어밸리 오렌지는 국내 기술로 개발된 오라클 개발 지원 및 튜닝 툴로, 사용자의 요구사항에 맞춰 기능을 추가할 수 있다는 점이 가장 돋보이는 매력이다.

뒷방 신세로 전락되는 툴

많은 기업에서 오라클 데이터베이스 지원 툴을 구매하고도 6개월 아니 1년이 지나면 단지 구매 리스트에만 등재돼 있을 뿐 현업에서는 사용하지 않아 사장되는 경우를 종종 볼 수 있다. 이것은 툴의 기능에 대한 잘못된 판단으로 적절하게 구매하지 못한 이유도 있겠지만, 구매 후 잘 활용할 수 있도록 교육이 되지 않는 이유가 크다. 이러한 측면에서 볼 때 오렌지는 지금도 매월 1회씩의 무료 교육을 실시해 사용자들이 오렌지를 업무에 잘 활용하도록 유도한다.

필자의 경우 튜닝 작업이나 시스템 아키텍처를 수립하기 위해 고객과 함께 작업을 할 때, 오렌지의 기본 기능만을 사용하거나 아예 사용하지 않는 고객도 많이 봤다. 이러한 경우 고객에게 몇 가지 유용한 기능을 알려주면 대부분의 고객 반응은 ‘아니, 이런 기능도 있었군요’란 놀란 표현이 나온다. 결국 수 십 가지 기능 중에 사용자가 알고 사용하는 기능은 극히 일부이며, 편리하게 사용할 수 있는 기능이 있는데도 불구하고 적절하게 사용하지 못하고 있어 구매 후 교육 여부도 구매시 꼭 생각해 볼 점이다.

툴 구매시 가장 고려할 점

그럼 툴을 구매하고자 할 때 가장 고려해야 할 점은 무엇일까? 앞서 언급한 사후 교육, 사용자 요구사항 적용 등도 있겠지만 가장 먼저 생각해 볼 수 있는 것은 ‘툴의 기능성이다. 기본적으로 적용하고자 하는 업무에 툴이 갖고 있는 기능이 얼마나 적합한가에 따라 잘 활용되는 도구로써 사용될 가능성이 높아지기 때문이다.

오렌지의 4가지 버전과 특징

오렌지는 2001년 12월 12일 1.0버전 출시 이후 현재 3.1버전까지 오라클 데이터베이스 기반의 개발 및 DBA 툴로 선보이고 있다. 최초 오렌지의 개발자는 DBMS 튜닝 및 디자인을 하는 사람으로, 현업에서 작업 중에 비효율적인 매뉴얼 작업들을 자동화하기 위해 오렌지를 만들었다. 이렇게 만들어진 오렌지는 많은 튜너 및 컨설턴트의 피드백을 받아 사용자 중심의 툴로 설계된 것이 가장 큰 특징이다. 지금의 오렌지 3.1버전은 개발 지원 기능 및 튜닝 지원 툴, 모니터링 툴도 제공된다.

오렌지는 오라클 데이터베이스를 기반으로 하는 시스템을 구축할 경우, 개발자가 SQL을 작성하고 데이터를 조회, 등록, 수정 및 PL/SQL 개발 등을 하는데 많은 기능을 제공한다. 또한 DBA의 주요 작업인 데이터베이스 모니터링을 쉽게 할 수 있는 모니터링 기능도 제공한다(DBA 에디션).

오렌지는 사용 용도별로 크게 4가지로 나눠 구분할 수 있다. 스탠더드 에디션(Standard Edition), DBA 에디션, Reorg 에디션, Trusted 에디션으로 나눠지는데, 2005년 3월에 Reorg 에디션을 추가로 구성했다. 사실 Reorg 에디션이라고 해서 특별히 Table, Index, Tablespace 등의 reorg 작업을 오렌지가 직접 해주는 것이 아니라 오라클의 DBMS_REDEFINITION 패키지를 이용해 온라인 reorg 절차를 간편하게 작업할 수 있도록 지원해 주는 것이다. 또한 Trusted 에디션은 사전 등록된 내부 결제 프로세스를 거친 SQL만을 수행할 수 있도록 하는 기능을 갖춘 사전 보안 감시용이라 할 수 있다.

Trusted 에디션의 경우 고객의 업무 프로세스와 연계해 구성되어 사용하는 것이므로 제품 구입시 고려할 사항이 스탠더드 에디션, DBA 에디션과 현격하게 다르기에, 이글에서는 고객이 주로 사용하는 스탠더드 에디션, DBA 에디션만을 설명하도록 하겠다.

개발자 위한 오렌지 스탠더드 에디션

다음의 <표 1>과 같이 스탠더드 에디션은 오라클 데이터베이스를 기반으로 개발할 때 필요한 많은 기능들을 제공한다. 그리고 DBA 에디션은 데이터베이스 시스템의 전반적인 작업 및 모니터링 작업을 수행할 때 필요한 기능들을 갖추고 있다.

<표 1> 오렌지의 개발자 지원 기능
구분 개발자 지원 기능
SQL 툴 다양한 방식의 데이터 조회 및 SQL의 수행 지원, 멀티 탭으로 여러 SQL 동시 작업 가능, 미리 생성된 SQL을 호출해 수행할 수 있는 Named SQL 기능, 다양한 출력, SQL 포맷팅 등을 지원함
Schema Browser 16가지 타입의 데이터베이스 오브젝트에 대한 조회 및 상세 참조 지원, 타입 별로 실행할 수 있는 메뉴 지원
Query Builder GUI 화면으로 Drag & Drop 방식의 SQL의 작성을 지원함
PL/SQL 툴 Package, Procedure, Function의 작성 지원, 다양한 템플릿을 지원하며 PL/SQL 디버깅 기능 포함
Description 툴 데이터베이스 내 오브젝트의 상세 정보를 참조할 수 있는 기능, 또한 오브젝트를 재 생성할 수 있는 스크립트 생성 기능도 지원
Table Editor 테이블의 데이터를 쉽게 조회해 Form 형식으로 변경/삭제할 수 있는 기능
Plan 툴 SQL의 튜닝 작업시 실행계획 및 Trace, trace out 분석 및 테이블, 인덱스의 통계 정보를 볼 수 있는 기능 지원. 특히 오라클의 tkprof를 사용하지 않고 이보다 더 많은 정보를 제공하는 trace 분석 엔진 지원
Trace 툴 Session trace의 output인 trace file을 가독성 있는 포맷으로 보여주는 방식
Database Information 데이터베이스의 system parameter, hidden parameter, system 통계치, sga정보, log file, control file 등의 일반 정보를 확인하는 기능
Network Conf 툴 클라이언트의 SQLNET Service(tnsnames.ora)를 설정, 변경, 테스트하는 기능
Export/Import 툴 오라클 데이터베이스로부터 데이터의 export/import 기능 지원
File Editor 개발자 PC의 텍스트 파일 편집을 지원
Loader Data Loading/Unloading 기능 지원, 엑셀 혹은 텍스트 자료를 손쉽게 Loading/Unoloading. 오렌지 자체 Loader 엔진 이용
Lock/Latch Monitor Database Lock 및 블럭킹된 세션 및 오브젝트 정보 제공, OPS/RAC 지원
Transaction Monitor 수행 중인 트랜잭션의 롤백세그먼트 사용량, DML의 양에 대한 정보 제공
SQL Monitor SQL Area 내의 정보 분석 제공, Buffer gets, buffer gets/exec, execution, disk reads, elapsed time별로 조회 가능. 또한 실제 SQL text를 이용해 검색 가능
Session Monitor 데이터베이스에 접속되어 있는 모든 세션들의 정보 제공, 세션의 100여 가지 통계정보 중 5개를 선택해 표시하는 옵션, 상세 조사가 필요한 세션에 대핸 trace 생성 기능, Kill session 기능, 현재 사용하는 SQL display 기능
Data Dictionary 툴 오라클 내부의 딕셔너리 테이블을 카테고리 별로 구분해 제공, 카테고리 별로 참고하고자 하는 딕셔너리 테이블을 쉽게 검색하여 참고할 수 있는 기능
ERP Monitor
대표적으로 고객의 요청에 의해 추가된 기능으로 Oracle Applications(ERP)를 사용하는 경우 ERP의 기본적인 부분에 대한 모니터링 기능

Step-In 기능으로 직관적 정보 분석이 가능

오렌지는 개발부터 가장 가볍고 빠르게 수행될 수 있어야 한다는 전제 하에 제작됐으며, 성능이 느린 화면은 개발시부터 자체 튜닝 대상이 되어 집중적으로 관리됐다. 오렌지의 개발 언어는 Visual C++를 이용했고, 오라클 OCI 인터페이스를 사용한다. 또한 디스크 공간도 매뉴얼을 포함해 약 20MB 정도만 사용할 뿐이다. 다만 오렌지의 빠른 성능을 보장하기 위해서 오렌지에서 사용하는 뷰(view)를 데이터베이스에 생성해야 하는데, 이 작업을 하는 것은 ‘Orange Configuration Admin’을 통해서 쉽게 생성할 수 있다. 하지만 이 작업은 오라클 데이터베이스의 내부 사용 User인 SYS user로 접속해서 수행해야 하기 때문에 데이터베이스 관리자의 허가 하에 작업할 수 있다. 처음 오렌지를 사용할 때는 이것이 다소 제약사항이지만, 스탠더드 에디션인 경우에는 ‘Orange Configuration Admin’을 돌리지 않아도 대부분의 기능은 사용이 가능하다.

화면 간의 작업 및 동작은 멀티 쓰레드 방식으로 구현돼 여러 개의 창에서 동시에 작업할 수 있으며, 오래 수행되는 쿼리를 기다리지 않고 다른 작업을 할 수 있다는 것이 장점이다. 또한 데이터베이스로의 접속도 여러 개의 세션을 맺을 수 있어서 많은 작업을 한 번에 할 수 있게 디자인됐다. 게다가 많은 컨설턴트들의 오랜 노하우가 담겨 있어 개발자, DBA는 작업시 편리한 작업환경에서 오렌지를 사용할 수 있다. 이러한 예는 오렌지 곳곳에서 찾아 볼 수 있다.

SQL monitor에서 특정 SQL을 찾은 후, 현재 이 SQL을 사용하는 세션을 찾는 Step-In 기능은 현업에서 시스템 분석시 많이 사용하는 방법이다. 또한 DBA 에디션의 Health Check 기능은 간단하면서도 기본적으로 점검해야 하는 부분을 많은 컨설턴트가 아이디어 및 개인의 노하우를 집약시킨 것이다. 물론 Report & Graph 기능에 이미 정의되어 있는 스크립트 구성을 보면 노하우를 쉽게 느낄 수 있을 것이다.

그리고 <표 1>에서 나열한 많은 툴 간에 Step-In 작업이 가능해 직관적인 정보 분석이 가능하다. 관심 있는 정보에서 더블 클릭이나 오른쪽 버튼을 누르면 상세 정보 창으로 전이되어 빠르게 자세한 정보를 확인할 수 있다. <화면 1>은 오렌지가 제공하는 툴 간의 Step-In을 보여주고 있다. 이러한 Step-In 기능은 실제 업무에서 작업하는 경우 참고 정보를 확인하기 위한 최적의 툴로 연동하는 기능이다.

<화면 1> 오렌지 툴 간의 Step-In 기능



고객 맞춤형 툴로 변신 가능한 ‘오렌지’

마지막으로 오렌지의 일반적인 측면 중 가장 돋보이는 것은 국내에서 개발한 툴이므로 사용자의 요구사항을 적극적으로 수용할 수 있다는 점이다. 여타 다른 툴들은 외산이므로 제공되는 기능만을 사용할 뿐 추가적인 요구 사항을 요청할 방법이 없다. 다만 오렌지의 경우에는 사용자가 필요한 기능을 개발자와 협의해 점차 고객에게 편리한 툴로 만들 수 있다는 것이다. 사실 오렌지를 개발한 웨어밸리 홈페이지(www.warevalley.com)에는 고객과 개발자의 통신 채널이 있으며 활발하게 Q&A를 진행하고 있다.

그 중 한 예가 ERP 모니터 기능으로 오라클 애플리케이션(ERP)을 사용하는 고객의 요청사항에 의해 만들어진 기능이다. 이는 ERP 관리 작업을 할 때 기본적으로 모니터링을 해야 하는 항목에 대한 화면을 항상 보게 되는데, 오렌지를 이용한 모니터링과 함께 하게 되므로 불편할 사항이 있었다. 이에 대해 고객이 적극적인 요청을 해서 오렌지에 상기 기본 모니터링을 할 수 있는 ERP 모니터 기능을 추가하게 된 것이다. 그러므로 고객이 꼭 필요하다고 느끼고 생각하는 기능에 대해서는 향후에도 추가적인 Add-on이 될 수 있다.

오렌지 탄생 실화

오렌지 개발의 핵심 목표는 가볍고, 빠르고, 쉽게 사용할 수 있는 툴을 만든다는 목표 아래 만들어 졌다. 상상을 해보라. 오렌지의 instance monitor(9개의 그래프)는 단 하나의 SQL로 구현됐다.
오렌지의 탄생은 처음 툴을 만들려고 만들어진 것은 아니다. 데이터베이스 컨설팅을 하던 초기 개발자가 자신이 작업하는 것을 자동화하기 위해 2000년부터 2001년 사이 약 1년간 ‘오렌지’라는 이름으로 만들어 졌다. 그 이후 2001년 12월 정식 ‘오렌지’라는 제품으로 탄생했다. 오렌지라는 이름은 그가 오렌지를 그냥 좋아했기 때문이란다.
그 후 웨어밸리의 한 개발자가 오라클 연동한 클라이언트 툴을 혼자 만들어 보기 위해 ‘토마토’라는 것을 만들었다. 결국 토마토는 오렌지의 기능을 강화하기 위해 오렌지에 흡수됐고, 그 이름을 Report & Graph 툴이라고 했다. 가볍고, 빠르고, 쉽게 사용할 수 있는 툴로 개발될 수밖에 없는 이유는 국내 개발 환경을 잘 아는 개발자의 땀이 묻어 있기 때문이다.

개발자 측면의 유용한 기능들

이제까지는 오렌지의 일반적인 구조에 대해 알아봤다. 그럼 개발자 측면에서의 오렌지 기능들에 대해 살펴보자. 개발자가 주로 하는 작업은 SQL의 작성, 데이터 로딩, 데이터 확인, 데이터 수정, PL/SQL 프로그램 작성 등으로, 오렌지는 이러한 작업 활동을 수행할 수 있는 기능들을 제공한다.

SQL 툴에서 지원되는 기능으로 SQL의 조회 결과를 엑셀로 저장하는 기능은 기본적으로 지원되며 그리드 출력, 텍스트 출력을 지원한다. 그리고 멀티 탭을 지원해 여러 SQL 작업을 동시에 할 수 있다. 이 SQL 툴에서는 필자가 자주 사용하는 기능으로는 SQL 툴의 Action 메뉴에 Recall Named Script 기능인데, 자주 사용되는 SQL 스크립트를 선택해서 수행할 수 있다. 핫 키로 Ctrl+R을 누르면 쉽게 저장된 SQL을 수행할 수 있다(필자의 경우에는 Named Script를 종류별로 잘 정리해 약 200여개의 스크립트를 업무에 필요시 바로바로 사용한다). 이 SQL 툴에서 특별히 지원되는 기능으로 SQL 포맷 기능이 있는데, 이는 정돈되지 않는 SQL을 가지런하게 정돈해주는 기능이다. 특히 이 기능은 튜닝 작업을 할 때 SQL Area에서부터 악성 SQL을 추출해 작업하는 경우에 더욱 편리하다. SQL Area에서 추출한 SQL들은 주로 작성된 SQL의 형태가 아닌 무작위로 보여주는데, 이 SQL 포맷 기능은 버튼 한 번의 클릭으로 보기 어렵게 되어 있는 SQL을 잘 정돈해준다. SQL*Navigator에도 이러한 기능이 있는데 비교해 본다면 오렌지가 그다지 훌륭하게 포맷되지는 않지만 무료로 제공된다는 데에서 매력이 있다.

SQL 툴에서 SQL을 작성하다 보면 여러 번의 수정 및 테스트를 하게 된다. 이때 여러 번 수정된 것을 취소하고 싶을 때는 Undo 기능을 이용해 변경 전의 값으로 돌리는데, 오렌지의 경우는 무한 undo가 지원된다. 이는 SQL을 처음 작성한 시점까지 undo할 수 있다는 것으로. undo가 제한적으로 지원되는 경우(예, MS-Word)에는 undo를 하다가 더 이상 안 될 때 난처할 경우가 발생하는 단점을 없애준다.

개발자들이 많이 사용하는 또 다른 기능 중에 하나는 로더(Loader)이다. 프로젝트의 개발 단계에서 레거시 데이터를 오라클 데이터베이스로 로딩할 때 사용하게 된다. 또한 현재 오라클 데이터베이스에서 데이터를 Un-loading하는 기능도 지원된다. 로더를 이용해 데이터를 로딩할 수 있는 포맷으로는 .csv, .xls, .txt file 등을 지원하므로, 다양한 소스의 데이터 로딩이 가능하다. 반대의 경우인 Unload 역시 상기 지원되는 포맷으로 Un-loading이 가능하다.

개발자들이 SQL을 작성하거나 PL/SQL을 작성할 때 모든 구문을 알고 작업하는 것이 아니므로, 자주 오라클 매뉴얼을 참조해봐야 하는데, 이러한 불편을 없애기 위해 오렌지에서는 DML, DDL, PL/SQL, PL/SQL Control structure, Pseudo column, SQL Function 등의 템플릿을 지원해 매뉴얼 참조 없이 손쉽게 SQL이나 PL/SQL의 작성을 도와준다.

PL/SQL 툴의 독특한 기능 ‘Source Control’

개발자 관련 오렌지 툴 중의 PL/SQL 툴은 독특한 기능이 있다. 이는 오라클 내의 PL/SQL을 작성할 때 편리하게 작업할 수 있는 환경을 지원한다. 이 PL/SQL 툴의 독특한 기능으로 Source Control이 있는데, 기존의 PL/SQL을 수정할 때 다른 개발자와의 동시 수정을 예방하고 어떤 사용자가 현재 어떤 PL/SQL을 수정하고 있는지 알 수 있는 checkout list를 지원한다. Checkout list는 다른 개발자가 동일 PL/SQL을 Check-In한 정보를 보여 준다.

<화면 2>는 checkout list 버튼을 눌렀을 때, 현재 PL/SQL을 수정하고 있는 사용자의 IP-address와 컴퓨터 이름이 나타난다. 만약 자신이 수정하고자 하는 PL/SQL이 이미 다른 개발자로부터 checkout이 됐다면, PL/SQL 툴에서는 이 PL/SQL을 수정할 수 없다. 만약 일반적인 툴이라면 이러한 제약사항 없이 사용하게 되어 두 명의 개발자가 동시에 소스를 수정해 혼란이 발생하게 될 것이다. 만약 다른 개발자가 동시에 작업하고 있다면 IP-address 및 컴퓨터 이름을 통해 어떤 개발자인지 알 수 있고, 전화 등의 통신 채널을 통해 작업 정지나 잔업 협의를 통해 계속 진행할 수 있을 것이다.

<화면 2> Checkout list

PL/SQL 툴의 다른 큰 특징으로는 디버거(Debugger) 기능이다. 일반적인 컴파일러와 유사한 형태로 PL/SQL(procedure, function) 등을 수행 스텝 별로 디버깅할 수 있다. 이 디버거 기능도 다른 외산 제품들은 고가로 팔고 있으나 오렌지는 기본으로 제공하고 있으니 이 또한 큰 장점이라 할 수 있다. 물론 이 PL/SQL 디버거 기능이 C++ 등의 디버거처럼 화려한 기능을 제공하지는 않지만, 기본적은 기능(변수 참조, Step into, Step over, Breakpoirt 등)은 지원한다. PL/SQL 툴에서 procedure, function을 컴파일할 때 컴파일 에러가 발생하게 되면 status 창에 오라클 에러 번호와 에러 메시지를 보여주는데, 이 에러 번호를 더블 클릭하면 그 에러가 발생한 PL/SQL의 부분으로 커서(cursor)를 이동시킨다. 이 기능은 개발자가 빠르게 에러의 위치를 파악하고 수정할 수 있도록 한다.

개발자의 데이터베이스 관련 툴을 사용하는 목적 중의 하나는 데이터베이스 내의 오브젝트를 참조하는 경우이다. 어떤 테이블이 있는지 해당 테이블에 어떤 컬럼이 있는지, 또한 제약사항, 인덱스 등을 확인하는 경우가 있다. 이렇듯 개발자가 SQL 작성시 참조하는 DB 오브젝트의 정보를 손쉽게 확인할 수 있는 스키마 브라우저 기능은 약 16개의 오브젝트를 윈도우의 탐색기와 같이 참조할 수 있도록 지원해 동시에 창을 열고 쉽게 다른 오브젝트를 참고할 수 있다. 물론 스키마 브라우저에서 16개 오브젝트를 검색하며 오른쪽 버튼을 누르면 그 오브젝트에 대한 작업을 할 수 있는 메뉴가 나타난다. 만약 constraint tab에서 오른쪽 버튼을 누르게 되면 ‘Describe, Add constraint, Enable Constraint, Disable Constraint, Drop object’ 등의 연관된 메뉴를 보여준다. 이는 각각의 오브젝트 타입에 따라 필요한 작업을 바로 할 수 있게 하는 기능이다.

DBA 측면의 유용한 기능들

DBA를 위한 기능은 스탠더드 에디션보다 DBA 에디션에 많다. DBA 에디션은 <표 1>과 같이 스탠더드 에디션의 모든 기능에 Space Manager, Security Manager, Instance Monitor, Graph & Report, Health Check, Analyze Manager, Log Miner가 있다.

스탠더드 에디션과 DBA 에디션의 차이는 DBA 기능은 주로 데이터베이스 전체 범위의 모니터링이나 점검, 전체 레벨의 작업을 지원하는 툴들이 대부분이라는 것이다. 가장 대표적인 DBA 지원 툴은 ‘Instance Monitor’이다. 이 툴은 데이터베이스 전반적인 상태를 표시해 주는데, 크게 9가지 부분으로 나눠져 있다. Buffer Cache Hit Ratio, Library/Dictionary Cache Hit Ratio, Connection 수, Active Transactions, Shared Pool Size usage, I/O block per Second, Redo size, Parse/Execution, Wait event 등을 한 눈에 볼 수 있게 주기적으로 그래프를 그려준다. 이 9가지 그래프들은 서로 시간적으로 연결돼 있어 한 그래프의 위치를 선택하면 나머지 8개의 그래프에 시간을 함께 보여줌으로 같은 시간의 정보를 비교해 점검해 볼 수 있다. 이전의 오렌지 2.0 버전에서는 로깅 기능이 없어서 현재 상태의 정보만을 볼 수 있었고 오렌지를 정지했다가 다시 사용할 때는 이전에 모니터링 결과는 무시되고 새로이 모니터링을 해야 했는데, 3.0 버전부터는 로깅 기능도 생겨서 정상적일 때와 부하가 있을 때의 상태를 비교해 볼 수 있다.

이 인스턴스 모니터는 데이터베이스의 전체적인 뷰를 확인하고자 할 때 사용한다. 특별히 이 인스턴스 모니터로부터 다른 Action은 취할 수 없고 현상만 보게 되지만 간단히 시스템의 상태를 보기에는 무리가 없다. 특히 wait event는 옵션 쪽에서 사용자가 특별히 관심 있는 오라클 wait event를 지정할 수 있어 사용자의 편의성을 갖추고 있다.

<화면 3> Instance Monitor의 사용화면

두 번째로 소개할 DBA의 툴 중에 Space Manager가 있다. 이것은 데이터베이스의 테이블 스페이스, 데이터 파일들의 사용량, redo log의 현황, 롤백 세그먼트의 현황을 확인하는 기능을 제공한다. <화면 4>는 각각의 오브젝트가 물리적으로 데이터 파일의 어떤 위치에 몇 개의 extent로 구성되어 있는지 맵 형식으로 한 눈에 보여준다. 이 화면을 통해서 데이터 파일(테이블 스페이스)이 얼마나 조각화가 됐는지 손쉽게 파악할 수 있으며 오브젝트의 실제 저장 위치를 확인 할 수 있다. 다만 블럭의 맵을 그릴 때 약간의 시간이 걸린다는 아쉬움이 남는다(여러 번 튜닝을 했다고는 하는데, 작업량 자체가 많은 관계로 쉽게 빨라지지 않는 것 같다).

<화면 4> Space Manager 데이터 파일 맵

상세한 정보를 제공하는 세그먼트 인포 탭

그리고 <화면 5>와 같이 세그먼트 인포 탭을 보게 되면 해당 오브젝트가 할당 받은 공간 중에 얼마만큼의 블럭을 사용하고 있고, 얼마만큼의 여유 블럭이 있는지 확인할 수 있다. 세그먼트 Usage 바 차트를 보면 진한 파란색, 파란색, 연한 파란색, 하얀색 등으로 구분되어 있는데, 블럭의 사용 정도에 따라 색깔을 달리해 정확한 정보를 시각적으로 보여준다. 이 정보를 이용해 이미 할당 받은 공간의 내부 사용량을 점검함으로써 추가적인 공간 할당이 언제쯤 필요하게 될지 판단하는데 도움이 된다. 보통은 이미 할당한 공간은 모두 사용하는 것으로 간주하고 테이블 스페이스의 공간 할당 계획을 수립하게 되는데, 좀 더 자세한 정보를 이용해 상세한 공간 할당 계획을 수립할 수 있다. 이러한 기능은 여타 다른 툴에서는 찾아보기 어려운 상세한 정보를 제공하는 기능이다.
<화면 5> Space Manager 세그먼트 인포

DBA 에디션에서 빈번히 사용되는 기능 중 하나로 Health Check 기능을 꼽을 수 있는데, 이는 데이터베이스의 전반적인 점검 부분들을 한 번에 점검해 HTML 형식의 리포트를 생성해 준다. 크게 General, SGA, Wait Event, I/O, Space, Access Type, MTS, OPS(RAC)의 8가지로 나뉘며, 각각의 부문별로 점검해야 하는 통계량 및 데이터베이스 운영 내역을 검토해 점검 리포트를 생성한다. 리포트에는 각각의 점검 내역에 대한 자세한 가이드도 제공되어, 문제점이 발견됐을 경우 어떠한 조치를 취해야 하는지 DBA가 쉽게 알 수 있다. 이 Health Check 기능에서 점검하는 점검 리스트들은 데이터베이스 튜닝 및 컨설팅 경험이 있는 여러 명의 노하우가 집약되어 만든 것이다.

그러므로 Instance Monitor와 Health Check 기능을 통해서 데이터베이스 관리자는 관리하고 있는 데이터베이스 상태와 일일 점검 작업을 손쉽게 수행할 수 있다. 다만 오렌지에서 제공되는 기능은 고객의 환경 및 상황에 만족되지 않을 수 있다. 즉, 오렌지에서 이미 정의된 내용이 아닌 고객의 환경에 관련한 점검이 필요한 경우에는 Instance Monitor와 Health Check 기능으로도 점검이 되지 않는다. 이러한 고객의 특화된 부분을 위해 Graph & Report 툴을 제공한다. 이 Graph & Report는 개발 초기에 ‘토마토’라고 불리었고, 오렌지와는 별도로 개발되다가 오렌지의 한 개 툴로서 통합됐다.

Graph & Report에서는 Health Check에서 수행되지 않는 다양한 점검 스크립트가 미리 정의돼 있으며, 사용자가 직접 새로운 스크립트를 정의할 수 있는 User Define Group을 통해 원하는 스크립트를 생성해 모니터링하고 이를 차트로 표현될 수 있도록 제공한다.

DBA 에디션에서 제공되는 Log miner 툴은 오라클의 log miner 기능을 이용해 이미 수행된 작업들에 대한 상세 내역을 편리하게 확인할 수 있다. 이 log miner 사용자에게 오라클 log miner package의 사용법을 숙지하지 않더라도 손쉽게 데이터베이스 작업 이력을 확인해 볼 수 있다.

<표 2> 오렌지의 DBA 지원 기능
구분 DBA 지원 기능
Space Manager Tablespace, Datafile의 물리적인 저장 공간 할당 정보 제공. 테이블스페이스 추가, 변경, 데이터 파일 추가 변경 지원, 특히 세크먼트 인포에서는 할당된 익스텐트 내부의 블럭들의 사용 정도를 상세하게 보여줌
Security Manager User, Role, Privilege, Profile 등의 권한 관리 기능 제공
Instance Monitor 데이터베이스의 기본적인 SGA 모니터링 기능 제공, 9개의 기본적인 차트를 지원하며 특히 wait event는 사용자가 선정해 구성 가능하다. 히스토리 관리를 위해 로깅기능 제공
Graph & Report 특정 SQL의 반복 수행을 이용한 그래프 작성 제공, User Define SQL의 수행 및 그래프 작성 제공
Health Check 10여명의 컨설턴트에 의해 선별된 데이터베이스의 기본적인 Health Check 및 Report 제공, OPS, RAC, MTS 관련 지원
Analyze Manager Table, Index에 대한 통계치 생성 및 관리 기능 제공, 특히 대량의 통계치 생성 작업시 테이블의 크기나 건수에 따라 완전분석(compute)이나 예측분석(estimate)이 가능
Log Miner Redo log/ Archive log에 대한 Log miner 분석을 쉽게 할 수 있는 기능 제공

튜너 측면의 유용한 기능들

오렌지의 태생이 튜너의 작업 지원을 위해서 개발됐다는 것은 이미 앞에서 언급했다. 즉, 튜너의 작업시 필요한 많은 기능이 오렌지에는 포함되어 있다.

SQL 튜닝에 강력한 기능을 갖고 있는 '오렌지'

오라클 데이터베이스 관련 튜닝이라고 하면 크게 두 가지로 나눌 수 있는데, 하나는 데이터베이스 튜닝이고 나머지는 SQL 튜닝이라 할 수 있다. 오렌지는 후자의 SQL 튜닝에 강력한 기능들을 많이 갖고 있으며, 전자인 데이터베이스 튜닝 기능도 보유하고 있다. 앞서 설명한 개발자 기능, DBA 기능에도 데이터베이스 튜닝을 위한 점검 기능이 포함되어 있으며, 특히 SQL Monitor, Instance Monitor, Session Monitor, Transaction Monitor, Lock Monitor는 데이터베이스 튜닝시에 자주 사용되는 기능이다.

SQL Monitor에서는 데이터베이스에 다양한 옵션을 이용해 부하를 많이 주는 SQL을 찾을 수 있으며, Instance Monitor에서는 주된 병목 현상이 어떤 부분에서 발생하는지 쉽게 확인할 수 있다. Session Monitor에서는 데이터베이스에 접속한 세션들의 작업 내역을 데이터베이스 통계치 기준으로 자원을 많이 사용하는 세션들을 편리하게 점검할 수 있다. 여기에서는 SQL을 튜닝하는 것을 중점적으로 설명하겠다.

대표적 튜닝 지원 기능 ‘Plan 툴’

대표적인 튜닝 지원 기능으로는 ‘Plan 툴’이라고 할 수 있다. Plan 툴은 개별 SQL의 수행 계획(Execution Plan)을 보여주며, 수행 계획의 각 단계별로 위치하는 오브젝트의 정보를 손쉽게 확인해 볼 수 있다. 단지 더블 클릭만으로 테이블의 컬럼 정보, 인덱스 정보, 그리고 테이블의 통계치 등을 확인해 볼 수 있다. 또한 하나의 SQL에 포함되어 있는 모든 테이블과 인덱스 정보를 수집할 수 있다. 물론 이러한 static 정보만을 갖고 정확한 튜닝 결과를 도출 할 수 없다. 이에 Plan 툴에서는 실시간 SQL Trace 기능을 지원한다. 오라클에서 SQL trace를 생성해 이 trace file을 실시간으로 읽기 편한 포맷으로 분석해 사용자에게 제공한다. 10046 이벤트를 이용한 여러 레벨의 trace를 지원하며, SQL 내부에 있는 bind 변수 값, wait event 및 실제 수행되는 시간을 정확하게 분석할 수 있다.

오라클의 tkprof 없이 자체 엔진으로 trace file을 분석한다?

오렌지를 사용하지 않는 경우에는 SQL의 trace를 걸어서 trace file을 확인하고, 오라클에서 제공하는 tkprof를 이용해 포맷팅을 해서 trace 결과를 확인하는 5∼6단계의 작업이 필요하나, plan 툴의 실시간 trace 기능을 사용하면 버튼 하나로 모든 작업이 완료돼 빠르게 튜닝 작업을 할 수 있다. 여기서 오렌지의 특이한 점은 trace file을 분석하기 위해서 오라클의 tkprof를 사용하지 않고 자체적으로 엔진을 만들어 trace file을 분석하는 것이다. 이렇게 자체적으로 엔진을 만들어서 사용하는 까닭은 오라클 서버의 tkprof를 이용해 분석하는 경우, 서버에 tkprof를 수행할 수 있도록 셸 프로그램 등을 구성해야 하는 구조적인 문제(오렌지는 서버에 에이전트가 없는 가벼운 구조이다)와 클라이언트 반응 시간, Wait Event 정보와 같은 더 많은 분석 정보를 주기 위해서다.

SQL 튜닝을 하는 과정에 하나의 SQL을 여러 방법으로 수정해 보고 작업하게 되는데, Plan 툴에서는 멀티 탭 기능을 이용해 여러 개의 SQL 버전을 만들어서 튜닝 작업을 할 수 있다. 물론 이런 변형된 SQL들을 각각 trace를 할 수 있으며, 이러한 모든 결과는 Workspace 개념으로 저장 및 로드할 수 있다(PTD 파일로 저장이 된다). 이 Workspace 개념은 개발자와 튜너와의 통신 수단으로 사용되곤 한다. 개발자가 개발한 SQL의 성능이 나오지 않을 경우에는 1차적인 Trace 및 통계정보를 workspace로 저장해 튜너에게 튜닝 요청을 하게 되면, 튜너는 이 workspace를 로드해 바로 튜닝 작업을 진행할 수 있으며 튜닝이 완료되면 수정된 SQL과 이에 따른 trace 정보를 다시 개발자에게 workspace로 저장해 전달할 수 있다.

<화면 6> Plan 툴

이 Plan 툴에서는 Run time execution plan을 보여준다는 것도 특징이다. SQL이 수행되는 과정은 크게 『파싱 | 바인딩 |수행』으로 나뉘는데, 지금까지는 실행 계획을 파싱 단계에서 수립해 수행했다. 그런데 오라클 데이터베이스 9i 버전부터는 bind peeking이라는 기능이 있어서 바인딩 단계에서 변수 값을 이용해 새로이 실행 계획을 생성하는 것이다.

그러므로 수행 계획만을 체크했을 때와는 달리 실제 수행 계획이 달라지는 경우가 종종 있다.

이러한 차이점은 개발자나 튜너를 황당하게 만드는데, 이렇게 차이가 나는 실행 계획은 확인시켜 줄 수 있다. Plan 툴의 내부 기능인 Trace를 독립적인 Trace 툴로 제공하고 있는데, 이는 Trace를 오라클 전체적인 방법으로 수행하거나, 이미 trace가 생성되어 있는 경우 이 파일을 분석하는 형태로 사용하기 때문에 추가된 것이다. 또한 포맷팅된 결과로 볼 수도 있지만 종종 로우 파일(Raw file) 형태의 참조가 필요한 경우를 대비해 로우 파일의 참조도 지원한다.

미래의 오렌지에 대한 기대

지금까지 오렌지가 개발자, DBA, 튜너에게 어떠한 기능을 제공하는지에 대해 알아봤다. 이 글에서 언급한 내용이 오렌지의 모든 기능은 아니지만, 자칫 매뉴얼처럼 될 것을 우려해 오렌지가 갖고 있는 기능 중에 사용자들이 가장 많이 사용하고 많은 도움을 주는 기능 위주로 설명해 오렌지를 선택하고자 하는 고객에게 객관적인 정보가 됐으면 하는 바람이다.

오렌지 역시 버전이 업그레이드되며 사용자 중심의 기능들이 많이 추가됐다. 하지만 앞으로 좀 더 해야 할 일이 많은 것 역시 현재의 숙제이다. 오라클 9i, 오라클 10g, 그리고 2005년 8월 말에 출시될 오라클 10g R2의 새로운 기능들을 사용자들이 손쉽게 접근하고 활용할 수 있는 그러한 오렌지로 변신해야 할 것이다. 아직까지는 오라클 8, 오라클 8i, 그리고 오라클 9i를 지원하는데 머물러 있기 때문에, 향후 1∼2년 이내에 오라클 10g의 장점을 표현해 주지 못한다면 시장에서의 입지는 좁아질 것이다.

오라클 10g에서 제공되는 기본 기능에는 AWR(Automatic Workload Repository), ADDM(Automatic Database Diagnostic Manager) 등이 있다. 이 기능들은 데이터베이스의 운영 상태, 문제점, 병목 현상의 원인 등을 모니터링 툴이 없어도 될 정도의 데이터를 제공한다. 이렇게 풍부한 데이터를 어떻게 효율적으로 사용자에게 제공하느냐가 다음 버전 오렌지의 발전에 계기가 될 것이다.

출처 :

오라클 데이터베이스 환경에서 쉽고, 빠르게 개발의 효율성과 생산성을 높이고, 성능의 최적화를 구현하는 어플리케이션 개발 및 성능 튜닝 툴

SQL과 PL/SQL개발 및 튜닝, 모니터링을 빠르고 쉽게 할 수 있는 인터페이스를 제공함으로써 사용자의 생산성을 향상 시킨다.

ORACLE DB를 액세스 하기 위한 SQL(Structured Query Language), PL/SQL을 작성하는 개발자와 SQL 튜닝과 모니터링을 하는 DBA

  • CPU : Pentium 133 이상
  • 메모리: 64 MB 이상
  • Software Platform: Windows 9x/NT/Me/2000/xp
  • SQL*Net 최소 : 8.0.5, 권장 : 8.1.7 이상 (http://otn.oracle.co.kr/software/)
  • Oracle RDBMS: Oracle 7.3 이상
  • Disk Space : 10MB

Orange 특장점
  • 현업 개발자들이 요구하는 핵심기능에 충실
  • 뛰어난 인터페이스
  • 오라클 경력이 많은 컨설턴트들의 실전을 통해 검증된 방법 및 interface 제공
  • 모든 기능이 통합형으로 제공
  • 순수 국내기술
    • 사용자들의 추가 요구사항에 신속한 대응
    • 한글 매뉴얼 및 HELP 제공
    • 기술축적에 따라 저렴한 가격으로 다양한 DB TOOL software 제공


  • Standard Edition
    • Schema Browser
    • Query Builder
    • SQL Tool
    • PL/SQL Tool
    • Description Tool
    • Table Editor
    • Plan Tool
    • Trace Tool
    • Database Information
    • Network Configuration Tool
    • Expert Tool
    • Import Tool
    • File Editor
    • Loader
    • Latch Monitor
    • Transaction Monitor
    • ERP Monitor
    • SQL Monitor
    • Session Monitor
    • Lock Monitor
    • Data Dictionary Tool
  • DBA Edition
    • Space Manager
    • Security Manager
    • Instance Monitor
    • Graph & Report
    • Health Check
    • Analyze Manager
    • Log Miner
  • Reorg Edition
    • Reorg Manager
      dbms_redefinition 패키지를 사용하여 테이블 온라인 REORG 및 REORG 대상 추출

  • Trusted Edition
    DB 사용자가 의도적으로 외부유출을 목적으로 데이터를 액세스하거나 또는 비의도적인 실수에 의하여 문제가 발생하는 것을 사전에 차단하기 위하여 DB 액세스 시 사전 등록된 내부결재 프로세스를 거친 SQL만 실행하도록 하는 기능을 갖춘 사전 보안감시용 툴

출처 : http://www.softwarecatalog.co.kr/

Trackback 0 Comment 0
2009. 7. 2. 11:43

웹보고서 기능 만들기 (iReport->JasperReports)

사용된 것들

MS Windows 2000 Advanced
JDK5.0 Update 8
PostgreSql 8.1.4
Struts 1.2.9
iReport 1.2.5
JasperReports 1.2.5

Adobe Reader 7.0

이 글을 무리없이 보고 이해할 수 있는 레벨

이글은 제가 생각하기에 웹보고서를 만드는 가장 쉬운 방법을 적은 글입니다.
하지만, 쉽다고는 하지만 아래에 밝힌 실력만큼은 갖추고 있는 분에게만 쉽다는 얘기입니다.
본문에서는 각 분야의 기초적인 설명은 하지 않습니다.
기초설명하다가 본래의 목적을 벗어날까 해서 입니다.

- 우선 톰캣에 웹어플리케이션을 만들 줄 알고 간단하게나마 운용할 줄 알아야 합니다.
자바에 대한 공부가 어느정도 되어 있어야 합니다.
  명령행에서 컴파일을 할 줄 알아야하고 간단한 소스는 눈으로 보고 어떻게 돌아가는 건지 파악할 줄 알아야 합니다.
- Struts에 대한 지식이 약간(?) 필요합니다.
- 데이타베이스를 다룰줄 알아야 합니다.
   이 문서에서는 PostgreSql을 사용하는데 다른 RDBM도 상관없지만 데이타베이스를 만들고 테이블도 만들어서 프라이머리키를 지정할 수 있고 기본적인 SQL문을 작성해서 실행할 줄 알아야 합니다.

이 문서를 이해하면 할 수 있는 것

Java + Tomcat(Struts) + PostgreSql의 환경하에서
간단한 웹보고서를 자신의 웹어플리케이션에서 제공할 수 있게됩니다.

이 문서의 소프트웨어 환경

   다음은 이 문서를 작성하면서 설치한 환경입니다.

   실력이 있으신 분은 상관없지만 되도록 똑같은 환경에서 하셔야 에러를 최소한으로 줄이실 수 있을 것입니다.

   자신의 환경을 감안하면서 적용해 보시기 바랍니다.
   운영체제 : MS Windows 2000 Advanced

   JDK5.0 Tomcat 5.5 PostgreSql 8.1.4 설치
   Test용 Tomcat 웹어플리케이션 MyWeb02
   Adobe Reader 설치

   Struts 다운로드 및 설치

   다운로드 URL : http://struts.apache.org/downloads.html
   다운로드 파일명 : struts-1.2.9-bin.zip(13.8MB)

   설치 : 우선 적당한 곳에 압축을 풀어놓습니다.
             압축을 푼 폴더의 밑에 webapps 라는 폴더가 있는데
             그 안의 struts-blank.war를 톰캣밑의 webapps에 복사해 넣습니다.
             그러면 struts-blank 라는 웹어플리케이션이 자동으로 생깁니다.

             * 나중에 이 안의 lib 안의 파일들을 웹어플리케이션에 그대로 복사해 넣을 것입니다.

   JasperReports의 다운로드와 설치

   JasperReports H.P URL : http://jasperforge.org/sf/projects/jasperreports
   다운로드 파일명 : jasperreports-1.2.5.jar(1.33MB)
                              ; (이 파일은 이 문서에서는 사용하지 않음)

   JasperReports 설치 : 특별히 설치할 작업은 없습니다.

          * 이것도 나중에 이 안의 lib 폴더 안의 파일들을 웹어플리케이션에 전부 복사해 넣을 것입니다.

   iReport의 다운로드

   다운로드 URL : http://sourceforge.net/project/showfiles.php?group_id=64348
   다운로드 파일명 : iReport-1.2.5-windows-installer.exe(30.3MB)

   iReport의 설치

   다운로드 받은 iReport-1.2.5-windows-installer.exe 을 더블클릭

   설치시 어려운점은 없습니다. 그냥 Next 버튼을 몇 번 눌러주면 설치 끝.

   설치 위치는 설치시 특별히 바꾸지 않는한 C:/Program Files/JasperSoft/iReport-1.2.5 에 설치 됩니다.

iReport로 템플레이트 파일 만들기

- 우선 설치한 iReport를 실행합니다.

    저의 경우에는 iReport.exe 를 실행하지 않고 iReport.bat 를 실행합니다.
    왠지 이 배치파일로 실행해야 제대로 환경을 끌여들여서 실행하는 것 같습니다.

- iReport 화면이 떳으면 제일 처음에 JDBC 파일을 연결시켜 줍니다.
   여기서는 PostgreSql 8.1.4를 설치했으므로 PostgreSql 8.1.4의 설치폴더 밑에 JDBC 폴더 안에
   JDBC 드라이버가 설치되어 있는 것을 사용합니다.

   메뉴에서 Options->Classpath 를 선택하면 윈도우가 하나 뜨는데
   그 윈도우의 오른쪽에 있는 Add JAR 버튼을 누릅니다.
   C:Program FilesPostgreSQL8.1jdbc 안의 postgresql-8.1-405.jdbc3.jar 를 선택합니다.
   Save classp... 라는 버튼을 눌러 저장하고 나옵니다.

- 다음은 사용할 데이타소스를 정의해 줍니다.
   메뉴에서 Data->Connections / Datasources 를 선택합니다.
   화면 오른쪽의 New 버튼을 선택합니다.
   아래 그림처럼 입력합니다.(각자의 환경에 맞추면 됩니다.)

   이 문서에서는 Username 에는 postgres , Password에는 postgres를 넣었습니다.
   그 옆에 Save password는 체크해 주는 것이 나중을 위해 편합니다.
   Test 버튼을 눌러 제대로 연결이 되는지 확인합니다.
   당연한 얘기겠지만 데이타베이스명, 드라이버명,유저명,패스워드등을 잘 체크합니다.
   연결이 잘 되면 Save버튼으로 저장하고 나옵니다.
- 여기서 데이타베이스의 데이타를 정리하고 갑시다.
  현재 이 문서에서 사용하고 있는 데이타베이스는 PostgreSql이므로 그것을 위주로
  설명을 하겠지만 다른 데이타베이스도 별 문제없이 사용될 것입니다.
  어느 정도 데이타베이스를 다룰줄 알아야 이 밑의 데이타 준비를 할 수 있을 것입니다.
데이타베이스 생성

      WITH OWNER = postgres
           ENCODING = 'EUC_KR'
           TABLESPACE = pg_default;
  : rel 이라는 테이블을 생성합니다.
    이것은 인맥구분에 사용할 테이블입니다.
    다음은 생성 SQL입니다.
      rel_id int2 NOT NULL,
      rel_name text,
      CONSTRAINT "rel_PK" PRIMARY KEY (rel_id)
  : tbl01 이라는 테이블을 생성합니다.
    이것은 인맥정보로서 사용할 테이블입니다.
    다음은 생성 SQL입니다.
    CREATE TABLE tbl01
      uid int4 NOT NULL,
      fname text,
      telno1 text,
      rel_id int2,
      CONSTRAINT "tbl01_PK" PRIMARY KEY (uid)
   다음은 위의 테이블에 넣을 데이타를 SQL문으로 만든 것입니다.

    insert into rel(rel_id, rel_name) values(1,'가족');
    insert into rel(rel_id, rel_name) values(2,'친척');
    insert into rel(rel_id, rel_name) values(3,'친구');
    insert into rel(rel_id, rel_name) values(4,'선배');
    insert into rel(rel_id, rel_name) values(5,'후배');
    insert into tbl01(uid,fname,telno1,rel_id) values(1,'아버지','011-111-1111',1);
    insert into tbl01(uid,fname,telno1,rel_id) values(2,'어머니','022-222-2222',1);
    insert into tbl01(uid,fname,telno1,rel_id) values(3,'큰형','033-333-3333',1);
    insert into tbl01(uid,fname,telno1,rel_id) values(4,'막내','044-444-4444',1);
    insert into tbl01(uid,fname,telno1,rel_id) values(5,'삼촌','055-555-5555',2);
    insert into tbl01(uid,fname,telno1,rel_id) values(6,'매형','066-666-6666',2);
    insert into tbl01(uid,fname,telno1,rel_id) values(7,'덕팔이','077-777-7777',3);
    insert into tbl01(uid,fname,telno1,rel_id) values(8,'용팔이','088-888-8888',3);
    insert into tbl01(uid,fname,telno1,rel_id) values(9,'삼순이','099-999-9999',3);
    insert into tbl01(uid,fname,telno1,rel_id) values(10,'최선배','100-100-1000',4);
    insert into tbl01(uid,fname,telno1,rel_id) values(11,'김선배','200-200-2000',4);
    insert into tbl01(uid,fname,telno1,rel_id) values(12,'이선배','300-300-3000',4);
    insert into tbl01(uid,fname,telno1,rel_id) values(13,'송혜교','123-123-1234',5);
    insert into tbl01(uid,fname,telno1,rel_id) values(14,'오연수','234-234-2345',5);
    insert into tbl01(uid,fname,telno1,rel_id) values(15,'김희선','345-345-3456',5);
    이 SQL을 실행시켜 기본 데이타를 준비하십시오.
    (각자, 준비해도 됩니다.)
- 데이타까지 준비가 됐으니 보고서를 만들 SQL을 만듭니다.
   SELECT b.rel_name, a.fname, a.telno1
   FROM tbl01 a LEFT JOIN rel b ON a.rel_id = b.rel_id
   ORDER BY b.rel_name
- 이제 보고서를 만들 준비가 끝났습니다.
   보고서를 만듭시다.(자신의 화면과 이 문서를 맞추어서 보시길...)
   우선 iReport의 기능중에 Report Wizard 라는 편리한 기능이 있는데
   이것을 이용하면 간단한 보고서 양식은 금방 만들 수 있습니다.
- 메뉴에서 File->Report Wizard 선택
- Step 1 : insert the query to retrieve report fields
   Connection / Datasource 에 위에서 만든 데이타소스명을 선택합니다.
   여기서는 MyDB01 밑에 SQL Query에 위에서 준비한 SQL 문장을 넣습니다.
   SELECT b.rel_name, a.fname, a.telno1
   FROM tbl01 a LEFT JOIN rel b ON a.rel_id = b.rel_id
   ORDER BY b.rel_name

- Next 버튼을 누르면 "SmartCard PIN"이라는 윈도우가 나와서 Password를
  넣으라고 나오는 사람은 데이타베이스 접속 패스워드를 넣어주면 됩니다.
  위에서 데이타소스 정의시 Save password에 체크를 해 둔 사람은 이 윈도우는 나타나지 않습니다.
- Step 2 : select fields 화면에서 모든 컬럼명을 오른쪽으로 선택해서 넣습니다.
  모든 컬럼을 선택하는 것은 단순히 ">>" 버튼을 누르면 됩니다.
  Next 버튼 클릭
- Step 3 : Group by 윈도우는 그냥 두고 Next 버튼 클릭
- Step 4 : choose layout
   Tabular layout을 선택
   classicT.xml 선택
   Next 버튼 선택
- Step 5 : finish
   Finish 버튼 클릭
여기까지 왔으면 보고서 하나가 거의 완성이 되었습니다.
우선 저장을 합니다.
이 문서의 경우에는 D:/TEST/report01.jrxml라는 이름으로 저장했습니다.
다음은, 컴파일
  메뉴->Build->Compile 를 선택하면 컴파일 됩니다.
  메뉴바에 이쁘장한 아이콘들도 준비되어 있는데 컴파일 아이콘을 찾아서 해도 됩니다.
다음은 출력될 보고서를 미리 봅니다.
  메뉴->Build->JRViewer preview 선택
  메뉴->Build->Execut(with active connection)을 선택
  잘 보여야 합니다.
다음은 PDF 형식으로 보죠.
  메뉴->Build->PDF preview 선택
  메뉴->Build->Execut(with active connection)을 선택
  잘 안보일겁니다.
  미리 설명하려다가 위에서 잊어먹었습니다.
  PDF로 보려면 iReport에 PDF는 뭘로 보겠다고 정해줘야 합니다.
  이 문서에서는 Adobe Reader로 PDF를 볼 것입니다.
  그래서 문두의 테스트 환경에 Adobe Reader 설치라고 친절히(?) 적어 놓았던 거죠.
  메뉴->Options->Settings 선택
  External programs 탭 선택
  PDF Viewer에 Adobe Viewer 프로그램 선택
  (이 문서에서는 C:/Program Files/AdobeAcrobat 7.0/Reader/AcroRd32.exe )
  Save 버튼을 선택해서 저장하고 나옵니다.
다시 위의 PDF 로 보는 걸 해보죠.
  이번엔 보입니다.
  한글 항목이 나타나질 않습니다.
  그럼 제대로 보이는겁니다.
이제부터 한글이 제대로 보이도록 하는 작업을 합니다.
    파일을 다운받는데 iTextAsian.jar 라는 파일을 받습니다.
    자세히는 모르겠는데 iText.jar와 연계해서 2바이트 코드를 PDF생성시
    가능하게 해 주는 것 같습니다.
    다운받은 iTextAsian.jar 를 iReport의 lib 폴더에 넣어줍니다.
    이 문서에서는 C:/Program Files/JasperSoft/iReport-1.2.5/lib 에 복사했습니다.
    iReport를 다시 실행시킵니다.
   좀 전에 만든 D:/TEST/report01.jrxml을 불러들입니다.
   그리고 한글이 보일 항목을 지정하고 옆에 Element Properties 창에서
   PDF Font에 HYGoThic-Medium 를 PDF Encoding에 UniKS-UCS2-H (Korean)를 지정하고
   다시 PDF Preview를 해봅니다.
   한글이 잘 보여야 합니다.
   잘 보이면 보고서를 좀 더 다듬죠.
   영어로된 항목명을 적당히 한글로 고쳐주고 이 때도 폰트를 맞춰줘야 합니다.
   (위에 설명한 폰트말고 몇 개가 더 되는게 있는데 그건 각자 찾아 보십시오.)
   이 문서에서는 이렇게 다듬었습니다.
참고로 위의 폰트 설정은 나중에 웹보고서 출력시 PDF로 출력할 때 한글을 보여주려고 하기 때문입니다.
위와 같이 설정하고 실행하는 웹어플리케이션에서 PDF로 볼 때 iTextAsian.jar를 찾지 못하면 에러가 납니다.
하지만 애플릿뷰어로 보여줄 때는 맞춰 줄 필요 없습니다.
이제 iReport로 작업하는 것은 이것으로 끝냅니다.
iReport의 디자인 방법이나 다른 기능들은 이 문서에서 설명하지 않습니다.
이 문서의 목적은 웹보고서를 어떻게 구현하는가에 초점을 맞추고 있기 때문입니다.
지금까지 한 것은 자동완성기능인 Report Wizard 를 이용한 것입니다.
수동으로 만드는 것도 각자 연습해 보시기 바랍니다.
아마 다른 비쥬얼툴을 사용해 보신 분이라면 어려움 없이 하실 수 있을 겁니다.
첨부파일을 이용하기
다음은 이 보고서를 웹을 통해 보여주어야 하기 때문에 웹어플리케이션을 하나 만듭니다.
아래의 첨부파일을 풀어서 톰캣이 웹어플리케이션으로서 인식하도록 합니다.

웹어플리케이션을 만드는 부분은 설명하지 않습니다.
이제부터 첨부파일의 구조대로 설명합니다.
이 문서에서는 톰캣을 이용하여 MyWeb02라는 웹어플리케이션을 생성했고 그 구조는 다음과 같습니다.

이 예제 웹어플리케이션을 실행하기 위해서는 준비과정이 필요합니다.
예제 소스에는 모든 라이브러리 파일은 담지 않았습니다.
파일크기도 커지고 각자 해 보는 것이 좋기 때문입니다.

예제에 필요한 파일 복사해 넣기

 /MyWeb02/WEB-INF/lib 에는 첨부파일에도 아무것도 들어있지 않는데
이 폴더에 아래의 파일들을 복사해 넣으십시오.

   - JasperReports를 압축해제한 폴더의 밑의 lib 안의 모든 JAR 파일
   - jasperreports-1.2.5.jar
   - jasperreports-1.2.5-applet.jar
   - iTextAsian.jar
   - postgresql-8.1-407.jdbc3.jar
   - /struts-blank 웹어플리케이션의 lib 안의 모든 파일

참고로 아래는 이 문서 작성시 /MyWeb02/WEB-INF/lib 에 들어있던 파일리스트입니다.

예제 프로그램을 실행시키기 위해서 이 파일들이 모두 필요하진 않습니다.
좀 더 가볍게 실행시키시고 싶은 분은 필요없는 것은 지우셔도 상관없습니다.
제 경우에는 잘 모르기 때문에 하나씩 지우면서 웹 어플리케이션이 실행되나 안되나
시험하면서 정리를 했었는데 나중에 귀찮아서 그냥 전부 넣고 돌립니다.


그리고 /MyWeb02/reports 에 위에서 iReport로 만든 파일을 넣어주는데
이 문서의 경우 보고서명(파일명)이 report01이었습니다.

그리고 report01.jrxml 파일은 잘 아는 곳에 저장을 해 두었습니다.

이 문서의 경우는 D:/TEST 였습니다.

그 report01.jrxml 과 iReport의 설치폴더 안에 보면 report01.jasper 파일이 있습니다.
위의 2개의 파일을 /MyWeb02/reports 에 넣어줍니다.

즉, report01.jrxml , report01.jasper 를 /MyWeb02/reports에 넣어줍니다.

다음, /MyWeb02/jsp 안에 java 파일이 2개 있습니다.
이 자바파일들을 컴파일해야 합니다.
이것도 컴파일한 클래스 파일을 넣을까 하다가 소스만 넣어 두었습니다.

명령행에서 컴파일 방법
   - 우선 클래스패스에 같은 폴더에 들어있는 jasperreports-1.2.5.jar 를 더해 줍니다.
   >set classpath=%classpath%;D:/tomcat_webapps/MyWeb02/jsp/jasperreports-1.2.5.jar[엔터]
   -> 이 때 클래스패스에
       가 잡혀있는 경우에는 위와 같이 해주면 되지만
       이 문서에서의 환경에서는 환경변수에 CLASSPATH가 없었습니다.
       그래서 위의 명령행에서 위의 폴더까지 들어가서
       아래와 같이 클래스패스를 잡아주었습니다.
       >set classpath=.;jasperreports-1.2.5.jar[엔터]

   - 컴파일
   >javac JRViewerSimple.java[엔터]
   >javac EmbeddedViewerApplet.java[엔터]

다음은 서블릿 파일을 컴파일합니다.
이 파일은 /MyWeb02/WEB-INF/src/reports 안에
라는 이름으로 들어 있습니다.

Eclipse 를 사용하시는 분이라면 쉽게 컴파일까지 하실 수 있을겁니다.
여기서는 Eclipse가 없을 때 명령행에서 컴파일하는 방법을 설명합니다.

우선 명령행으로 나가서 /MyWeb02/WEB-INF/src/reports 까지 들어갑니다.
그 다음 여기서도 필요한 클래스를 패스로 잡아주고 컴파일하겠습니다.
다음 명령을 넣어줍니다.

>set classpath=.;C:/Tomcat55/common/lib/servlet-api.jar;../../lib/jasperreports-1.2.5.jar;../../lib/commons-beanutils.jar;../../lib/commons-digester.jar;../../lib/postgresql-8.1-407.jdbc3.jar;../../lib/struts.jar

이 명령에 대한 설명은 생략합니다.
명령행에서 컴파일하는 법은 우선 다른 웹사이트를 참조하시기 바랍니다.
이 문서와 똑같이 진행시켜 왔다면 컴파일이 될 것입니다.

다음은 컴파일
>javac -d ../../classes ReportServlet.java[엔터]
>javac -d ../../classes JasperPrintServlet.class[엔터]

/MyWeb02/WEB-INF/classes/reports 안을 확인해 보면 클래스 파일들이 생성되어 있을 겁니다.

이제 웹어플리케이션 MyWeb02를 재로드하거나 톰캣을 재기동한 후 브라우저로 열어봅니다.




Applet View

PDF View
이런 화면이 나타납니다.
Applet View 를 선택하면
Report name : report01 report02
cond1 : ___________
cond2 : ___________

이런 화면이 나타납니다.
test 버튼을 누르면 iReport에서 JRViewer preview 로 본 화면이 나타날 것입니다.
여기서 서버와 클라이언트 이렇게 두 대로 이 문서를 따라 하시는 분이 계신다면
클라이언트에서 서버에 접속해서 위의 페이지를 열었을 때 해당 클라이언트에 JRE가 설치되어 있지 않거나 JRE5.0 Update8 이하의 버전이 설치되어 있다면 아래의 화면이 나타날 것입니다.

예 버튼을 클릭하면 JRE를 설치하는 화면이 나옵니다.
동의함 버튼을 선택합니다. 설치가 진행됩니다.
설치가 끝나면 자동으로 혹은 지멋대로 C:/Program Files/Java/jre1.5.0_08 에 JRE가 설치되어 있습니다.
이 경로는 어디서 컨트롤 하는건지 알 수 가 없었습니다.
하여간 설치가 된 후 애플릿 화면이 나오길 기대하시겠지만 현재는 에러가 납니다.
그것은 소스 안을 살펴보시면 알게되는데 http://localhost:8080/MyWeb02~~~ 라고 정의 되어 있기 때문입니다.
이 부분도 여러분의 환경에 맞게 서버명을 고쳐서 해 보시기 바랍니다.
그리고 밑에서 설명하는 policy 설정 툴은
C:/Program Files/Java/jre1.5.0_08/bin 안에 들어있습니다.

여하튼 현재 서버도 클라이언트도 같은 머신이라는 가정하에
계속 갑시다.
서버와 클라이언트가 같은 머신이라면 이상없이 애플릿 화면이 나타날텐데 그 화면에서 프린터 아이콘을 눌러 인쇄를 하려 하면 현재로는 에러 화면이 나타날 것입니다.
이 에러를 잡느라 이틀동안 인터넷을 얼마나 많이 헤멧는지 모릅니다.
원인은 애플릿의 클라이언트 권한 문제였는데 다음과 같이 해서 우선 문제를 해결하시고 클라이언트에게 권한파일을 배포하시는 건 알아서 하시길 바랍니다.
(너무 무책임한 것 같지만 저도 잘 모르겠다는...)
하여간 다음을 보시고 판단하시길 바랍니다.
클라이언트의 명령 프롬프트로 나가서 아래 명령을 실행합니다.
다음과 같은 메세지가 나타납니다.
확인을 누른 다음 나타난 화면에서 정책항목추가 버튼을 선택합니다.
다음 화면에서 사용권한추가 버튼을 선택합니다.
사용권한 드롭다운리스트박스에서 AllPermission 을 선택합니다.
화면은 이렇게 됩니다.
다음은 확인을 선택합니다. 완료를 선택합니다.
파일->저장을 눌러 이 문서에서는 C:/Documents and Settings/Administrator 에 .java.policy 라는 파일명으로 저장합니다.
파일명 앞에 쩜(.)이 있는 것에 주의하시기 바랍니다.
노파심 : Windows2000이나 XP 사용하시는 분은 로그인한 유저의 루트 디렉토리에 만들어 줍니다.
             서버가 아닙니다. 이 웹어플리케이션에 접근하는 클라이언트 입니다.
이렇게 설정이 끝났으면 좀 전의 웹어플리케이션을 처음부터 다시 실행해서 애플릿의 프린터 아이콘으로 인쇄를 해 보시기 바랍니다.
프린터 선택화면이 나오면 성공적으로 퍼미션 문제가 해결된 것입니다.
위에서 정의한 AllPermission은 좋은 설정이 아닐지 모르니 실제 적용에는 주의하시기 바랍니다.
다음은 PDF 도 실행해 보십시오.
아마, 잘 될 것입니다.
이 문서의 환경과 같고 제가 올린 소스를 그대로 적용하신 분이라면 별문제없이 잘 실행될 것입니다.
이 문서를 작성하느라 제 운영체제를 세번이나 새로 설치해서 이 문서를 보며 재검증까지 마쳤으니까요.
( 그런대도 설명이 이모양이냐? 하시면 저도 어쩔수가 없다는.... )
이제 iReport를 이용한 웹보고서 출력 기능 설명은 끝났습니다.
예제의 폼에 있는 cond1과 cond2 는 다른 보고서를 만들 때 SQL에 파라메터를 넘길 경우를
테스트하기 위해 만들어 둔 것입니다.
이 부분은 위의 나는나님의 매뉴얼을 보면서 공부를 해 보시기 바랍니다.
센스가 있으신 분들은 금방 하실 수 있으리라 믿습니다.
그리고 소스의 안에도 위의 두 개의 파라메터를 처리하는 부분이 같이 들어있습니다.
여러분의 몫으로 남겨 둡니다.

출처 : http://tong.nate.com/boxitem

Trackback 0 Comment 0