소개

본 장에서는 DBIO의 기본 개념 및 SQL 사용 유형별로 분류된 DBIO 쿼리 타입에 대해 소개한다.

1. 개요

ProFrame은 비즈니스 영역과 입출력 데이터에 대한 표준을 제시할 뿐만 아니라 일관된 데이터베이스 접근과 데이터베이스 관리 시스템의 독립성을 보장한다. 이처럼 데이터베이스 접근에 대한 표준을 제공하는 것이 바로 아래 그림에서 표현되고 있는 Data Tier의 DBIO이다.

figure1 1
ProFrame 아키텍처 – Data Tier - DBIO

Data Tier는 ProFrame 아키텍처에서 제시하고 있는 3-Tier 중의 하나로 데이터베이스 접근 모듈과 애플리케이션 프로그램을 분리하여 비즈니스 로직의 성능을 높이고 데이터베이스 접근의 일관성을 보장하는 계층이다. 이 계층에는 DBIO, DWIO, FileIO가 포함되어 있다.

DBIO는 데이터베이스 접근 방식을 표준화한 방법으로 신속한 애플리케이션 프로그램 개발과 유지보수가 쉽다. 그뿐만 아니라 데이터베이스 입출력과 관련된 비즈니스 로직을 개발하는 데 높은 생산성을 보장하고 개발자가 실행하고자 하는 쿼리를 ProFrame이 제공하는 API를 통해 애플리케이션 프로그램에서 호출 가능한 모듈로 만들어 주는 역할도 수행한다.

figure1 2
DBIO 구조도

2. 특징

DBIO의 특징은 다음과 같다.

  • 데이터베이스 접근 방식을 표준화한다.

    DBIO는 데이터베이스 접근을 위한 공통 기능을 수행하고 데이터베이스 접근 권한을 제어함으로써 데이터베이스 접근 방식을 표준화한다.

  • 데이터베이스 접근에 대한 일관된 에러처리를 지원한다.

  • DBMS 벤더에 대한 의존성을 배제할 수 있다.

    개발자가 직접 Embedded SQL 프로그래밍을 하지 않으므로 특정 벤더의 DBMS에 의존하지 않고 독립적으로 개발할 수 있다. Embedded SQL 프로그래밍은 데이터베이스 애플리케이션 프로그램을 작성할 때 애플리케이션 프로그램 내에 SQL 구문을 정의하여 프로그래밍하는 것을 의미한다.

  • 품질이 높은 애플리케이션 프로그램을 개발할 수 있다.

    DBIO는 쿼리 ID 및 데이터베이스 입출력 구조체를 개발 표준에 맞게 자동으로 생성하고 관리해준다. 따라서 품질이 높은 애플리케이션 프로그램 개발이 가능하다. 다르게 말하면 애플리케이션 프로그램은 표준화가 잘된 코드를 관리할 수 있다는 의미이기도 하다.

  • 중복된 데이터베이스 프로그래밍을 최소화할 수 있다.

  • DBIO 편집기를 이용하여 개발 생산성을 높이고 오류 발생을 줄여준다.

  • SQL 관리가 쉽다.

    모든 SQL을 DBIO에 저장하여 관리하므로 DBA 입장에서 현재 시스템에서 사용 중인 모든 SQL을 조회할 수 있다.

  • DWIO 기능을 지원한다.

    DWIO는 DBIO 내부에 포함된 기능으로 데이터베이스의 변경된 내용을 실시간으로 DW(Data Warehouse) 시스템에 전송한다.

3. 주요 기능

DBIO는 각 DBMS 벤더(Tibero, Oracle, Sybase, DB2 등)의 Embedded SQL에서 지원하는 모든 SQL을 지원한다. 달리 말하면 특정 벤더의 Embedded SQL에서 지원되지 않는 SQL은 DBIO에서도 사용할 수 없다는 뜻이다.

DBIO가 Embedded SQL에서 지원하는 모든 SQL를 사용한다는 것은 각 벤더의 Embedded SQL 파일의 형태로 DBIO가 생성되고 DBMS가 제공하는 전처리 컴파일러(precompiler)를 이용하여 표준 C 프로그램으로 precompile한다는 의미이다.

