본문 바로가기
Database/Oracle

[ORACLE] VIEW() 가상 테이블로 복잡한 SQL을 단순하게 만드는 방법

by Papa Martino V 2025. 6. 9.
728x90

오라클 VIEW() 가상 테이블로 복잡한 SQL을 단순하게 만드는 방법
[Oracle] VIEW

 

1. VIEW란 무엇인가?

VIEW는 하나 이상의 테이블에서 가져온 데이터를 조합하여 만든 가상 테이블입니다. 실질적인 데이터를 저장하지 않으며, SELECT 문을 저장하여 반복적인 복잡한 쿼리를 단순화하는 데 유용합니다.

2. VIEW를 사용하는 이유

  • 복잡한 SQL 로직을 단순화
  • 보안 목적의 데이터 제한
  • 애플리케이션 독립적인 데이터 인터페이스 제공
  • 유지보수 효율성 향상

3. 기본 VIEW 생성 문법

CREATE [OR REPLACE] VIEW 뷰이름 AS
SELECT 문;

예시:

CREATE VIEW emp_view AS
SELECT employee_id, first_name, department_id
FROM employees;

employees 테이블의 일부 칼럼만을 포함한 emp_view라는 뷰를 생성합니다.

4. VIEW 조회 예제

SELECT * FROM emp_view;

뷰를 실제 테이블처럼 SELECT 할 수 있습니다.

5. VIEW 갱신 가능 여부

Oracle에서는 뷰가 특정 조건을 만족하면 직접 데이터를 수정할 수 있습니다. 이를 업데이트 가능한 VIEW라고 합니다.

  • 단일 테이블 기반
  • 집계 함수(AVG, SUM 등) 사용 금지
  • GROUP BY, DISTINCT, CONNECT BY 등 사용 금지

6. 뷰를 통한 데이터 수정 예제

UPDATE emp_view
SET department_id = 90
WHERE employee_id = 101;

emp_view를 통해 실제 employees 테이블의 데이터가 수정됩니다.

7. WITH CHECK OPTION 예제

CREATE OR REPLACE VIEW sales_dept_view AS
SELECT * FROM employees
WHERE department_id = 80
WITH CHECK OPTION;

뷰의 조건을 위반하는 DML은 거부됩니다. 예: 다른 부서로 변경 불가

8. READ ONLY 옵션 예제

CREATE OR REPLACE VIEW emp_readonly_view AS
SELECT * FROM employees
WITH READ ONLY;

데이터 조회만 가능하며, INSERT/UPDATE/DELETE는 차단됩니다.

9. 복합 VIEW 예제

CREATE OR REPLACE VIEW dept_summary_view AS
SELECT d.department_name, COUNT(e.employee_id) AS emp_count
FROM departments d
JOIN employees e ON d.department_id = e.department_id
GROUP BY d.department_name;

부서별 직원 수를 요약하는 뷰입니다.

10. VIEW 삭제

DROP VIEW emp_view;

뷰는 DROP 명령어로 쉽게 삭제할 수 있습니다.

11. VIEW 관련 시스템 뷰

  • USER_VIEWS: 현재 사용자가 만든 뷰 목록
  • ALL_VIEWS: 권한이 있는 모든 뷰
  • DBA_VIEWS: DB 전체의 뷰 정보 (DBA 전용)

12. 실무에서의 VIEW 활용 전략

  • 복잡한 조인 결과를 뷰로 만들어 애플리케이션 쿼리 단순화
  • 보안 목적으로 민감한 데이터를 제외한 뷰 생성
  • 공통 조회 쿼리를 뷰로 생성하여 개발 일관성 확보
  • 보고서나 대시보드에 필요한 통계 집계를 뷰로 구성

13. VIEW 사용 시 주의사항

  • 실제 데이터가 저장되지 않기 때문에 성능은 기본 테이블과 동일
  • 복잡한 뷰는 성능 병목을 유발할 수 있음
  • 다단계 뷰(Nested View)는 유지보수와 디버깅이 어려움

14. 결론

Oracle VIEW는 단순한 가상 테이블 이상의 역할을 합니다. 복잡한 SQL을 추상화하고, 데이터 보안과 일관된 접근 방식을 제공함으로써 개발 및 운영의 효율성을 높여줍니다. VIEW를 적극적으로 활용하면 SQL 구성의 생산성과 유지보수성을 동시에 개선할 수 있습니다.

출처

728x90