뷰(View)의 핵심 포인트 10가지

사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된, 이름을 가지는 가상 테이블(Virtual Table)이다. 뷰는 저장장치 내에 물리적으로 존재하지 않지만 사용자에게 있는 것처럼 간주된다.
- 데이터 저장 여부 : Table은 실제 데이터를 저장하지만, View는 단지 뷰 정의(SELECT 문)만을 가지고 있다.
- 조회 대상으로 사용 : 뷰는 일반 테이블과 동일한 방식으로 SELECT 등 조회 대상으로 사용할 수 있다.
- 조회 결과를 테이블로 복제 : 뷰는 SELECT 결과를 제공하므로, 필요하면 그 결과를 CREATE TABLE AS SELECT(CTAS)로 물리 테이블로 복제해 사용할 수 있다(당연한 말이지만, 생성 시점의 SELECT 결과가 테이블 저장되므로 이후 변경은 자동 반영되지 않음).
- 뷰의 중첩 생성 : 이미 생성된 뷰를 기반으로 또 다른 뷰를 CREATE 할 수 있다.
- 리라이트(Rewrite)·가상 테이블·독립성 : 쿼리에 View가 포함되면 DBMS는 뷰 정의(SELECT 문)를 참조해 내부적으로 원본 테이블에 대한 쿼리처럼 변환(리라이트)한 뒤 실행한다. 그래서 View는 실제 데이터를 가지고 있지는 않지만 테이블처럼 조회 대상이 되므로 가상 테이블(Virtual Table) 이라고도 불리는 것이다. 이처럼 뷰는 테이블 구조 변경의 영향을 애플리케이션에서 일정 부분 분리할 수 있어 논리적 독립성을 제공한다.
- (Oracle 기준) 뷰의 정의는 변경할 수 없다(ALTER VIEW문을 사용할 수 없음). 필요하다면 CREATE OR REPLACE VIEW로 재정의하거나, 필요 시 DROP VIEW 후 재생성한다.
- 기본 테이블(또는 기반 뷰)의 스키마가 변경되거나 삭제되면 이를 참조하는 뷰는 유효하지 않게 되거나 조회 시 오류가 발생할 수 있으므로 의존성을 함께 점검해야 한다.
- 보안(노출 범위 제한) : 뷰를 통해서만 데이터에 접근하도록 설계하면 특정 컬럼/행을 노출에서 제외해 민감 데이터를 보호할 수 있다.
- 활용(캡슐화·재사용) : 뷰는 임시 분석이나 데이터 보정, 처리 과정 테스트뿐 아니라 복잡한 조인/집계 로직을 캡슐화해 재사용하는 용도로도 자주 활용된다.
- 성능 주의 : 뷰는 결과를 저장하지 않으므로, 복잡한 조인/집계가 포함된 뷰는 조회할 때마다 동일한 비용이 발생할 수 있다(필요 시 인덱스 설계 등 검토).
뷰를 사용하면서 얻을 수 있는 장점은 아래 표와 같다.
| 뷰의 장점 | 설명 |
| 독립성 | 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다. |
| 편리성 | 복잡한 질의를 뷰로 생성함으로써 관련 질의를 단순하게 작설할 수 있다. 또한 해당 형태의 SQL문을 자주 사용할 때 뷰를 이용하면 편리하게 사용할 수 있다. |
| 보안성 | 직원의 급여정보와 같이 숨기고 싶은 정보가 존재한다면, 뷰를 생성할 때 해당 칼럼을 빼고 생성함으로써 사용자에게 정보를 감출 수 있다. |
View 생성 / 삭제 SQL
- View 생성 : CREATE VIEW 뷰이름 AS 뷰로 만들 SELECT문;
- View 재정의(수정) : CREATE OR REPLACE VIEW 뷰이름 AS SELECT ... ;
- View 제거 : DROP VIEW 뷰이름;
※ Oracle의 DROP VIEW에는 RESTRICT/CASCADE 옵션이 없다.
※ 참고로 일부 DBMS에서는 RESTRICT(참조 중이면 삭제 취소), CASCADE(의존 객체까지 함께 삭제) 옵션을 제공한다.
반응형
'Database' 카테고리의 다른 글
| [Oracle] 윈도우 함수(WINDOW FUNCTION)/집계함수(AGGREGATE FUNCTION) (0) | 2020.09.23 |
|---|---|
| [Oracle] 그룹 함수(ROLLUP, CUBE, GROUPING SETS, GROUPING) 개념 정리 (0) | 2020.09.22 |
| [Oracle] IN, EXISTS, NOT IN, NOT EXISTS 특징 및 비교 (0) | 2020.09.18 |
| [Oracle] 서브쿼리(Sub Query) 사용법 & 예제 (0) | 2020.09.17 |
| [Oracle] 계층형 쿼리(Hierarchical Query) 개념 및 실행 순서 상세 정리 (0) | 2020.09.16 |