728x90

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 구성의 생산성과 유지보수성을 동시에 개선할 수 있습니다.
출처
- Oracle 공식 문서: https://docs.oracle.com/en/database/
- Oracle SQL and PL/SQL Handbook - John Adolph Palinski
- 실전 Oracle SQL 가이드 - 김상현 저
728x90
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] LOCK TABLE() 문법부터 예제까지 한눈에 이해하기 (0) | 2025.06.09 |
|---|---|
| [ORACLE] SYNONYM() 시노님 개념부터 생성 예제까지 완전 정복 (0) | 2025.06.09 |
| [ORACLE] SEQUENCE() 자동 증가 값 생성 원리와 실전 예제 완벽 정리 (0) | 2025.06.09 |
| [ORACLE] PROFILE() 비밀번호 정책과 로그인 제한을 한 번에 설정하는 법 (0) | 2025.06.08 |
| [ORACLE] ROLE() 실무 예제로 배우는 권한 관리의 핵심 기초 (0) | 2025.06.08 |