쓸만한 웹디버깅툴 Firebug

Tips 2007.05.30 09:18 Posted by 애플자라
javascript로 linkedlist 구현하다 꽤나 쓸만한 기능을 발견해서 바로 블로그에 메모할 생각을 하게되었다 -_-

firefox 전용 플러그인이다..

받는방법은 firefox 상단 도구(T) -> 부가기능 - > 유용한 확장기능 찾기 링크를 통해
firefox add-on 사이트로 들어간다.

검색창에 firebug을 치면 손쉽게 설치가 가능하다.

활성 / 비활성은 F12번 단축키나 상단메뉴 - 도구(T) - > firebug - > enable firebug로 활성화 시킬수 있다.

브라우저 하단 좌측에 체크표시가 나오는데 그것을 클릭하면
DOM / script / HTML / traffic / 등등 자세한 정보를 알수 있다.

특히 javascript debugging 할때는 아주 최강이다 -_-

내가 자주쓰는부분중 하나를 소개한다.

사용자 삽입 이미지
사진을 보면 우측에 붉은줄이 그어진부분을 확인할수 있다..
여기에서 javascript의 해당변수를 입력하면 스크립트 구동중에 변수의 값을 실시간으로 확인가능하다.
물론 다른언어의 디버깅툴처럼 breakpoints를 설정할수도 있다..

Container Version Servlet/JSP Spec Version

Programing 2007.03.05 00:39 Posted by 애플자라

Container

Version

Servlet/JSP Spec Version

Apache Tomcat

6.x

2.5 / 2.1

5.x

2.4 / 2.0

4.x

2.3 / 1.2

3.3

2.2 / 1.1

BEA WebLogic Server

9.x

2.4 / 2.0

6.x ~ 8.x

2.3 / 1.2

5.x

2.2 / 1.1

JEUS

5.x

2.4 / 2.0

4.x

2.3 / 1.2

IBM WebSphere App Server

6.x

2.4 / 2.0

5.x

2.3 / 1.2

4.x

2.2 / 1.1

Oracle Application Server

10g R3 (10.1.3.1)

2.4 / 2.0

10g (9.0.4)

2.3 / 1.2

요즘은 대세가 UTF-8입니다..

물론 특정문자열을 표시하지못합니다만..

그래도 다국어 지원이라는 매력점이 있는관계로.. ^^;

Java/JSP 개발환경에서 설정해주어야 할 몇가지를 설명합니다.

먼저 Eclipse IDE 개발환경입니다.

1. Eclipse 환경설정

먼저 이클립스의 Windows -> Preferences -> General -> Editors 로 이동하여
Text file encoding 을 UTF-8 로 맞춰 줍니다.



Content Type -> Java Source File 과 Javascript 파일의 인코딩을 UTF-8 로 Update 합니다.



2. Tomcat 환경일 경우
서블릿 필터를 이용하여 처리하여야합니다.

첨부파일을 참조하세요 .

web.xml 에 추가해야할 소스
<filter>
  <filter-name>Character Encoding Filter</filter-name>
  <filter-class>com.nethru.filter.SetCharacterEncodingFilter</filter-class>
  <init-param>
  <param-name>encoding</param-name>
  <param-value>UTF-8</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>Set Character Encoding</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>


스프링 프레임워크를 이용할경우 이미 필터도 제공합니다..
web.xml에 아래와 같은부분만 추가하면 끝 .
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>euc-kr</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>

[ORACLE] Oracle SQL Developer 리포트의 활용 

Database 2007.02.13 00:33 Posted by 애플자라

오라클이 무료로 제공하는 데이터베이스 개발 툴의 리포팅 기능을 활용하는 방법을 소개합니다.

게시일: 2006년 6월

Oracle SQL Developer(구 제품명 Project Raptor)는 오라클이 개발자와 DBA를 위해 제공하는 새로운 멀티플랫폼 그래픽 사용자 인터페이스입니다. Oracle Database 10g Express Edition (XE), Oracle JDeveloper와 마찬가지로 Oracle SQL Developer는 무료로 다운로드할 수 있습니다. Oracle SQL Developer는 Windows, Macintosh, Linux 플랫폼을 지원합니다.


Oracle SQL Developer는 데이터베이스 오브젝트 조작을 위한 그래픽 대화상자, SQL 워크시트, PL/SQL 편집기, 리포팅 등 개발자를 위한 강력한 기능을 제공합니다. Oracle SQL Developer는 Oracle JDeveloper, Java IDE를 기반으로 하고 있으며 직관적인 트리 기반 내비게이션 구조를 구현하고 있습니다.


리포트는 두 가지 방법으로 생성될 수 있습니다. 사전 정의된 표준 데이터 딕셔너리 리포트를 선택하거나 사용자 정의 리포트를 생성하는 것이 가능합니다. Oracle SQL Developer 리포트는 바인드 변수와 드릴다운 리포팅을 지원합니다.

