뷰(VIEW) 는 무엇인가? Employees 예제를 이용한 VIEW 이해하기
뷰(VIEW)란?
뷰는 사용자에게 접근이 허용된 자료만을 제한적 으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된, 이름을 가지는 가상 테이블 이다.
간단한 예시(employees)를 통해 이해를 돕도록 하겠습니다.
SELECT * FROM employees;
다음과 같은 테이블에서 사용자에게 employees의 이름(first_name) 과 성(last_name) 그리고 성별(gender) 만을 제공하고 싶습니다.
하지만 원치 않게도 생일(birth_date) 과 입사일(hire_date) 까지도 노출하게 됩니다.
(만약, 생일이 주민등록번호라면 공개하면 안되는 것과도 같죠.)
보안상 문제가 생길 수 있는데 이를 해결 하기 위한 방법이 뷰(VIEW) 입니다.
백문이 불여일견 바로 뷰를 사용해서 원하는 데이터만을 제공해 보도록 하겠습니다.
CREATE VIEW view_employees AS SELECT first_name,last_name,gender FROM employees;
* CREATE VIEW 뷰이름(사용자정의) AS SELECT 원하는 컬럼 FROM 가져올테이블;
6번째 줄의
select * from view_employees;
를 통하여 마치 새로운 테이블이 생성된 것 처럼 보입니다.
하지만 이는 새로운 테이블이 생성된 것이 아닙니다.
그저 보여주기 위한 가상의 테이블 일 뿐이죠!
사실은 view_employees를 SELECT 문으로 실행했을 때, 4번째 줄의
CREATE VIEW view_employees AS SELECT first_name,last_name,gender FROM employees;
명령문을 실행했을 뿐이니까요!
이 실행을 통해 우리는 알 수 있는 것이 있습니다.
뷰는 가상의 테이블이다!
그리고 뷰는 원하는 데이터만 보여주고 다른 데이터들은 안전하게 보호할 수 있다.
한번의 실습으로 이것만큼은 기억하기 쉽겠죠?! (난 붕어라 기억 잘 못함..)
하지만 이 외에도 많은 뷰의 특징들이 있습니다.
뷰(VIEW)의 특징
- 뷰는 데이터의 논리적 독립성을 제공할 수 있다.
- 뷰는 가상 테이블이기 때문에 물리적으로 구현되어 있지 않다.
- 필요한 데이터만 뷰로 정의해서 처리할 수 있기 때문에 관리가 용이하다.
- 뷰에 나타나지 않은 데이터를 안전하게 보호할 수 있다.
- 정의된 뷰는 다른 뷰의 정의에 기초가 될 수 있다.
- 뷰가 정의된 기본 테이블이나 뷰를 삭제하면 그 테이블이나 뷰를 기초로 정의된 다른 뷰도 자동으로 삭제 된다.
뷰(VIEW)의 장점
- 논리적 데이터 독립성 제공
- 동일 데이터에 대해 동시에 여러사용자의 상이한 응용이나 요구를 지원
- 사용자의 데이터 관리를 간단하게 해준다.
- 접근 제어를 통한 자동 보안이 제공
뷰(VIEW)의 단점
- 독립적 인덱스를 가질 수 없다
- ALTER VIEW문을 사용할 수 없다. ( 뷰의 정의를 변경할 수 없다.)
- 뷰로 구성된 내용에 대한 삽입,삭제,갱신,연산에 제약이 따른다.
이처럼 뷰(VIEW) 를 사용하는 가장 큰 이유는 복잡한 쿼리문을 단순화 해서 원하는 결과만 쉽게 조회 할 수 있고,
원치 않는 데이터에 대해서 감출 수 있기 때문에 보안에 유리하다 라는 장점이 있습니다.
마지막으로 테스트가 끝났다면, 뷰도 삭제해주세요 ^-^!
DROP VIEW 뷰이름;
DROP VIEW view_employees;