뷰(View)와 테이블의 차이 – 언제 뷰를 쓰고 언제 테이블을 써야 할까?
SQL을 처음 배우거나 실무에서 활용할 때 자주 혼동되는 개념 중 하나가 뷰(View)와 테이블(Table)의 차이입니다. 두 객체 모두 SELECT 쿼리를 통해 데이터를 가져올 수 있지만, 동작 방식과 사용 목적에는 분명한 차이가 있습니다. 이 글에서는 뷰와 테이블의 기본 개념과 차이점, 그리고 언제 각각을 사용하면 좋은지를 설명합니다.
테이블(Table)의 개념
테이블은 데이터베이스에 실제 데이터를 저장하는 기본적인 객체입니다. 모든 데이터는 테이블에 물리적으로 저장되며, SELECT, INSERT, UPDATE, DELETE와 같은 SQL 명령을 통해 데이터를 조작할 수 있습니다.
예시:
CREATE TABLE employee (
emp_id NUMBER PRIMARY KEY,
emp_name VARCHAR2(100),
dept_id NUMBER,
salary NUMBER
);
이 테이블은 직원 정보를 저장하는 실제 데이터 저장소입니다.
뷰(View)의 개념
뷰는 하나 이상의 테이블을 기반으로 한 SELECT 쿼리 결과를 저장한 논리적 객체입니다. 뷰는 물리적으로 데이터를 저장하지 않고, SELECT 쿼리가 실행될 때마다 참조된 테이블에서 데이터를 가져옵니다. 즉, 뷰는 일종의 가상 테이블입니다.
예시:
CREATE VIEW high_salary_emp AS
SELECT emp_id, emp_name, salary
FROM employee
WHERE salary > 5000;
이 뷰는 salary가 5000 이상인 직원만 필터링해 보여주는 가상 테이블입니다.
뷰와 테이블의 주요 차이점
구분 | 테이블 | 뷰 |
---|---|---|
데이터 저장 | 실제 데이터를 저장함 | 데이터는 저장하지 않음 |
성능 | 직접 접근하므로 빠름 | 쿼리 실행 시 원본 테이블 접근 |
갱신 | INSERT/UPDATE/DELETE 가능 | 제한적으로 가능 |
목적 | 데이터 저장 및 관리 | 특정 쿼리 결과 재사용 목적 |
뷰는 특정 조건을 반복해서 조회할 때 유용하며, 복잡한 조인을 단순화하거나 민감 정보를 숨기는 데도 사용됩니다.
뷰는 언제 사용하면 좋을까?
- 자주 사용하는 SELECT 쿼리를 재사용할 필요가 있을 때
- 복잡한 조인이나 필터 조건을 단순화하고 싶을 때
- 특정 테이블의 일부만 사용자에게 보여주고 싶을 때
- 보안이나 권한 관리를 위해 민감 정보를 숨길 필요가 있을 때
예를 들어 외부 사용자에게 salary 컬럼을 숨기고 싶다면 다음과 같이 뷰를 생성할 수 있습니다.
CREATE VIEW public_employee AS
SELECT emp_id, emp_name, dept_id
FROM employee;
테이블이 필요한 상황은?
- 데이터를 물리적으로 저장해야 할 때
- DML(INSERT, UPDATE, DELETE)을 빈번히 수행해야 할 때
- 기본적인 데이터베이스 구조를 설계할 때
실무 팁
- 뷰를 너무 많이 계층적으로 중첩해서 만들면 오히려 성능 저하의 원인이 될 수 있습니다.
- 단순한 필터링 뷰라면 성능에 큰 영향을 주지 않지만, 여러 테이블의 조인을 포함한 복잡한 뷰는 실행 계획을 꼭 확인하는 것이 좋습니다.
- 자주 갱신되는 데이터를 대상으로 하는 경우 뷰보다는 임시 테이블 또는 머티리얼라이즈드 뷰(Materialized View)를 고려하는 것이 좋습니다.
뷰는 테이블과는 다르게 데이터 저장 목적이 아닌 가공과 재사용 목적으로 사용된다는 점이 가장 큰 차이입니다. SQL을 효율적으로 사용하기 위해서는 이 차이를 정확히 이해하고, 상황에 맞는 선택을 하는 것이 중요합니다.
#SQL #테이블 #뷰 #SQL기초 #가상테이블 #데이터베이스기초
'SQL 기초 정리' 카테고리의 다른 글
SQL에서 문자열 비교와 대소문자 구분 – LIKE, =, ILIKE의 차이점 (0) | 2025.04.16 |
---|---|
SQL 연산자 총정리 – 산술, 비교, 논리, 문자열 연산자 한눈에 보기 (0) | 2025.04.14 |
ORDER BY의 숨겨진 비용 – 정렬은 왜 성능을 떨어뜨릴까? (0) | 2025.04.13 |
IN 절 vs EXISTS 절 – 조건은 같아도 성능은 다르다 (0) | 2025.04.12 |
LIKE 연산자의 와일드카드(%, _) 정확히 알고 쓰기 (0) | 2025.04.12 |