검수요청.png검수요청.png

프로씨

위키원
이동: 둘러보기, 검색
프로씨(Pro-C) 로고
프로씨(Pro-C) 로고와 글자

프로씨(Pro-C)는 C 언어를 사용하여 데이터베이스를 쉽게 관리할 목적으로 미국 오라클사가 만든 프로그래밍 언어이다. 영어로 Pro-C, ProC, Pro*C라고 쓴다. 프로씨는 SQL문을 포함한 C 언어 프로그램을 오라클(Oracle) 데이터베이스 내에 있는 데이터에 접근하여 조작을 할 수 있는 C 프로그램으로 변환하기 위해 사용한다. 프로씨(Pro*C)는 프리컴파일러이기 때문에, 입력 파일 내에 있는 EXEC SQL 문을 적당한 ORACLE 콜로 변환해서 출력 파일을 작성한다. 그 다음 이 출력 파일을 C 프로그램에 대한 통상의 방법으로 컴파일하고 링크해서 실행모듈을 작정한다.[1]

개요[편집]

프로씨는 SQL 문은 절차형 언어가 아니다. 그래서 오라클을 포함한 많은 데이터베이스PL/SQL이라는 절차형 언어를 제공한다. PL/SQL오라클 내부에서 실행되는 프로그램으로서 오라클 내부라는 한정된 공간에서 실행되는 도구이다.DBMS의 버전이 높아지면서 이전관 다르게 PL/SQL에도 다양한 기능이 추가 되었다. 예를 들면, TCP/IP, HTTP, FILE I/O 등과 같은 기능이 추가되어 다양한 방식의 프로그래밍이 가능해졌다. 하지만 오라클 외부 프로그램과의 연동 등에 있어서는 많은 제약이 있다. 예를 들어, TCP/IP 통신을 하는 PL/SQL 문장을 작성하여 수행하는 중에 메모리 할당 등 예기치 않은 오류로 프로그램이 종료되는 상황이 발생할 수 있다. 프로그램이 오류로 인해 종료되는 부분은 프로그램을 수정하여 해결이 가능하다. 하지만 이로 인해 오라클 엔진에 부하가 가해진다면 이는 돌이킬 수 없는 장애로 이어질 수 있다. 이렇듯 내부 PL/SQL을 통한 프로그램의 경우 오라클이라는 내부 울타리에서만 수행되는 특징이 큰 제약으로 작용한다. 이런 고민을 해결하기 위해서 대부분의 DBMS 벤더는 외부 C 프로그램과 결합할 수 있는 선행 컴파일러를 제공하고 있으며 오라클에서는 이를 Pro*C라고 한다. Pro*CPL/SQL과 같이 절차적 프로그래밍이 가능한 프로그램 도구로서 PL/SQL처럼 오라클 내부에서 수행되는 프로그램이 아니라 실행 가능한 외부 프로그램으로 작성이 되어 관련 작업을 수행할 수 있게 해 주는 도구이다. 다만 일반 프로그램 언어들과 다른 점이 있다면, Pro*C만으로는 실행 파일을 만들어 낼 수 없다는 것이다. 그래서 Pro*C를 Pre Compiler(설행 컴파일러)라고 한다.Pro*C는 선행 컴파일러이기 때문에 선행 컴파일을 통해서 실행 파일이 아닌 C 컴파일러가 인식할 수 있는 출력 파일(xxx.c)을 생성한다. 선행 컴파일러를 통해 생성된 C 프로그램은 C 프로그램의 통상적인 방법으로 컴파일되고, 오라클 라이브러리와 결합(링크)되어 실행 모듈이 만들어진다.Pro*C 프로그래밍을 위해서는 Pro*C 고유의 문법을 숙지하고 있어야 하지만 C 프로그래밍에 대한 기본 지식도 있어야 한다. 특히 메모리와 관련된 부분이나 포인터 등과 같은 C의 고급 기능을 사용하기 위해서는 C 프로그래밍에 대한 지식을 갖추고 있어야 한다.[2]

특징[편집]

프로씨를 사용하면 프로그래머는 통상의 프로그래밍 과정에 별도의 처리를 추가해야 한다. 그러나 별도의 처리를 추가함으로써, 상당량의 작업을 프로씨가 수행하게 된다.

C 언어를 작성해서 기동할 때의 통상의 작업 순서는 다음과 같다.

  1. C 언어를 작성한다.
  2. 프로그램을 컴파일해서 오브젝트 파일을 작성한다.
  3. 오브젝트 파일을 링크해서 실행 가능한 파일을 작성한다.
  4. 프로그램을 실행한다.

