PL/SQL 웹 애플리케이션 개발

PL/SQL 웹 애플리케이션 개요

PL/SQL은 오라클 데이터베이스에 내장된 강력한 프로그래밍 언어로, 저장 프로시저, 함수, 트리거 등을 작성하는 데 사용됩니다. 이를 활용하여 데이터베이스 중심의 웹 애플리케이션을 개발할 수 있습니다. 이 튜토리얼에서는 PL/SQL을 사용하여 웹 애플리케이션을 개발하는 방법을 상세히 설명하고, 실제 예제 코드를 제공하여 이해를 돕습니다.

PL/SQL 웹 애플리케이션 개발을 위한 준비

시작하기 전에 다음 사항들을 확인하십시오:

  • 오라클 데이터베이스 설치 및 설정
  • SQL Developer 등 PL/SQL 개발 툴 설치
  • HTTP 서버 (예: Apache) 설치 및 설정 (선택 사항)
  • 기본적인 SQL 및 PL/SQL 지식

PL/SQL을 이용한 웹 애플리케이션 아키텍처

PL/SQL 웹 애플리케이션은 일반적으로 다음과 같은 아키텍처를 가집니다:

  1. 웹 브라우저: 사용자가 웹 페이지에 접근하는 인터페이스
  2. 웹 서버: HTTP 요청을 받아 PL/SQL 게이트웨이로 전달
  3. PL/SQL 게이트웨이 (예: mod_plsql): 웹 서버와 데이터베이스 간의 통신을 담당
  4. 오라클 데이터베이스: PL/SQL 로직 실행 및 데이터 저장

아래 그림은 일반적인 PL/SQL 웹 애플리케이션 아키텍처를 보여줍니다.

PL/SQL Web Architecture

PL/SQL 웹 애플리케이션 개발 방법

1. 내장 PL/SQL 게이트웨이 사용

오라클 XML DB 리파지토리 (XML DB HTTP 서버)를 사용하여 데이터베이스 내에 PL/SQL 웹 애플리케이션을 배포하고 관리할 수 있습니다. 이 방법은 간단하지만, 고급 기능이 제한될 수 있습니다.


-- PL/SQL 프로시저 생성 예시
CREATE OR REPLACE PROCEDURE hello_world
AS
BEGIN
  htp.p('Hello, World from PL/SQL!');
END;
/

-- XML DB HTTP 서버를 통해 프로시저를 게시
DECLARE
  l_dad_name VARCHAR2(30) := 'hr_dad';  -- 데이터베이스 접근 설명자 (DAD) 이름
BEGIN
  xdb_procedure.createProcedure(
    dad  => l_dad_name,
    procedure_name  => 'hello_world',
    plsql_block  => 'BEGIN hello_world; END;');
END;
/

이 예제에서는 hello_world 프로시저를 생성하고, XML DB HTTP 서버를 통해 게시합니다.

2. mod_plsql 게이트웨이 사용

mod_plsql은 Apache 웹 서버의 모듈로, PL/SQL 웹 애플리케이션을 개발하고 실행하는 데 사용됩니다. 이 방법은 더 많은 유연성을 제공하며, URL 재작성, 캐싱 등 고급 기능을 사용할 수 있습니다.


<Location /plsql>
  SetHandler pls_handler
  PlsqlDatabaseUsername  HR
  PlsqlDatabasePassword  password
  PlsqlDatabaseConnectString localhost:1521:ORCL
  PlsqlDefaultPage  hr.main
  PlsqlDocumentPath  /docs
</Location>

이 예제는 Apache 설정 파일의 일부로, /plsql 위치에 대한 요청을 PL/SQL 핸들러로 전달하도록 설정합니다. HR 스키마를 사용하여 데이터베이스에 접속하며, hr.main 프로시저를 기본 페이지로 지정합니다.

PL/SQL 웹 애플리케이션의 주요 구성 요소

1. PL/SQL 프로시저 및 함수

웹 페이지의 로직을 처리하고, 데이터를 생성하거나 수정하는 데 사용됩니다. htphtf 패키지를 사용하여 HTML 출력을 생성합니다.


CREATE OR REPLACE PROCEDURE display_employee_data
AS
  CURSOR emp_cursor IS
    SELECT employee_id, first_name, last_name, salary
    FROM employees;
  emp_rec employees%ROWTYPE;