본 문서에서는 데이터베이스의 설치, 구성, 연결 생성에 관련한 내용을 다루고 있지 않습니다. 이 주제에 대해 상세한 정보가 필요한 경우, OTN의 Oracle SQL Developer 홈 페이지 를 참고하십시오.

리포트를 생성하기 위해 먼저 Oracle SQL Developer를 실행합니다. 데이터베이스에 연결하고, Reports 탭을 클릭합니다. Reports 심볼 옆에 있는 플러스 기호( + )를 클릭하고 다시 Data Dictionary Reports 옆의 플러스 기호를 클릭합니다. 지금은 User Defined Reports 아이템을 무시하고 진행합니다.


트리-뷰 내비게이션은 폴더/파일의 개념으로 동작합니다. 예를 들어 Data Dictionary Reports 디렉토리는 Reports 폴더의 서브폴더이며 내비게이션 관점에서는 Reports->Data Dictionary Reports로 표시됩니다.

Data Dictionary 폴더의 서브폴더 중 하나의 플러스 기호를 클릭합니다.

Figure 1

오라클 기본 제공 리포트

(참고: 실행할 리포트를 선택한 경우 Select Connection 대화상자가 표시될 수 있습니다. 연결을 선택한 후 OK를 클릭합니다.)

Figure 2

Data Dictionary Reports 폴더는 오라클이 기본적으로 제공하는 사전정의 리포트의 목록을 저장하고 있습니다. 표준 리포트 중 하나를 선택해 보기로 합시다. 필자가 업무에 유용하게 사용하는 리포트의 목록이 아래와 같습니다. 목록에서 여러분에게 유용한 리포트가 있는지 확인해 보시기 바랍니다.

All Parameters 리포트(Reports->Data Dictionary Reports->Database Administration->Database Parameters->All Parameters)는 모든 데이터베이스 초기화 매개변수의 목록을 표시합니다.


리포트를 클릭하면 자동으로 실행됩니다. 일부 리포트의 경우 Enter Bind Values 대화상자를 통해 매개변수를 입력해 주어야 할 수 있습니다. 바인드 변수에 대해서는 나중에 설명하겠습니다. 리포트를 실행하려면 Apply를 선택합니다.


Figure 3

Figure 4

“Free Space report—Reports->Data Dictionary Reports->Database Administration->Storage->Free Space”를 선택하여 각 테이블스페이스의 여유 공간을 확인할 수 있습니다.

Figure 5

액티브 세션 리포트(Reports->Data Dictionary Reports->Database Administration->Sessions->Active Sessions)는 데이터베이스의 모든 액티브 세션을 표시합니다. 이 리포트를 사용하여 누가 로그인 했는지, 그리고 각 세션의 상세 정보를 확인할 수 있습니다.


Top SQL 노드(Reports->Data Dictionary Reports->Database Administration->Top SQL->*)에 위치한 리포트들은 어느 것 하나 빼놓을 것 없이 유용합니다. 필자는 이 리포트를 이용하여 시스템의 전반적인 상태를 확인하고, CPU 또는 IO를 기준으로 Top SQL 리스트를 조회하곤 합니다.


User Tables 리포트(Reports->Data Dictionary Reports->Table->User Tables)는 정확한 테이블명 또는 컬럼명을 기억하지 못한 경우에 유용합니다.


Quality Assurance 리포트(Reports->Data Dictionary Reports->Table->Quality Assurance->*)는 개발 과정에서 활용도가 높습니다. 필자는 DDL 구문을 직접 작성하는 과정에서 인덱스 또는 키를 빠뜨리는 실수를 방지하기 위해 이 리포트를 사용합니다.


PL/SQL 검색 리포트(Reports->Data Dictionary Reports->PL/SQL Search Source Code)는 시간 절약에 많은 도움이 됩니다. 오브젝트 이름 또는 소스 텍스트 문자열을 기준으로 검색을 수행할 수 있습니다.


이제 이 리포트에서 사용되는 SQL 코드를 살펴보기로 합시다. 앞에서 설명한 방법으로 리포트를 실행합니다. Reports 창의 리포트 데이터 상단에 세 개의 버튼(붉은색 핀, 초록색 삼각형, 사각형에 둘러싸인 SQL 텍스트)이 있습니다. 세 번째 SQL 버튼은 리포트에서 SQL을 복사하여 SQL 워크시트에 붙여 넣는데 사용됩니다. SQL 버튼을 클릭합니다.


Figure 6

결과로 표시된 SQL 구문에서 몇 가지 팁을 얻을 수 있습니다. 여기서 얻은 팁을 사용자 정의 리포트를 생성하는데 활용하시기 바랍니다.

드릴다운 리포트

Oracle SQL Developer 리포트의 중요한 기능의 하나로 드릴다운(drill-down)을 꼽을 수 있습니다. 이것은 필자가 Oracle SQL Developer에서 가장 선호하는 기능이기도 합니다. 사용자 정의 드릴다운 리포트를 직접 작성하는 방법은 뒷부분에서 설명하기로 합니다.


