이번에는 가상 테이블인 View에 대해 정리해 보겠습니다.
View란?
View란 하나 이상의 테이블이나 뷰로 만들어지는 '가상 테이블' 입니다.
View는 아래와 같은 쿼리로 생성할 수 있습니다.
CREATE VIEW 뷰 이름 AS SELECT 컬럼명 FROM 테이블명 [WHERE 조건];
CREATE VIEW MEMBER_INFO AS SELECT NAME, EMAIL FROM MEMBER;
뷰는 하나의 SELECT 문과 같다고 생각할 수 있습니다.
원하는 필드를 선택할 수 있어 전체 데이터 중에서 보여주고 싶은 것만 보여줄 수 있습니다.
테이블은 디스크 공간이 할당되어 데이터를 저장하지만, 뷰는 데이터 딕셔너리 테이블에 뷰에 대한 정의만 저장하고 디스크에 공간이 할당되지 않습니다. 그래서 가상 테이블입니다.
물리적인 테이블을 근거한 논리적인 테이블이라 말할 수 있습니다.
View의 특징
- 전체 정보가 아니라 제한된 정보만을 제공하여 제공하고 싶지 않은 정보는 숨길 수 있다.
- 복잡한 쿼리문의 결과를 저장하여 사용자가 편하게 사용할 수 있다.
- 뷰는 다른 뷰의 참고가 될 수 있다.
- 뷰의 정의는 변경할 수 없다.
View를 사용하는 이유
- 자주 쓰는 쿼리문을 안쓰고 View만 조회하면 되서 편리하다.
- 사용자가 볼 수 있는 데이터를 제한함으로써 보안에 유리하다.
- 테이블의 자료를 추가하면 뷰에도 자료가 추가된다.
- 다만, 뷰에 자료를 추가하는 것은 실제 테이블에 반영되지 않는다.
View의 장점
- DB의 선택적인 부분만 보여주어 접근을 제한할 수 있다.
- 다양한 접근 경로를 설정할 수 있다.
- 복잡한 쿼리문을 단순화할 수 있다.
- 데이터의 독립성을 제공할 수 있다.
- 동일한 데이터를 다른 뷰로 표현할 수 있다.
- 한 개의 뷰에 여러 테이블의 데이터를 검색할 수 있다.
- 한 개의 테이블로 여러 뷰를 생성할 수 있다.
View의 단점
- 독립적인 인덱스를 가질 수 없다.
- 뷰의 정의를 변경할 수 없다. (ALTER VIEW 사용 불가)
- 복잡한 뷰는 성능 저하를 일으킬 수 있다. (뷰로 뷰를 계속 만들 경우)
- insert, delete, update에 많은 제약이 있다.
주의 사항
복합 뷰(Nested View)를 최소화해라
하나의 뷰 안에 또 다른 뷰와 내부에 있는 다른 뷰를 계속해서 중첩하다보면 심각한 성능 저하를 유발할 수 있습니다. 너무 많은 수의 복합 뷰는 모든 쿼리에 대해 엄청난 양의 데이터가 반환되는 결과를 초래해서 느려지게 만듭니다.
마무리
이번에는 뷰를 정리했습니다.
뷰는 하나 이상의 테이블과 뷰로 생성하는 가상 테이블입니다.
여러 테이블에 걸쳐 원하는 정보를 제공하고 복잡한 쿼리 대신 뷰를 조회하게 하여 개발자가 편하게 사용하고 원하는 정보만 보여줄 수 있어 보안에 유리하다는 장점이 있습니다.
다만, 한 번 생성된 뷰의 정의는 바뀌지 않고 복합 뷰로 인해 성능이 저하되는 단점이 있습니다.
장점과 단점을 인지하고 활용하면 개발자에게 도움이 될 거 같습니다.
감사합니다.