BEGIN
  htp.p('<HTML>');
  htp.p('<HEAD><TITLE>Employee Data</TITLE></HEAD>');
  htp.p('<BODY>');
  htp.p('<TABLE border=1>');
  htp.p('<TR><TH>ID</TH><TH>First Name</TH><TH>Last Name</TH><TH>Salary</TH></TR>');

  FOR emp_rec IN emp_cursor LOOP
    htp.p('<TR>');
    htp.p('<TD>' || emp_rec.employee_id || '</TD>');
    htp.p('<TD>' || emp_rec.first_name || '</TD>');
    htp.p('<TD>' || emp_rec.last_name || '</TD>');
    htp.p('<TD>' || emp_rec.salary || '</TD>');
    htp.p('</TR>');
  END LOOP;

  htp.p('</TABLE>');
  htp.p('</BODY>');
  htp.p('</HTML>');
END;
/

이 예제에서는 employees 테이블의 데이터를 HTML 테이블 형식으로 출력하는 display_employee_data 프로시저를 생성합니다.

2. 데이터베이스 접근 설명자 (DAD)

데이터베이스에 연결하기 위한 설정 정보를 담고 있습니다. 사용자 이름, 암호, 접속 문자열 등을 지정합니다.

3. URL 매핑

URL과 PL/SQL 프로시저를 연결하는 규칙을 정의합니다. mod_plsql 구성 파일 또는 XML DB 설정을 통해 관리할 수 있습니다.

고급 기술

1. URL 재작성

mod_plsql의 URL 재작성 기능을 사용하면 사용자 친화적인 URL을 만들 수 있습니다. 예를 들어, /employee/123 URL을 hr.get_employee(123) 프로시저로 매핑할 수 있습니다.

2. 세션 관리

PL/SQL 웹 애플리케이션은 쿠키 또는 세션 변수를 사용하여 사용자 세션을 관리할 수 있습니다. owa_cookie 패키지를 사용하여 쿠키를 생성하고 관리할 수 있습니다.

3. 예외 처리

EXCEPTION 블록을 사용하여 예외를 처리하고, 사용자에게 적절한 오류 메시지를 표시합니다. 웹 애플리케이션의 안정성을 높일 수 있습니다.

4. 이미지, 쿠키 및 CGI 변수

PL/SQL 웹 어플리케이션에서 이미지, 쿠키 및 CGI 변수를 사용하면 웹 환경에서 더욱 다양한 작업이 가능합니다. UTL_HTTP, HTP, HTF 패키지들을 통해 이미지를 처리하고 세션 정보를 유지하거나 클라이언트 정보를 받아올 수 있습니다.

DECLARE
  l_image BLOB;
BEGIN
 -- 이미지 데이터를 블로그 파일에 읽기
  l_image := get_image_from_table('MY_IMAGES', 123);
 -- 브라우저에 이미지를 전달
  oci_webutil.show_image(p_blob => l_image,p_mimetype=>'image/jpeg');
END;
/

DECLARE
  val varchar2(4000);
BEGIN
  -- 특정 쿠키 값을 가져옴
  val := owa_cookie.get(’my_cookie’);
  -- 쿠키 값이 있으면 실행
   htp.p('my_cookie value:='|| val);
END;
/

PL/SQL 웹 어플리케이션 개발 팁

  • 보안에 유의하며, SQL Injection과 같은 공격에 대비해야 합니다.
  • 성능을 고려하여 쿼리를 최적화하고 인덱스를 적절히 사용해야 합니다.
  • 모듈화된 코드를 작성하여 유지 보수성을 높여야 합니다.
  • 오류 처리를 철저히 하여 사용자 경험을 개선해야 합니다.

결론

PL/SQL은 데이터베이스 중심의 웹 애플리케이션을 개발하는 데 유용한 도구입니다. 이 튜토리얼에서 설명한 방법들을 활용하여 강력하고 효율적인 웹 애플리케이션을 개발할 수 있습니다. 추가적으로 Oracle Apex와 같은 low-code 개발 툴을 같이 활용하면 더욱 효율적인 개발이 가능합니다.

위로 스크롤