Reports->Data Dictionary Reports->Table->User Tables 리포트를 실행하여 스키마 내의 모든 테이블 목록을 표시합니다. 리포트 실행이 완료된 후 리포트 결과 화면의 로우 중 하나를 더블클릭 합니다.
해당 테이블에 대한 상세 정보를 포함하는 새로운 탭이 표시됩니다. 여기세 테이블의 컬럼 정의를 확인하실 수 있습니다. 데이터 창에는 두 개의 탭(방금 실행한 리포트를 위한 탭과 드릴다운 오브젝트를 위한 탭)이 존재합니다. 다른 리포트를 실행하고 임의의 로우를 더블클릭 합니다.


드릴다운 기능은 Navigator(Connections 탭 하위) 노드 밑에 존재하는 모든 노드에 대해 동작합니다. All Parameters 리포트를 더블클릭 하면 (Connections 하단에 Parameter 노드가 존재하지 않으므로) 아무런 결과도 표시되지 않을 것입니다.


드릴다운 기능이 Navigator 노드 하위 아이템에 대해서만 동작하기 때문에, 사용자 정의 리포트에서 드릴다운 기능을 활용하는데 다소간의 제약이 있을 수 있습니다. Oracle SQL Developer가 모든 노드에 대해 드릴다운 기능을 제공할 수 있게 된다면, 매우 유용한 기능으로 활용할 수 것입니다.


하지만 현재로서 드릴다운 기능은 딕셔너리 리포트에서 주로 활용됩니다. 작성 중인 리포트에 드릴다운을 추가하려면, 쿼리에 아래와 같이 3 개의 컬럼만 추가해 주면 됩니다.


Figure 7

위 그림에서 OBJECT_OWNER는 sdev_link_owner, OBJECT_NAME은 sdev_link_name, OBJECT TYPE은 sdev_link_type으로 정의되었습니다.


위와 동일한 앨리어스(alias)를 사용하여 3 개의 아이템을 추가하면, Oracle SQL Developer는 더블클릭 시 자동으로 드릴다운을 실행합니다. 다시 강조하지만 현재 버전에서 드릴다운 기능은 Navigator 창의 노드에 대해서만 지원됩니다.

간단한 사용자 리포트

참고: 필자가 사용하는 코드 예제는 모두 Oracle Database XE 환경의 SYSTEM, HR 스키마를 이용하고 있습니다. Oracle Database XE 데이터베이스 환경의 사용자라면 필자의 예제를 쉽게 따라 할 수 있을 것입니다. Oracle Database XE 데이터베이스가 설치되어 있지 않은 경우라면, 환경에 따라 다른 테이블을 사용해야 할 수도 있습니다. Oracle Database XE는 OTN에서 무료로 다운로드할 수 있습니다.


이제 간단한 리포트를 생성해 보기로 합시다. HR@XE로 로그인합니다. 내비게이터의 마지막 노드(User Defined Reports)를 클릭합니다. 확장된 노드를 마우스 오른쪽 버튼으로 클릭하면 여러 가지 옵션(Add Folder, Add Report, Delete, Copy, Cut, Paste)을 포함하는 컨텍스트 메뉴가 표시됩니다.


Oracle SQL Developer는 내비게이션을 위한 트리 구조를 제공합니다. 사용자정의 리포트 역시 동일한 구조를 이용하여 논리적으로 그룹핑하는 것이 권장됩니다. 아래 그림처럼 애플리케이션 단위로 그룹을 생성하는 것도 가능합니다. 또는 애플리케이션 이름이 아닌 다른 분류 기준을 정할 수도 있겠지만, User Defined Reports 노드 아래에 모든 리포트를 몰아넣는 것만큼은 피하는 것이 좋습니다.


Add Folder를 선택하여 새로운 폴더를 생성합니다. 이 폴더의 이름을 Employee Reports로 설정하기로 합시다. Description에는 설명으로 참조할 만한 문구를 입력합니다. ToolTip 텍스트는 내비게이터의 해당 아이템 위로 마우스를 가져가는 경우 표시됩니다. Apply를 클릭하여 저장합니다.


Figure 8

Employee Reports를 마우스 오른쪽 버튼으로 클릭합니다. 컨텍스트 메뉴에 Edit이 추가된 것을 볼 수 있습니다. Edit을 선택하고 편집 작업을 수행한 후 Apply를 클릭하여 저장합니다.


다시 마우스 오른쪽 버튼을 클릭하고 Add Report를 선택합니다. 리포트 이름은 “Number of Employees by Department”로 설정합니다. Description, ToolTip에는 임의의 텍스트를 입력합니다. SQL 박스에 아래 쿼리를 입력합니다:


Select department_id, count(*)
From Employees
Group By department_id


Figure 9

