InfoSphere™ Optim™ pureQuery
Runtime을 설치한 후 pureQuery 또는 pureQuery 사용
Java
애플리케이션을 프로덕션 환경에 배치할 수 있습니다.
또한 DB2® CLI
및 Microsoft .NET
애플리케이션을 개발할 수도 있습니다.
Java 애플리케이션을 위한 기능
pureQuery
API를 사용하는 애플리케이션의 경우
InfoSphere Optim pureQuery는 다음 기능을 제공합니다.
- 데이터베이스, 인메모리 콜렉션 및 반복기 오브젝트에 대해 SQL문을
실행하는 데 사용할 수 있는 단일 API 제공
Java
플랫폼은
다양한 소스의 외부 데이터 및 인메모리 콜렉션 처리를 위해 다수의 데이터 구조 및
API를 제공합니다. 이러한 각 기능은 특정 문제점 유형을 해결하는 데
완벽하게 적합합니다. 또한 pureQuery에는 콜렉션 내에서 데이터를 검색 및
수정하는 고유한 인터페이스 세트가 있습니다. 예를 들어 pureQuery는
Java
배열, 목록, 맵 및 반복기에 대한 API를 제공합니다. 각 API는
콜렉션에서 데이터를 쿼리하고 업데이트하기도 합니다.
마찬가지로 JDBC API는
SQL을 사용하여 관계형 및 기타 외부 JDBC DataSource 오브젝트에 액세스할 수 있는
방법을 제공합니다.
그러나 pureQuery에서는 애플리케이션이 잘 알려진 단일
쿼리 언어로 개별적으로 또는 조합하여 모든 데이터 소스에
액세스할 수 있습니다.
- 데이터 액세스를 위한 단순한 프로그래밍 모델 제공
- pureQuery가 JDBC 상단에서 씬(thin) 계층으로 실행되며, 쿼리,
업데이트, 저장된 프로시저에
대한 호출 및 데이터베이스 액세스와 연관된 기타 태스크를
단순화합니다. pureQuery는 Java 2
플랫폼, Standard Edition 5.0(J2SE 5.0) 및 Java 플랫폼,
Standard Edition 6(Java SE 6)에서 실행됩니다.
- 개발자 개입이 거의 없이 SQL 데이터를 리턴 유형에 자동으로 맵핑하지만,
복잡한 맵핑인 경우 사용자 정의된 코드를 제공할 수 있음
- pureQuery는 많은 Java 오브젝트 패턴에
SQL 쿼리 결과와 리턴된 오브젝트 사이의 자동 맵핑을 제공합니다. 쿼리 결과와
Java 오브젝트 사이의 복잡한 맵핑에서는
사용자 정의 맵핑에 대해 플러그 가능 종료 인터페이스가
허용됩니다.
테이블 결합을 포함하는 SQL 쿼리의 결과를 리턴하는
Bean을 작성하고 어노테이션을 작성할 수 있습니다.
쿼리 결과는 다른 Bean의 인스턴스를 포함하는 Bean 세트로
리턴됩니다. Bean의 계층 구조는 쿼리 결과의 일대일 및 일대다 관계를
반영합니다. 예를 들어 쿼리는 직원 테이블 및 부서 테이블 사이의 결합을 포함합니다.
쿼리는 다른 부서에 지정된 직원을 리턴합니다.
결과는 부서 Bean의 각 인스턴스가 부서를 나타내는
부서 Bean의 세트로 리턴됩니다. 각 부서 Bean은 직원 Bean의 목록을
포함합니다. 직원 Bean의 각 인스턴스는 직원 정보를 포함합니다.
- 어노테이션이 있는 메소드 및 인라인 메소드를 사용하여 SQL 애플리케이션 개발 지원
- 어노테이션이 있는 메소드는
사용자 정의 인터페이스에서 고유한 메소드를 정의하는 경우에
지원됩니다. SQL문으로 어노테이션이 있는 메소드를 작성합니다. 어노테이션이
있는 메소드로 데이터 액세스 오브젝트를 작성하여
DAO(Data Access Object) 패턴을 따르는 애플리케이션을 개발할 수 있습니다.
IBM에서 제공하는 Data
인터페이스에 정의된 메소드를 활용할 수 있도록
인라인 메소드가 지원됩니다. 인라인 메소드는
애플리케이션의 런타임 중에 SQL문을 구성해야 하는 애플리케이션인 경우 유용합니다. 인라인 메소드를 사용하여
SQL문은 메소드 호출에서 매개변수로 전달되며 이는 JDBC에서 수행된 접근과
유사합니다.
정적으로 실행되는 SQL문의 관리에 대한
지원이 제공됩니다.
인터페이스에서 사용되는 SQL문을 그룹화하도록 코드에 어노테이션을 작성할 수 있습니다. 그룹에 대한 바인드 프로세스를 제어할 수 있습니다.
pureQuery StaticBinder 유틸리티에서 사용하는 바인드 옵션을 제어할 수 있습니다. 또한 SQL문을 포함하는 패키지에 대해 생성된 이름을
제어할 수도 있습니다.
- 런타임 시 동적 및 정적 SQL 모두 지원
- pureQuery 코드는 런타임 시 알려지지 않은 임베디드 SQL 및 임시 SQL에 대해
표준 JDBC 드라이버의 동적 SQL을 사용할 수 있습니다.
pureQuery 코드는 또한 어노테이션이 있는 메소드 프로그래밍 양식 및 DB2 데이터베이스를
사용할 때 정적 SQL을 사용할 수도 있습니다.
정적 SQL의 장점은 다음과 같습니다.
- 동적 명령문 캐시 무효화
- 정적 SQL을 사용하면 DB2의
동적 명령문 캐시에 대한 경합이 줄어들기 때문에
동적 SQL을 사용하는 애플리케이션의 성능이 향상됩니다.
- 액세스 경로 일관성
- 정적 SQL은 애플리케이션을 실행하기 전에 액세스 경로를 잠가서
응답 시간을 예측하고 안정화할 수 있습니다. 반대로 동적 SQL에 대한 액세스 경로는
런타임 시에 계산됩니다.
- 애플리케이션 성능 개선
- 정적 SQL은 애플리케이션의 성능을 개선할 수 있습니다.
- 런타임 이전에 액세스 계획이 판별되기 때문에 런타임 시
SQL문을 준비할 필요가 없습니다.
- 각 명령문을 준비하고 설명할 필요가 없으므로 클라이언트 애플리케이션과
데이터베이스 서버 사이의 네트워크 트래픽이 줄어듭니다.
- 정적 SQL은 예측에 사용된 호스트 변수 또는 매개변수의 데이터 유형을
강화합니다. 이와 같은 강화로 인해 데이터베이스에서 입력 데이터와
대상 유형이 일치하게 됩니다.
- 철저한 보안
- 사용자에게 데이터베이스 오브젝트에 대한 권한을 부여하는 대신
DB2 패키지에 대한
EXECUTE 권한을 부여할 수 있습니다.
- 용이한 패키지 개정
- DB2 패키지의 버전을 작성하면
보다 나은 이전 액세스 경로가 손실될 위험없이 패키지를 리바인드할 수 있습니다.
- z/OS®에서 pureQuery 애플리케이션 실행 시
JDBC 유형 2 연결 지원
- JDBC 유형 2 드라이버는 Java와 기본 코드의
조합이므로 유형 2 연결은 일반적으로 유형 4 연결보다 더 효율적입니다.
pureQuery API를
사용하지 않는 애플리케이션은 클라이언트 최적화를 사용할 수 있습니다.
이는 정적으로 실행 중인 SQL을 지원하는 기타 방법과 다릅니다.
- pureQuery 클라이언트 최적화는 Embedded SQL에 대한 프리프로세서를
사용하는 COBOL 프로그래밍 언어와 달리 프리프로세서를 사용하지 않습니다.
- pureQuery 클라이언트 최적화는 SQLJ와 달리
변환기 또는 사용자 정의기를 사용하지 않습니다.
- 애플리케이션 소스로 하드 코드 SQL문이 필요하지 않습니다.
이
구성요소 또는 코드 변경사항을 요구하는 대신 클라이언트 최적화는
JDBC 드라이버와 애플리케이션의 상호작용 방법을 변경합니다.
- 안전한 pureQuery 데이터 저장
- pureQuery 구성 정보, pureQueryXML 데이터 및 캡처된
SQL 데이터는 필요 시 pureQuery Runtime을 통해 안전한 위치에 저장하여
액세스할 수 있습니다. pureQuery Runtime은 안전한 위치에서 pureQuery 데이터를 검색하도록
pureQuery Runtime을 구성할 수 있습니다. pureQuery Runtime은 pureQuery 클라이언트 최적화를
사용하는 pureQuery 지원 애플리케이션에서 캡처된 SQL 데이터를 안전한 위치에
저장할 수 있습니다.
- DB2 특수 레지스터 지원
- 애플리케이션에서 SQL문을 캡처할 경우 pureQuery 클라이언트
최적화는 특수 레지스터 정보를 추적합니다. pureQuery 클라이언트
최적화는 일반적으로 사용되고
SQL문 동작에 영향을 줄 수 있는 특수 레지스터의 특수 레지스터
값을 기록합니다. 동일한 SQL문을
두 번 실행하면 처음 실행할 때와 두 번째
실행할 때 특수 레지스터 값이 변경되는 경우 명령문 작동이
달라지는 경우도 있습니다.
pureQuery
Configure 유틸리티는 캡처된 SQL문과 함께 기록되는
특수 레지스터 정보를 기반으로 바인드 옵션을
생성합니다. 명령문을 캡처할 때 기록되는 특수 레지스터 설정에
기반한 바인드 옵션이 들어 있는 StaticBinder 옵션 파일을
작성하려면 Configure 유틸리티 옵션 -optionsFileForBind를
사용하십시오. 이 옵션 파일에는 명령문 세트, SQL문, pureQueryXML
파일에 있는 특수 레지스터 정보에 대한 정보와 경고도
들어 있습니다.
파일에 있는 정보를 통해
SQL문이 정적으로 실행될 때 애플리케이션에서 발행하고
동적으로 실행할 경우와 명령문 작동이 비슷하도록 바인드 옵션
세트를 지정할 수 있습니다. SQL문이 있는
DB2 패키지를 바인드할 때 pureQuery StaticBinder 유틸리티에 바인드 옵션을
지정합니다.
pureQuery Runtime 버전 2.2.0.3 및 그 이상 버전은
특수 레지스터 정보를 pureQueryXML 파일에 기록합니다. 버전 2.2.0.3보다
이전 버전의 pureQuery Runtime으로 pureQueryXML 파일을 작성한 경우에는
특수 레지스터 정보를 기록하기 위해 일부 SQL문을 다시 캡처해야
할 수도 있습나다.
- pureQueryXML 파일 관리 용이
- 다음 기능을 통해 pureQueryXML 파일의 SQL문 및 명령문 세트를 관리할 수 있습니다.
- Configure 유틸리티는 테이블 또는 컬럼 이름과 같은 SQL문의 텍스트로 SQL문을
그룹화하거나 특수 레지스터 사용별로 SQL문을 그룹화할 수 있습니다.
- Configure 유틸리티는 지정된 기간(일) 동안 애플리케이션이 SQL문을 실행하지 않은 경우
pureQueryXML 파일에서 SQL문을 삭제할 수 있습니다. pureQuery Runtime은
pureQuery 특성 captureMode가 ON으로 설정된 동안
SQL문이 애플리케이션에서 실행된 시간을 업데이트할 수 있습니다.
- Configure 유틸리티는 pureQueryXML 파일을 처리하기 전 또는 그 이후에
명령문 세트의 상태를 설정할 수 있습니다.명령문 세트의
상태에 따라 Configure 유틸리티가 명령문을 수정하려고 하는지 여부가
제어됩니다. pureQueryXML 파일의 StaticBinder를 사용하여
SQL문을 DB2 데이터베이스에 바인드할 경우,
명령문 세트를 수정한 후 해당 명령문 세트에서 SQL문을 다시 바인드해야 합니다.
- Configure 유틸리티는 pureQueryXML 파일에서 SQL문의 스키마 이름 및 데이터베이스 위치 이름을
변경할 수 있습니다.
- StaticBinder 유틸리티는 바인드 프로세스에서 명령문에 대한 오류를
리턴할 때 pureQueryXML 파일에서 SQL문을 처리할 수 있습니다. 유틸리티는
명령문을 유효하지 않은 항목으로 표시하거나 파일에서 이를 제거할 수 있습니다.
명령문이 유효하지 않은 항목으로 표시되면 명령문은 그래도 파일에 남아 있지만 해당
isBindable 속성이 false로 설정된 경우와 같이 처리됩니다.
Configure 유틸리티를 사용하여 명령문을 유효한 항목으로 표시하거나 유효하지 않은
항목으로 표시된 명령문을 제거할 수 있습니다.
- Configure, Merge 및 StaticBinder 유틸리티는 입력 pureQueryXML 파일에서
XML 스키마 유효성 확인을 수행할 수 있습니다.
- ManageRepository 유틸리티는 두 pureQueryXML 파일의 차이점을 나열하는 보고서를
생성할 수 있습니다. 원본 파일과 비교함으로써
업데이트된 pureQueryXML 파일의 변경사항을 간편하게 볼 수 있습니다.
C 및 C++ CLI(Call Level Interface) 애플리케이션의 기능
CLI(Call Level Interface)는
관계형 데이터베이스 액세스를 위한
C 및 C++ 애플리케이션 프로그래밍 인터페이스입니다. CLI는
동적 SQL문을 함수 인수로 전달하는 함수 호출을 사용합니다.
DB2 데이터베이스 또는
Informix® 데이터베이스에 연결하는 CLI 애플리케이션에 대한
pureQuery 클라이언트 최적화를 사용하도록 설정한 후에는, 애플리케이션이 실행한 SQL문을 제어할 수 있습니다.
예를 들어, 애플리케이션이 DB2 데이터베이스에 연결하는 경우,
해당 애플리케이션을 구성하여 SQL문을 데이터베이스에 대해 정적으로 실행할 수 있습니다.
데이터베이스에 대해 실행할 수 있는 SQL문을 제어할 수 있습니다.
pureQuery 클라이언트 최적화의 이점은 다음과 같습니다.
- DB2 데이터베이스에 대해 SQL문을 정적으로 실행
- 애플리케이션 소스 코드로 역추적하는 기능이 있는 SQL문을 사용하여 문제점 진단
- 성능이 저하된 SQL문을 최적화된 명령문으로 대체
- 제한된 세트의 SQL문을 허용하여 SQL 인젝션 공격 위험성 낮춤
DB2
명령 db2cli를 사용하여 SQL문을 실행하고 유효성을 확인할 수 있습니다.
db2cli 명령을 exec 옵션과 함께 실행하여
파일에 있는 SQL문을 실행하거나 유효성을 확인합니다. 파일의
SQL문이 준비되었지만 SQL문의 유효성 확인을 위해 실행되지 않도록
지정할 수 있습니다. pureQueryXML 파일에서 db2cli
명령에 의해 실행되거나 유효성 확인되는 SQL문을
캡처할 수 있습니다.