DB

[DB] 뷰(View) 란?

bill's tech log 2024. 5. 9. 00:25

뷰(view) 란?

뷰(view)는 데이터베이스 작업 시 기본 테이블에서 유도된 가상 테이블이다. 뷰 테이블 (view table)이라고도 한다. 뷰는 사용자에게 접근이 허용된 데이터만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도되며, 저장장치 내에 물리적으로 존재하지 않지만 사용자에게 있는 것처럼 간주되고 데이터 보정작업, 처리과정 시험 등 임시적인 작업을 위한 용도로 활용된다. 뷰는 조인문의 사용 최소화로 사용상의 편의성을 최대화한다.

 

데이터베이스에서 뷰(view)는 위와 같은 사전적인 의미를 갖는다. 위의 내용을 요약하면 아래와 같다.

  • 데이터베이스에 존재하는 일종의 가상 테이블
  • 실제 데이터베이스에 데이터를 적재하지 않음
  • 실제 존재하는 테이블처럼 보임

 

뷰(view)의 주요 이점 중 하나는 데이터 보안이다. 뷰(view)를 사용하면 사용자에게 필요한 데이터만 노출시킬 수 있으며, 민감한 정보를 보호할 수 있다. 또한 복잡한 JOIN 연산에 대한 결과 값을 미리 생성해 복잡한 연산을 피할 수 있다.( 두 가지 예시에 대해서는 아래에 설명하겠다.) 

 

 

뷰(view) 관련 쿼리(Query)

뷰(view)를 생성하는 SQL 문법은 데이터베이스 문법은 아래와 같다.

 

  • 뷰(view) 생성 
CREATE 생략가능[OR REPLACE] 생략가능[FORCE | NOFORCE] VIEW 뷰명
AS (SELECT문)
생략가능[WITH CHECK OPTION 생략가능[CONSTRAINT 제약조건명]]
생략가능[WITH READ ONLY 생략가능[CONSTRAINT 제약조건명]]

 

  • 뷰(view) 삭제
DROP VIEW VIEWNAME [RESTRICT] or [CASCADE]

 

예시1) 

Salary Table
Salary Table Value

 

위는 Salary라는 급여정보를 저장하는 예시 테이블이다. 여기서 뷰(view)를 사용해서 role의 값이 관리자(admin)가 아닌 고용인(employee)에 해당하는 정보만 표시할 수 있는 가상의 뷰(view) 테이블을 생성할 수 있다. 

 

CREATE VIEW SalaryView AS
    SELECT id, employee_name, salary FROM salary WHERE role = 'employee';

 

 

위와 같이 뷰(view)를 생성하는 SQL 문을 삽입 했을 때, 아래와 같이 데이터베이스 내에 views라는 가상의 테이블 폴더와 위 조건에 부합하는(role = 'employee')인 유저들만 표기되는 별도의 가상 테이블이 생성된 것을 확인할 수 있다. 

 

 

 

 

이렇게 뷰(view)를 사용하면 위 예시와 같이, 특정 사용자에게 특정 열만 보이도록 허용하거나, 특정 행만 보이도록 제한할 수 있다. 이렇게 함으로써 접근 제어를 통한 보안을 높일 수 있다.

 

예시 2)

 

Salary & Department Relation
Department Data Value

 

Salary Data Value

 

 

위는 간단한 예시로 Salary라는 급여정보 테이블과 Department라는 부서 테이블을 나타낸다. 급여정보 테이블이 부서 테이블을 참조하고 있다.  여기서 두 테이블을 한 번에 조회하기 위해서는 일반적으로 두 개의 테이블을 JOIN 해야된다. 이러한 조인(JOIN)을 뷰(view)로 정의하고 나면, 필요한 경우 두 테이블을 매번 조인할 필요 없이 뷰를 사용하여 직접 쿼리 할 수 있다.

 

CREATE VIEW EmployeeDepartmentView AS
SELECT s.id, s.employee_name, s.salary, d.department_name
FROM salary s
JOIN department d ON s.department_id = d.id;

 

 

 

SELECT * FROM EmployeeDepartmentView;

 

 

위와 같이 뷰(view)로 미리 JOIN 테이블을 만들어 두면, 이후에 JOIN 된 테이블에 접근할 때, 훨씬 빠르게 접근할 수 있고 복잡한 연산을 줄일 수 있는 장점이 있다. 

 

 

 

뷰(view)의 단점

위 예시에서 설명했듯이 뷰(view)를 사용했을 때, 가저갈 수 있는 다양한 이점이 있다. 하지만 이와 반대로 단점도 존재한다. 

 

  • 뷰(view)로 생성된 테이블은 UNION, GROUP BY 등을 사용하는 복합 뷰(view)인 경우에 단순 조회가 아닌 INSERT, UPDATE, DELETE 구문이 불가능
  • 뷰(view)를 남발해서 생성한 테이블로 서비스를 구성한다면 서비스가 가상 테이블인 뷰(view)에 의존적일 수 있음. 
  • 독립적인 INDEX 사용불가

위와 같은 단점도 존재하기 때문에, 실 서비스에서 적절한 테이블에 뷰(view)를 생성해서 사용하는 게 바람직하다. 

 

 

참고

 

[Oracle] 오라클 뷰(View) 사용법 총정리 (생성,조회,수정,삭제)

뷰(View)란 무엇인가? 뷰(View)는 하나 이상의 테이블이나 다른 뷰의 데이터를 볼 수 있게 하는 데이터베이스 객체입니다. 실제 데이터는 뷰를 구성하는 테이블에 담겨 있지만 마치 테이블처럼 사

coding-factory.tistory.com

 

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

 

VIEW (SQL) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 뷰(view)는 관계 데이터베이스의 데이터베이스 언어 SQL에서 하나 이상의 테이블 (또는 다른 뷰)에서 원하는 모든 데이터를 선택하여, 그들을 사용자 정의하여 나

ko.wikipedia.org