Apply를 클릭하여 저장합니다.

Employee Reports 노드 옆의 플러스 기호를 클릭하고 새로 생성한 리포트를 클릭합니다. 이때 Select Connection 대화상자가 표시될 수 있습니다. 대화상자에서 HR 연결을 선택하고 OK를 클릭합니다.

이제 첫 번째 사용자 정의 리포트를 성공적으로 생성하였습니다. 이 보고서에서 department ID 대신 department name을 표시하도록 다듬는다면 좀더 유용하게 활용할 수 있을 것입니다. 리포트를 마우스 오른쪽 버튼으로 클릭하고 표시된 컨텍스트 메뉴(Open, Open New Window, Edit, Show Properties)에서 Edit을 선택합니다.


department name이 표시되도록 쿼리를 변경합니다:

Select d.department_name, count(*)
  From Employees e
  Join Departments d On (e.department_id = d.department_id)
  Group By d.department_name
  

Apply를 클릭하여 저장하고 리포트를 재실행합니다.


리포트를 조금 더 다듬어 봅시다. 리포트를 마우스 오른쪽 버튼으로 클릭하고 Copy를 선택합니다. 다시 마우스 오른쪽 버튼을 클릭하면 Paste가 옵션으로 표시되지 않음을 확인할 수 있습니다. Employee Repots를 마우스 오른쪽 버튼으로 클릭합니다. 이제는 리포트를 붙여넣기 할 수 있습니다. 새로운 리포트(뒷부분의 괄호에 숫자가 표시된 리포트)를 마우스 오른쪽 버튼으로 클릭하고 Edit를 선택합니다. 쿼리를 아래와 같이 변경합니다:


Select e.Last_Name, e.First_name, d.department_name, 
       count(*) over (partition by d.department_name) dept_count, 
       count(*) over ()
  From Employees e
  Join Departments d On (e.department_id = d.department_id)
  

Figure 10

리포트를 실행합니다. 이제 정말로 유용한 리포트가 만들어졌습니다. 직원의 이름, 부서명, 부서의 직원 수, 전체 부서의 직원 수 등이 표시된 리포트가 생성되었습니다.


리포트의 유용성을 극대화하기 위해서는 다이내믹 리포트 생성이 지원되어야 합니다. 바인드 변수를 사용하면 실행 시점에 리포트 쿼리를 다이내믹하게 변경하는 것이 가능합니다. Oracle SQL Developer 1.0 이전 버전은 바인드 변수를 이용한 사용자 정의 리포트 기능을 직접적으로 지원하지 않았지만, SQL Developer User Information Directory에 위치한 UserReports.xml 파일을 수정하여 바인드 변수를 추가할 수는 있었습니다. 버전 1.0은 훨씬 단순화된 바인드 변수 지원 기능을 제공합니다.


이제 리포트에 마지막 변경 사항을 추가해 봅시다. 바인드 변수를 이용하여 사용자가 부서명(전체 또는 일부분)을 입력하거나 null 상태로 쿼리를 실행하여 전체 부서에 대한 리포트를 생성하는 기능을 구현해 보겠습니다. SQL 구문을 아래와 같이 수정합니다:

Select e.Last_Name, e.First_name, d.department_name, 
       count(*) over (partition by d.department_name) dept_count, 
       count(*) over ()
  From Employees e
  Join Departments d On (e.department_id = d.department_id)
  Where (:dept_name is null
         or d.department_name = :dept_name)
  

Figure 11

리포트를 실행하면 바인드 변수 입력 화면이 표시됩니다. 임의의 값을 입력해 봅니다.

복잡한 형태의 리포트

User Defined Reports 노드에 새로운 폴더를 생성합니다. 이 폴더에는 여러분이 직접 생성한 Data Dictionary 리포트를 저장하게 됩니다. 폴더의 이름은 “User Data Dictionary”로 설정합니다

Figure 12

이제 Recycle Bin에 있는 모든 오브젝트의 목록과, 이 오브젝트들에 의해 사용되는 디스크 공간을 표시하는 리포트를 생성해 보겠습니다. 이 리포트는 4GB의 디스크 공간 제한을 갖는 Oracle Database XE 환경에서 특히 유용하게 활용됩니다.


이 리포트를 실행하기 위해서는 SYS.DBA_OBJECTS, SYS.DBA_SEGMENTS, SYS.DBA_RECYCLEBIN 데이터베이스 오브젝트에 대한 액세스 권한을 가지고 있어야 합니다. 필자는 SYSDBA 계정을 이용하여 이 리포트를 실행합니다.


새로운 사용자 정의 리포트를 생성하고 이름을 Recycled Objects로 설정합니다. Description, ToolTip에는 임의의 정보를 입력합니다. 쿼리를 아래와 같이 편집합니다:


select ao.owner,
      ao.object_type,
      ar.original_name,
      ao.object_name recycled_name,
      ar.droptime,
      ds.bytes/1024/1024 "Megabytes",
      ao.owner        sdev_link_owner,
      ao.object_name  sdev_link_name,
      ao.object_type     sdev_link_type
