PL/SQL 웹 애플리케이션 개요
PL/SQL은 오라클 데이터베이스에 내장된 강력한 프로그래밍 언어로, 저장 프로시저, 함수, 트리거 등을 작성하는 데 사용됩니다. 이를 활용하여 데이터베이스 중심의 웹 애플리케이션을 개발할 수 있습니다. 이 튜토리얼에서는 PL/SQL을 사용하여 웹 애플리케이션을 개발하는 방법을 상세히 설명하고, 실제 예제 코드를 제공하여 이해를 돕습니다.
PL/SQL 웹 애플리케이션 개발을 위한 준비
시작하기 전에 다음 사항들을 확인하십시오:
- 오라클 데이터베이스 설치 및 설정
- SQL Developer 등 PL/SQL 개발 툴 설치
- HTTP 서버 (예: Apache) 설치 및 설정 (선택 사항)
- 기본적인 SQL 및 PL/SQL 지식
PL/SQL을 이용한 웹 애플리케이션 아키텍처
PL/SQL 웹 애플리케이션은 일반적으로 다음과 같은 아키텍처를 가집니다:
- 웹 브라우저: 사용자가 웹 페이지에 접근하는 인터페이스
- 웹 서버: HTTP 요청을 받아 PL/SQL 게이트웨이로 전달
- PL/SQL 게이트웨이 (예: mod_plsql): 웹 서버와 데이터베이스 간의 통신을 담당
- 오라클 데이터베이스: PL/SQL 로직 실행 및 데이터 저장
아래 그림은 일반적인 PL/SQL 웹 애플리케이션 아키텍처를 보여줍니다.

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 프로시저 및 함수
웹 페이지의 로직을 처리하고, 데이터를 생성하거나 수정하는 데 사용됩니다. htp
및 htf
패키지를 사용하여 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 개발 툴을 같이 활용하면 더욱 효율적인 개발이 가능합니다.