SQL의 기능 중에서 DBIO가 사용할 수 있는 기능은 다음과 같다.

  • 단일 레코드의 INSERT/UPDATE/DELETE/SELECT/FETCH를 한다.

  • 복수 레코드의 INSERT/UPDATE/DELETE/SELECT/FETCH를 한다.

  • 전체 컬럼을 READ/WRITE를 한다.

  • 일부 컬럼을 READ/WRITE를 한다.

  • built-in group function(SUM, COUNT 등), stored function를 사용할 수 있다.

  • 관계 연산자를 사용할 수 있다.

  • 관계 연산자는 =, >, <, BETWEEN, LIKE, IN 등이 있다.

  • ORDER BY 및 GROUP BY를 이용하여 정렬 기능을 사용할 수 있다.

  • SELECT, FETCH에서 Lock 옵션과 Cursor update를 사용할 수 있다.

  • 조인 쿼리/서브 쿼리를 수행한다.

  • UNION, INTERSECT, MINUS를 수행한다.

  • Dynamic SQL SELECT/FETCH를 한다.

최신 버전의 Pro*C 등에서 지원되지 않는 SQL은 마찬가지로 DBIO에서도 사용할 수 없다. 또한, 애플리케이션 프로그램에서 시스템의 안정성에 문제를 일으킬 수 있는 일부 DDL, DML 문장은 사용할 수 없다. 이와 같은 문제를 예방하기 위해 데이터베이스 작업은 개발자가 직접 애플리케이션 프로그램에서 실행하는 것보다 DBA가 작업하기를 권고한다.

4. 쿼리 타입

SQL 형식은 Embedded SQL과 Dynamic SQL으로 나뉜다.

  • Embedded SQL

    SQL 쿼리가 실행되는 시점에 지정된 변수 값을 제외하고는 SQL 구문의 변화가 없는 형식이다.

  • Dynamic SQL

    SQL 쿼리가 실행되는 시점에 쿼리 문장이 달라지는 SQL 형식이다.

DBIO 쿼리 타입은 SQL의 사용 유형별로 크게 4가지로 나뉜다. 이 중에서 PERSIST, VIEW, EXECSQL은 Embedded SQL 형식으로 생성된 DBIO 쿼리 타입이다.

DBIO 쿼리 타입 설명

PERSIST

PERSIST는 단일 테이블에 대한 쿼리를 작성할 수 있는 DBIO 쿼리 타입이며, 개발자가 직접 쿼리를 입력할 필요 없이 GUI 환경 즉, 스튜디오에 내장된 DBIO 편집기에서 DBIO 쿼리를 작성할 수 있다.

이 쿼리 타입은 단일 테이블에 INSERT/UPDATE/DELETE/SELECT/FETCH 형태의 쿼리를 실행할 때 사용한다.

VIEW

VIEW는 여러 테이블에 대한 쿼리를 작성할 수 있는 DBIO 쿼리 타입이며 개발자가 직접 쿼리를 작성해야 한다.

이 쿼리 타입은 PERSIST에서 작성할 수 없는 JOIN 또는 UNION 등의 SQL 구문을 사용할 수 있으며 여러 테이블에 SELECT/FETCH 형태로 쿼리를 실행할 때 사용한다.

EXECSQL

EXECSQL은 여러 테이블에 대한 쿼리를 작성할 수 있는 DBIO 쿼리 타입이며 개발자가 직접 쿼리를 작성해야 한다.

이 쿼리 타입은 PERSIST에서 작성할 수 없는 INNER 쿼리 등이 포함된 복잡한 쿼리를 INSERT/UPDATE/DELETE 형태로 실행할 때 사용한다.

DYNAMICSQL

DYNAMICSQL은 쿼리가 실행되는 시점에 SQL 구문이 변경되는 경우 또는 Embedded SQL에서 지원하지 않는 쿼리를 실행할 때 사용한다. 또한 DYNAMICSQL은 한 가지 정해진 목적을 가지고 SQL 구문을 작성하는 것에 비해 좀 더 유연한 SQL 구문을 작성할 수 있는 쿼리 타입이다.