from sys.dba_objects ao,
     sys.dba_segments ds,
     sys.dba_recyclebin ar
where ao.object_name like 'BIN$%'
  and ao.owner = ds.owner
  and ao.object_name = ds.segment_name
  and ar.object_name = ao.object_name
  and ((ao.subobject_name is null AND ds.partition_name IS NULL)
       or ao.subobject_name = ds.partition_name)
  and ((:original_name is null or 
        ar.original_name = :original_name)
      AND (:object_type is null or
          ao.object_type = :object_type))
  

이 리포트는 SDEV_LINK_OWNER, SDEV_LINK_NAME, SDEV_LINK_TYPE 앨리어스를 포함하고 있으며, 따라서 참조된 아이템에 대한 드릴다운이 가능합니다. 이 리포트에서는 RECYCLEBIN의 각 아이템에 대한 상세 정보를 얻기 위해 드릴다운 기능이 사용됩니다. SDEV_LINK_NAME을 ao.object_name에서 ar.original_name으로 변경한 경우, (기존 아이템이 존재하는 경우) 기존 아이템에 대한 드릴다운이 가능합니다. 또 모드 변환이 가능하도록 리포트를 수정할 수도 있습니다.

SDEV_LINK_NAME 라인을 아래와 같은 상태에서,

ao.object_name sdev_link_name,

아래와 같이 변경합니다.

decode( :original_or_recycle, 1, ar.original_name, ao.object_name) sdev_link_name,

이제 리포트를 실행한 뒤 모드 변경을 수행하지 않으면 Recycled Object에 대한 드릴다운을 결과를 얻게 되고, original_or_recycle 변수를 1로 변경하면 (기존 오브젝트가 존재하는 경우) 기존 오브젝트에 대한 드릴다운을 수행할 수 있습니다.

