한 개발자가 회사에서 PL/SQL 프로그램을 이용해 Oracle SQL을 작성하고 있다고 합니다. 이 표현이 맞을까요? 이 질문은 세 가지 기술의 관계를 명확히 이해하지 못할 때 생기는 혼란에서 비롯됩니다. 이들이 어떻게 다르고, 어떤 상황에서 사용되는지 건물 관리 시스템에 비유해 풀어보겠습니다.
1. Oracle: 데이터의 ‘초고층 빌딩’을 짓는 건설사
Oracle은 데이터베이스 관리 시스템(DBMS)입니다. 마치 초고층 빌딩을 설계하고 유지하는 건설사처럼, 데이터를 체계적으로 저장·관리하는 플랫폼을 제공하죠. MySQL이나 SQL Server가 다른 건설사라면, Oracle은 고성능과 안정성으로 유명한 프리미엄 브랜드입니다.
- 주요 역할:
- 데이터 저장소 생성 및 관리
- 보안, 백업, 복구 시스템 운영
- 다수 사용자의 동시 접속 처리
“Oracle을 설치한다는 건 빈 땅에 데이터센터를 짓는 것과 같아요.”
2. SQL: 건물 관리자가 사용하는 ‘기본 도구 상자’
SQL(Structured Query Language)은 데이터베이스와 소통하기 위한 표준 언어입니다. 건물 관리자가 엘리베이터를 작동하거나 전등을 켜는 것처럼, SQL로 데이터를 조회·수정·삭제합니다.
- 핵심 명령어:
SELECT
: 데이터 조회 (창문 열기)INSERT
: 새 데이터 추가 (가구 배치)UPDATE
: 기존 데이터 수정 (벽색 변경)DELETE
: 데이터 삭제 (쓰레기 처리)
특징:
- 모든 DBMS(Oracle, MySQL 등)에서 공통 사용
- 선언적 언어: “무엇을” 원하는지만 지정 (예: “3층 회의실 예약 현황 보여줘”)
“SQL은 건물 관리 매뉴얼이에요. 모든 관리자가 따라야 하는 표준 절차죠.”
3. PL/SQL: Oracle 전용 ‘스마트 제어 시스템’
PL/SQL(Procedural Language/SQL)은 Oracle에서만 사용되는 확장 언어입니다. SQL에 변수, 조건문, 반복문 같은 프로그래밍 요소를 추가해, 복잡한 로직을 구현할 수 있게 합니다. 마치 건물의 자동화 시스템이 조명·난방·보안을 한 번에 제어하는 것처럼 말이죠.
- 주요 기능:
- 저장 프로시저: 자주 쓰는 작업을 묶어 한 번에 실행 (자동 청소 로봇 설정)
- 트리거: 특정 이벤트 발생 시 작업 자동 실행 (화재 감지 시 스프링클러 가동)
- 예외 처리: 오류 발생 시 대체 경로 제공 (엘리베이터 고장 시 비상계단 안내)
사용 예시:
DECLARE
v_salary NUMBER;
BEGIN
SELECT salary INTO v_salary FROM employees WHERE id = 100;
IF v_salary < 5000 THEN
UPDATE employees SET salary = salary * 1.1 WHERE id = 100;
END IF;
END;
→ “ID 100 직원의 급여가 5000 미만이면 10% 인상하라”는 절차적 명령
“PL/SQL은 건물의 두뇌예요. 단순한 스위치 조작을 넘어 복잡한 의사결정을 하죠.”
4. “PL/SQL로 Oracle SQL을 짠다”는 말은 맞을까?
질문자의 표현은 절반은 맞고, 절반은 틀립니다.
- 맞는 부분:
PL/SQL 코드 내부에는 SQL 문이 포함됩니다. 예를 들어, 반복문 안에서SELECT
로 데이터를 가져오고UPDATE
로 수정하는 식이죠. - 틀린 부분:
PL/SQL 자체가 SQL을 “짓는” 도구는 아닙니다. PL/SQL은 SQL을 포장한 상위 레이어로, SQL을 더 효율적으로 활용하기 위한 프로그래밍 프레임워크라고 보는 게 정확합니다.
➔ 올바른 표현:
“PL/SQL 프로그램에서 Oracle 데이터베이스에 접근하기 위해 SQL을 사용한다.”
5. 세 기술의 관계를 한 문장으로 정리하면?
- Oracle은 데이터를 담는 저장소,
- SQL은 저장소에 명령을 내리는 기본 언어,
- PL/SQL은 Oracle 전용으로 SQL에 논리적 흐름을 더한 고급 도구입니다.
6. 실무에서 어떻게 구분해 사용할까?
🔍 SQL만 사용하는 경우
- 단순 데이터 조회/수정
- 일회성 작업 (예: 월간 리포트 생성)
SELECT * FROM orders WHERE order_date >= '2023-01-01';
🔧 PL/SQL이 필요한 경우
- 다단계 트랜잭션: 계좌 이체 시 출금과 입금을 동시 처리
- 대량 데이터 처리: 10만 행 데이터에 조건별로 다른 계산 적용
- 예약 작업: 매일 자정에 로그 정리
CREATE OR REPLACE PROCEDURE raise_salary (dept_id NUMBER) IS
BEGIN
FOR emp IN (SELECT * FROM employees WHERE department_id = dept_id)
LOOP
IF emp.salary < 6000 THEN
UPDATE employees SET salary = salary * 1.15 WHERE id = emp.id;
END IF;
END LOOP;
COMMIT;
END;
→ “특정 부서의 저소득 직원 급여 15% 인상” 프로시저
7. 흔한 오해 VS 사실
- 오해: “PL/SQL은 SQL과 완전히 다른 언어다.”
→ 사실: PL/SQL은 SQL을 확장한 언어. 모든 PL/SQL 코드 안에 SQL 문 포함 가능 - 오해: “Oracle만 SQL을 쓴다.”
→ 사실: SQL은 국제 표준. MySQL, PostgreSQL 등에서도 동일 문법 사용 - 오해: “PL/SQL로만 복잡한 작업이 가능하다.”
→ 사실: 간단한 작업은 SQL만으로도 충분. PL/SQL은 로직이 필요할 때만 사용
결론: “도구는 용도에 맞게”
Oracle은 데이터의 창고, SQL은 창고 관리자의 기본 기술, PL/SQL은 창고 운영을 자동화하는 스마트 시스템입니다. 이들을 구분하는 핵심은 목적에 있습니다.
- 초보자라면: SQL 마스터 → PL/SQL 탐색 → Oracle 환경 이해 순으로
- 실무 개발자라면: PL/SQL로 반복 작업 자동화해 업무 효율 200% 올리기
- 데이터 엔지니어라면: Oracle 아키텍처 이해로 성능 최적화에 집중
“기술 스택은 레고 블록과 같아요.
각 조각의 역할을 알면 무한한 조합이 가능해집니다.”