프로그래머가 소스프로그램에 프로씨를 사용하는 경우에는, 위에서 기술한 순서에 한가지 처리가 더 추가된다.

  1. 프로씨 프로그램을 작성한다.
  2. 프로씨를 이용해서 프로그램을 프리컴파일 한다.
  3. 프로그램를 컴파일해서 오브젝트 파일을 작성한다.
  4. 오브젝트 파일을 링크해서 실행 가능한 파일을 작성한다.
  5. 프로그램을 실행한다.[3]

종류[편집]

4GL 프로그램으로 DB 핸들링 프로그램을 작성하기 위해서 가장 먼저 할 일은 DB 접속 방식을 선택하는 것이다. ODBC 방식으로 할 것인지, OLE-DB 방식으로 진행할 것인지를 선택한 후에 그에 맞는 프로그램 방식을 결정해야 한다.Pro*C 역시 다르지 않다. GUI 방식의 4GL 프로그램처럼 마우스 클릭을 통해 설정할 수 있는 것이 아니라 코딩 시점에 Header 파일 선정, 프로그램 방식의 선정, 컴파일 옵션의 변경을 통해 작성 방식을 선택하여 사용할 수 있다. Pro*C에서 프로그램 작성 방식은 두 가지로 나누어지며, 하나는 내장 SQL 방식이고, 다른 하나는 OCI(Oracle Call Interface) 방식이다.

내장 SQL 방식[편집]

내장 SQL 방식이란 C 프로그램 내부에서 'EXEC SQL'이라는 접두사 뒤에 SQL 문장을 직접 기술하는 방식이다. 내장 SQL 방식은 통상적으로 가장 많이 사용된다. 우리에게 익숙한 윈도우 환경의 개발툴과 비교해 본다면, OLEODBC를 통해 데이터베이스와 연결하여 작업하는 방식의 프로그램과 비슷하다고 할 수 있다. 내장 SQL 문장에는 일반 SQL 문장뿐만 아니라 오라클을 이용한 다양한 형식의 내부 문장을 사용할 수 있으며, 미리 생성되어 있는 Stored Procedure, Package 또는 개발자가 임의로 작성한 PL/SQL도 사용할 수 있다. 즉, 오라클 데이터베이스에서 사용하는 모든 문장, 즉 DML, DDL, DCL, PL/SQL, 일반 SQL 문장을 내장 SQL 문장에 사용할 수 있다.

OCI 방식[편집]

OCI(Oracle Call Interface) 방식이란 OCI 라이브러리를 통해서 오라클 SQL 문장을 직접 호출하여 사용하는 방식이다. 내장 SQL 방식에 비해서 조금 더 하위 레벨에 해당하는 프로그래밍 방식으로서 OCI를 통해서 DB 핸들링 작업을 실행하기 때문에 데이터베이스 서버의 자원을 효율적으로 관리하고 SQL 문장 수행의 각 단계를 직접 제어할 수 있다는 장점이 있다.그러나 프로그래밍 방법에 있어 내장 SQL 프로그램에 비해 복잡하기 때문에 개발자의 숙련도가 요구된다는 단점이 있다. Unix 환경의 C 프로그램을 대부분의 개발자들은 쉽게 생각하기보다는 어렵게 생각하고 있다. 이는 대부분의 제어를 개발자가 직접 기술해야 하기 때문이다. 반면에 GUI 프로그램은 마우스 클릭 몇번만으로 대부분의 설정이 가능해진다. 이렇듯 OCI 프로그램에서는 모든 부분의 직접 제어나 기술이 내장 SQL 프로그램에 비해서 어렵게 여겨지는 것이다. 물론 대부분의 프로그램에는 특정한 패턴이 있으므로 그 패턴을 익히기만 하면 어떤 프로그램 방식이 더 쉽다, 혹은 더 어렵다고 단정지을 수는 없다.대부분의 경우라고 할 수는 없지만 적지 않은 개발자들이 내장 SQL 문장 방식을 사용하고 있다.[2]

오류 진단,처리[편집]