이 기능을 이용하면 Oracle SQL Developer에서 매우 유용한 드릴다운 리포트를 생성할 수 있습니다. 커스텀 쿼리에 대한 드릴다운 기능까지 추가된다면 그 활용도는 실로 무한할 것입니다! OTN Oracle SQL Developer 포럼(http://forums.oracle.com/forums/forum.jspa?forumID=260 ) 에 방문하셔서 커스텀 쿼리 드릴다운의 필요성을 오라클에 전달해 주시기 바랍니다!

original_or_recycle 변수를 변경하는 것 이외에도, 오브젝트 타입, 기존 오브젝트 네임 등을 기준으로 반환되는 값을 제한할 수 있습니다. 이 쿼리의 마지막 4개 라인은 바인드 변수를 생성하는데 사용됩니다. 바인드 변수는 위에서 자세히 설명되었으므로, 여기서 다시 설명하지는 않도록 하겠습니다.


또 엔드 유저가 확인하는 바인드 변수 대화상자에 설명을 추가할 수 있다면 도움이 될 것입니다. 특히 original_or_recycle 변수를 다른 사용자들이 사용하기 위해서는 충분한 설명이 필요할 것입니다.


앞에서 Oracle SQL Developer 1.0 이전 버전에서 UserReports.xml 파일을 편집하여 바인드 변수를 추가할 수 있다고 설명한 바 있습니다. 같은 방법을 이용하여 1.0 버전에서 바인드 변수 기능을 확장할 수 있습니다. 설명을 위한 텍스트를 추가하거나, 프롬프트를 변경하건, 디폴트 값을 할당하는 작업 등이 가능합니다. 설명을 위한 텍스트를 추가하는 방법이 아래와 같습니다:


내비게이션 대상이 되는 OS 디렉토리를 “SQL Developer User Information Directory”라 부릅니다. MS Windows 환경에서는 C:Documents and Settings가 이에 해당합니다. 이 디렉토리에서 사용자가 로그인에 사용한 계정을 선택합니다. 예를 들어 Icunning으로 로그인했다면, C:->Documents and Settings->lcunning 디렉토리로 이동합니다. 이 디렉토리에서 다시 .sqldeveloper 디렉토리로 이동합니다. (따라서 현재 위치는 C:->Documents and Settings->lcunning->.sqldeveloper 디렉토리가 됩니다.)


Linux에서는 홈 디렉토리에 .sqldeveloper 디렉토리가 위치합니다. 따라서 $HOME이 /home/lcunning으로 설정되어 있다면 UserReports.xml은 /home/lcunning/.sqldeveloper에 위치합니다.
.sqldeveloper 디렉토리에는 최소한 두 개의 파일이 존재합니다. 그 중 하나인 UserReports.xml은 사용자 정의 리포트를 저장하고 있습니다. 임의의 XML 편집기를 이용하여 이 파일을 열어 볼 수 있습니다.


Figure 13

참고: UserReports.xml 파일을 편집하기 전에 반드시 백업을 수행합니다! XML 문법이 잘못된 경우, 백업 파일을 복구하여 다시 처음부터 시작해야 합니다.

XML 문서는 아래와 같은 포맷으로 작성되어 있습니다:

<reports>
  <folder>
    <name></name>
    <description></description>
    <report enabled="true">
      <name></name>
      <description></description>
      <tooltip></tooltip>
      <query>
        <sql></sql>
      </query>
    </report>
  </folder>
</reports>
  

이 포맷은 안에서 밖으로(SQL 쿼리 -> 폴더 -> 리포트 문서) 읽을 수도 있고, 밖에서 안으로(리포트 문서 -> 폴더 -> SQL 쿼리) 읽을 수도 있습니다. 각각의 리포트는 name, description, tooltip, query 등의 속성을 포함하고 있습니다. 쿼리는 SQL 구문으로 작성됩니다.


변경 작업은 쿼리 노드에서 수행하게 됩니다. <query> 노드 안의 <sql> 노드 바로 뒤에 <binds> 노드를 추가합니다.

<binds> 노드의 내용이 아래와 같습니다:
<binds>
  <bind id="">
    <type></type>
    <prompt></prompt>
    <value></value>
    <tooltip></tooltip>
  </bind>
</binds>
  

바인드 태그의 id 속성은 바인드 변수의 이름을 의미합니다. 이 방법을 사용하여 바인드 변수를 정의하고자 한다면, 모든 바인드 변수에 대해 동일한 방법(UserReports.xml 파일 편집)을 사용해야 합니다.


바인드 변수에 디폴트 값을 설정하고자 하는 경우, <value> 엘리먼트를 이용합니다.


ToolTip은 사용자에게 추가적인 정보를 제공하고자 하는 경우에 이용됩니다. original_or_recycle, original_name, object_type 변수를 아래와 같이 정의합니다.

<binds>
  <bind id="original_or_recycle">
    <type><![CDATA[null</type>
    <prompt><![CDATA[original_or_recycle</prompt>
    <value><![CDATA[NULL_VALUE</value>
    <tooltip><![CDATA[Enter 1 to drill down to the original object, otherwise leave it null</tooltip>
  </bind>
  <bind id="original_name">
    <type><![CDATA[null</type>
    <prompt><![CDATA[original_name</prompt>
    <value><![CDATA[NULL_VALUE</value>
    <tooltip><![CDATA[Enter the original name</tooltip>
  </bind>
  <bind id="object_type">
    <type><![CDATA[null</type>
    <prompt><![CDATA[object_type</prompt>
    <value><![CDATA[NULL_VALUE</value>
    <tooltip><![CDATA[Enter an object type</tooltip>
  </bind>
</binds>
  

![CDATA ]] 텍스트는 XML 파서가 [ ] 기호 안의 문자열을 처리하지 않도록 설정하는데 이용됩니다. XML 구문에 익숙하지 않은 개발자라면, 반드시 이 기호를 사용하여 문자열을 보호하도록 해야 합니다.


설명을 위한 텍스트와 디폴트 값의 설정 기능은 그 활용 가치가 매우 높으며, 앞으로도 오라클에 의해 많은 기능 개선이 이루어질 것으로 기대가 되는 부분입니다. (커스터마이즈 기능은 현 버전에도 존재하고 있지만, 이를 활용하기 위한 인터페이스가 제공되고 있지 않은 것이 문제입니다.)


UserReports.xml 파일의 수정 작업을 완료했다면, Oracle SQL Developer를 종료하고 다시 시작합니다. 그런 다음 리포트를 실행합니다. 아래와 같은 스크린을 확인할 수 있습니다.

Figure 14

리포트의 공유

사용자 정의 리포트를 고객, 동료, 또는 다른 Oracle SQL Developer 사용자와 공유하고자 하는 경우, UserReports.xml 파일을 다른 사용자의 SQL Developer User Information Directory 디렉토리에 복사하면 됩니다.


공유할 필요가 없는 리포트가 존재하는 경우에는 해당 리포트의 <report>... </report> 텍스트를 삭제합니다 (변경 작업 이전에 파일을 백업하는 것을 잊지 마시기 바랍니다!)


리포트 데이터의 익스포트

리포트를 실행한 후 데이터 그리드를 마우스 오른쪽 버튼으로 클릭하면 컨텍스트 메뉴가 표시됩니다. 이 컨텍스트 메뉴에서는 Export 옵션만을 선택할 수 있습니다. Export를 선택하면 CSV, XML, Insert, Loader, Text 등의 메뉴가 다시 표시됩니다. 이 메뉴에서 리포트 데이터의 익스포트 포맷(export format)을 설정할 수 있습니다. 옵션 중 하나를 선택하면 아래와 같은 대화상자가 표시됩니다.

Figure 15

  • CSV는 “comma-separated values”의 약자로 데이터를 스프레드시트(또는 Oracle Application Express)에 익스포트하는 경우 사용됩니다.
  • XML은 XML 문서를 의미합니다.
  • INSERT 옵션은 데이터 셋의 각 레코드를 위한 INSERT 구문을 생성합니다.
  • LOADER 옵션은 SQL*Loader 데이터 컨트롤 파일을 생성합니다.
  • TXT 옵션은 탭으로 구분된 텍스트 파일을 생성합니다.

대화상자의 Columns 탭을 이용하면 익스포트 파일에 포함시킬 컬럼을 선택할 수 있습니다. 또 Where 탭은 출력 파일에 포함되는 레코드의 조건절을 생성하는데 활용됩니다.

Move Over, SQL*Plus

Oracle SQL Developer는 모든 오라클 개발자들이 반드시 사용해야 하는 도구의 하나입니다. Oracle SQL Developer는 개발자의 SQL, PL/SQL 개발 작업을 지원할 뿐 아니라, 사용자 정의 리포트를 생성하기 위한 매우 유용한 기능을 제공합니다.

Oracle SQL Developer를 이용하면 커스텀 리포트를 쉽게 생성할 수 있으며, 변수 입력 대화상자, 드릴다운 리포트와 같은 부가적인 기능을 함께 활용 가능합니다. 오라클 데이터베이스에 자주 접근하는 사용자라면 한 번쯤 Oracle SQL Developer를 다운로드해서 활용해 볼 필요가 있습니다.

JSP/Servlet Spec 버전별 특징

Programing 2007.02.06 16:16 Posted by 애플자라
JSP/Servlet Spec 버전별 특징
Java 웹 어플리케이션을 개발하다보면, 의외로 자기가 현재 사용중인 JSP/Servlet 스펙의 버전을 모르는 상태로 개발하는 것을 많이 보게 된다.

특히, 자주 나타나는 것으로 개발은 Tomcat 에서 하면서, 실제 갑은 톰캣이 아닌 다른 WAS를 사용할 경우가 있는데, 이는 나중에 아주 심각한 문제로 대두될 수 있다. Tomcat 5에서 Tomcat 5가 지원하는 JSP 2.0/Servlet 2.4로 (해당 스펙의 기능을 이용해서) 개발했다가, 나중에 갑이 우리는 죽었다 깨나도 웹 로직 8.1(JSP 1.2/Servlet 2.3) 쓸래... 그래버리면, 그때부터는 열심히 노가다로 고쳐야 된다.

간단하게 JSP/Servlet 스펙을 내가 아는대로 정리해본다. 특히 개발시 Tomcat으로 개발 환경을 구축한다면, 갑이 원하는 WAS가 지원하는 스펙 버전을 확인해서 그 스펙 버전에 맞는 톰캣을 사용하도록 한다. 물론 각 WAS별 지원 스펙은 해당 WAS의 업체에 물어보면 된다.

Tomcat 버전별 지원 스펙

* Tomcat 3.x : JSP 1.1, Servlet 2.2
* Tomcat 4.x : JSP 1.2, Servlet 2.3
* Tomcat 5.x : JSP 2.0, Servlet 2.4

위 내용은 http://tomcat.apache.org/whichversion.html에서 확인할 수 있다.
물론 상위 버전을 지원하는 WAS는 하위 버전 스펙도 지원한다. Tomcat 5.x에서 JSP 1.1/Servlet 2.2 어플리케이션 짜도 괜찮다. 하지만 안그러는게 더 안전할 거 같다.

Tomcat 3.x : JSP 1.1, Servlet 2.2 는...

* web.xml 에서 다음과 같은 DTD를 선언해줘야 한다.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
 <!-- 어쩌구 저쩌구...-->
</web-app>

* 한글 파라미터 처리에 심각한 문제가 있다. ServletRequest.setCharacterEncoding(String)메소드가 존재하지 않기 때문에 각 요청에 대해 일괄적인 문자 인코딩 지정을 할 수가 없다.
* 한글 파라미터 처리를 하려면 모든 요청에 대해서 다음 처럼 인코딩 변환작업을 해줘야 한다.
String param = new String(request.getParameter("param").getBytes("latin1"),"euc-kr");

위와 같은 노가다를 안 하려면 MVC 패턴 프레임워크를 사용하면서 Controller 부분에서 일괄적으로 request 객체를 바꿔치기해서 getParameter()가 인코딩을 자동으로 해주도록 해야 한다. Spring MVC에서 그런식으로 한 예제(이거도 사실 불완전함).
사실.. 한글 문제가 아니더라도 MVC패턴 프레임웍을 쓰는것이 여러모로 좋은 것은 이미 다들 아실거 같다.
* Filter와 Listener가 존재하지 않는다. 특히 Filter는 상당한 노가다를 줄여주는 역할을 해서, 많이 애용되지만 JSP 1.1/Servlet 2.2에는 존재하지 않는다.
* 서블릿을 web.xml에서 매핑하지 않고 패키지명을 포함한 클래스의 완전한 이름을 통해 브라우저에서 서블릿의 직접 호출이 가능하다. 매우 좋지 않은 습관이지만 어쨌든 가능하다.

너무 오래된 스펙이고 불편한 점이 많으므로 되도록 사용하지 않는게 좋다. 갑이 이 스펙의 WAS를 요구하면 설득해서 최소한 JSP 1.2/Servlet 2.3 으로 바꾸도록 하길 권장하고 싶다.

Tomcat 4.x : JSP 1.2, Servlet 2.3 는...

* web.xml 에서 다음과 같은 DTD를 선언해줘야 한다.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
     PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
....
</web-app>

* ServletRequest.setCharacterEncoding(String)를 통해서 파라미터의 문자 인코딩을 일괄적으로 지정할 수 있다.
* Filter와 Listener가 존재한다.
* Filter와 ServletRequest.setCharacterEncoding(String)를 이용하면, 한번에 한글 관련 설정이 끝난다.
  FIlter 강좌 하나...(영문)
  Listener 강좌 하나...(영문) : 리스너는 웹 어플리케이션이 시작/종료 되거나, 세션 생성/파괴와 같은 특정 이벤트가 발생할 때 부가적인 작업을 해줄 수 있도록 하는 클래스이다.
* 기본적으로 서블릿 매핑을 web.xml에 작성하지 않으면 서블릿을 호출할 수 없다.(이게 더 좋은거다... 보안상)
* JSTL 1.0 이 도입되었다.

JSP 1.2/Servlet 2.3 이 현재 우리나라에서 제일 많이 쓰이는 것으로 보이며 개발시 어느정도 무난하다 할 수 있다.

Tomcat 5.x : JSP 2.0, Servlet 2.4 는...

* web.xml 에서 다음과 같은 Schema를 선언해줘야 한다.
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
<!-- DTD에서 Schema 로 바뀌었다. -->
</web-app>

* 쉽고 강력해진 Tag Library 작성기능.
* EL을 JSTL이 아닌 모든 템플릿 문자열에서 사용가능하다.
* JSTL 1.1 이 도입되었다.
* Function 커스텀 태그를 만들 수 있다.
* 그외 자세한 JSP 2.0/Servlet 2.4의 변경 사항 JSP 2.0 뭐가 바뀌었나를 참조한다.

Tomcat 4.x/5.x에서의 한글 문제 해결법도 한 번 읽어보시길 권한다.

개인적으로는 JSP 2.0/Servlet 2.4의 사용을 권장하고 싶다. 스펙 버전이 올라갈 수록 JSP 개발은 더 쉬워지고 생산성도 높아진다(물론 갑이 이 스펙을 지원하는 WAS 사용을 결정했을 때 얘기이다).

tags : java jsp servlet 서블릿 spec 스펙 version 버전

grep 명령어 사용법

Linux 2007.01.26 18:01 Posted by 애플자라
1. 기능
파일 내에서 특정 패턴을 검색한다. 이름은 Global Regular Express Printer 의 머리글자이다.

2. 문법
# grep [ -vclhnief ] 표현 파일명(들)
# fgrep [ -vclhnief ] 문자열 파일명(들)

3. 옵션-type pattern 형식이 pattern인 것.
-V : 일치되는 내용이 없는 라인을 표시한다.
-C : 일치되는 내용이 있는 행의 개수를 센다.
-I : 일치되는 내용이 있는 파일의 이름만을 표시한다.
-h : 일치되는 내용을 찾은 파일의 이름을 표시하지 않는다.
-n : 일치 내용이 있는 행은 행 번호와 함께 표시된다.
-i : 대소문자 구분을 하지 않는다.
-e 표현 : 표현이 하이픈 문자로 시작될 때 사용한다.
-f 파일 : 찾으려는 문장이나 표현이 있는 파일을 지시한다.

4. 사용방법 및 정보
원하는 탐색 단어 혹은 문장을 검색한다. 표현은 일반 표현식을 사용한다. fgrep은 문자열을 검색할 때 빠르게 사용할 수 있다.

[root@sense ~]# ls | grep mail
mail.txt


- ls 결과 중 mail 이라는 구문이 들어 간 파일이 있는 지 검색한다.

grep "[Ss]ense" mail.txt


앞 글자가 대소문자인지 상관하지 않고 sense라는 단어를 찾는다. 이것은 다음의 fgrep 명령과 같은 동작을 한다.

# fgrep sense mail.txt

'Linux' 카테고리의 다른 글

리눅스의 디렉토리구조  (0) 2007.08.29
vi 초간단 매뉴얼  (0) 2007.08.29
zterm & ssh  (0) 2007.08.29
리눅스 기초 명령어  (0) 2007.08.28
Linux 설치 파일  (0) 2007.08.28
grep 명령어 사용법  (0) 2007.01.26
TAG grep