프로그램을 작성할 때 가장 중요한 것은 오류에 대한 정확한 핸들링과 그에 대한 처리이다. 프로그램 오작동시 원인이 무엇인지와 오작동의 원인을 해결하기 위해 무엇이 필요한지를 정확히 짚어낼 수 있어야 한다. Pro*C에는 이를 인지하고 처리하는 기능이 있다.어떻게 보면 C 프로그램보다 에러 검출이 더 쉽다고 할 수 있다. C 프로그램의 경우에는 시스템 시그널에 대한 예외 처리를 해야 한다든지, core 파일 없이 프로그램이 비정상 종료되는 segmentation fault를 처리해야 하는 등 여러 가지 상황에 따라 조건을 다르게 적용해서 처리해야 하는 어려움이 있다. 이에 반해 Pro*C에서는 이러한 복잡한 조건이 붙지 않는다.내장 SQL이 포함된 응용 프로그램을 실행하면 다양한 형태의 에러와 상태에 대한 경고가 발생할 수 있다. 그러므로 응용 프로그램이 정상적으로 수행되어 명료하게 종료되기 위해서는 실행 시 에러와 경고를 미리 예상하고 처리해야 한다. 설사 미리 예상하지 못하더라도 이러한 오류와 경고를 어딘가에 기록해서 후에라도 이를 해결할 수 있어야 한다. 앞으로 발생할 모든 에러를 미리 예측할 수는 없지만 프로그램 흐름 상에서 기능적으로 발생하는 에러와 경고를 미리 예상하고 처리해야 한다. 설사 미리 예상하지 못하더라도 이러한 오류와 경고를 어딘가에 기록해서 후에라도 이를 해결할 수 있어야 한다. 앞으로 발생할 모든 에러를 미리 예측할 수는 없지만 프로그램 흐름 상에서 기능적으로 발생하는 에러와 포괄적 범위의 에러의 처리에 대해서는 필히 기술하여 처리해야 한다.에러나 경고를 감지하고 에러에 대해 더 많은 정보를 얻기 위해서는 별도 통신 영역의 정보를 가진 도구가 필요하며 Pro*C에서는 SQL 통신 영역(SQLCA)와 오라클 통신 영역(ORACA)이라는 두 개의 특수한 데이터 구조를 지원한다. 이는 프로그램 안에서 사용하는 SQL문장에 대한 경고나 오류의 상태를 기술하는 구조체이다.[2]

명시적 오류 처리[편집]

명시적 오류 처리 방식에서는 묵시적 처리 방식처럼 전역적 혹은 지역적이라는 단어가 존재하지 않는다. SQL 문장 마다 오류 처리 구문을 지정하여 오류를 처리한다. 명시적으로 처리한다는 것은 SQL 문장 10개에 대해 10개의 오류 처리를 할 수도 있고 안 할 수도 있다는 것으로, 오류 처리를 하지 않았다고 하여 실행 상의 문제나 컴파일 상의 문제가 일어나지는 않는다. 다만 발생 가능한 오류 처리가 누락되어서, 실제로 오류가 발생할 위험은 내재되어 있다.명시적 오류 처리는 각 SQL 문장이 수행된 후에 SQLCA 구조체의 멤버인 'sqlcode'를 통해 확인 가능하며, 추출된 sqlcode 값에 따라 정상과 오류를 구분하여 처리한다. 오류가 발생한 경우 오류 번호가 아닌 오류 메시지 내용을 확인하고 싶다면 SQLCA 구조체의 또 다른 멤버인 'sqlerrm.sqlerrmc'를 활요하면 된다. SQL 문장마다 사용할 수 있으며, 재사용 시 직전의 값은 초기화된다.

묵시적 오류 처리[편집]

명시적 오류 처리프로그램 내 모든 SQL 문장 마다 오류 처리를 해야 하며 개발자의 실수로 오류 처리를 하지 않은 경우에는 잠재적으로 오류 가능성을 내포한 프로그램이 되는 것이다. 어떤 회사든지 이러한 명시적 오류를 누락한 프로그램은 어렵지 않게 찾을 수 있다. 이러한 코딩 누락에 의한 오류와 SQL 문장 마다 기술해야 하는 번거러움을 해결하기 위해 묵시적 오류 처리를 이용할 수 있다.묵시적 오류 처리에서는 전역적인 설정과 지역적인 설정이 모두 가능하다. 전역적으로 처리한다는 것은 프로그램의 시작 전, 즉 호스트 변수 선언 후에 기술하는 것을 의미한다.[2]

각주[편집]

  1. Pro*C 란 - 초보자를 위한 개념 설명〉, 《티스토리》 2010-03-18
  2. 2.0 2.1 2.2 2.3 Pro*C 소개와 기본 특징 및 오류 진단〉, 《티스토리》 2017-09-09
  3. 짱가, 〈Pro*C참고〉, 《네이버블로그》, 2004-05-15

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 프로씨 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.