1. 개념 정의
View(뷰)
→ 하나 이상의 테이블로부터 생성된 가상의 테이블 개념
→ SELECT 문을 정의한 결과셋을 마치 물리 테이블처럼 사용할 수 있게 함
→ 데이터 중복 제거, 보안 제한, 복잡한 쿼리 캡슐화 등에 활용
→ 실제 데이터를 저장하지 않고, 정의된 SQL 문을 실행할 때마다 최신 데이터로 반영됨CTE(Common Table Expression)
→ 복잡한 쿼리를 임시적으로 단순화하기 위해 WITH 키워드를 사용하여 선언하는 일시적 결과셋
→ 쿼리 실행 시점에만 유효하며, 재사용 불가능한 일회성 가상 테이블 형태
→ 재귀 쿼리 구현, 쿼리 가독성 향상, 트리 구조 탐색 등에서 사용됨
2. View와 CTE의 구조 및 관리 방식 차이
구분 | View | CTE |
---|---|---|
선언 키워드 | CREATE VIEW | WITH |
저장 방식 | 데이터베이스 내 정의가 영구적으로 저장됨 | 실행 중인 쿼리 문맥에서 일시적으로 정의됨 |
재사용 여부 | 여러 쿼리에서 재사용 가능 | 같은 쿼리 내에서만 사용 가능 |
업데이트 가능성 | 특정 조건에서 DML 연산 가능 | 일반적으로 SELECT 전용 (읽기 전용 구조) |
보안 적용 가능 | 특정 열 또는 행만 노출하는 보안 View 설계 가능 | 보안 용도보다는 쿼리 최적화 및 논리 분리에 초점 |
재귀 지원 여부 | 일반적으로 재귀 쿼리 구현 어려움 | WITH RECURSIVE를 통해 재귀 구조 지원 가능 |
3. 활용 시기 구분
View 활용 시점
→ 반복적으로 사용하는 복잡한 SELECT 쿼리를 재사용하고자 할 때
→ 테이블의 구조를 캡슐화하여 외부에 추상화된 데이터 제공이 필요할 때
→ 보안상 민감한 테이블 일부 열만 외부에 노출하고자 할 때
→ BI 도구, 리포팅 툴, 응용시스템에서 일관된 쿼리 결과 제공이 필요할 때
→ 논리적 스키마 분리나 OLAP 환경에서 계층적 분석 구조 정의 시 유리함CTE 활용 시점
→ 하나의 쿼리 내에서 복잡한 하위 SELECT 또는 파생 테이블을 계층화할 때
→ 트리 구조(예: 조직도, 메뉴 구조) 탐색이나 경로 계산 등 재귀 쿼리가 필요한 경우
→ 쿼리 내에서 여러 단계의 결과를 나누어 표현하여 가독성을 높이고자 할 때
→ 파티션 윈도우 함수와 결합하여 집계와 조건 필터링을 구분할 때
→ 일시적 논리 테이블이 필요한 분석형 쿼리에서 효율적임
4. 실무 적용 사례 비교
View 적용 사례
- 예: 고객정보 테이블 중 이름, 연락처, 등급만을 포함하는
vip_customers_view
생성 - 대내외 협력 시스템 간 데이터 노출 범위 제어용 보안 View 활용
- 다수 사용자에게 동일한 분석용 쿼리 결과를 제공하기 위한 재사용 View 구성
- 예: 고객정보 테이블 중 이름, 연락처, 등급만을 포함하는
CTE 적용 사례
- 예: WITH RECURSIVE 문법을 이용한 상위-하위 관계 트리 구조 쿼리
- WITH절에서 중간 계산 결과를 정의하고 이후 메인 SELECT문에서 참조
- 시간대별 누적 합계, 이동 평균 등의 계산 로직을 단계적으로 분리 구현
5. 정리 및 결론
- View와 CTE 모두 복잡한 SQL 로직을 단순화하고 재사용성 또는 가독성을 확보하기 위한 수단
- View는 지속적 관리가 필요한 구조화된 쿼리의 저장에 적합하며, 보안 및 데이터 일관성 제공에 유리
- CTE는 일회성 쿼리 내 복잡한 로직을 분해하거나 재귀, 분석 쿼리 작성 시 효율적으로 사용
- 상황에 따라 두 개념을 혼용하여 복잡한 데이터 처리를 구조화할 수 있음
※ 추가 참고
- ANSI SQL 표준 기준으로 CTE와 View는 모두 쿼리 추상화를 제공하지만, 범위와 수명 주기가 본질적으로 상이
- 성능 측면에서는 View는 인덱스를 활용하거나 Materialized View로 확장 가능하나, CTE는 실행마다 반복 계산됨
- 따라서 목적, 범위, 유지관리 정책 등을 고려하여 적절한 방식 선택이 중요함
'IT Study > 데이터베이스 및 데이터 처리' 카테고리의 다른 글
🗂️ JSON 데이터를 효율적으로 처리하는 NoSQL 쿼리 구조 설계 (0) | 2025.04.18 |
---|---|
🗂️ B-Tree와 B+Tree 인덱스 구조 차이 및 활용 시나리오 (0) | 2025.04.17 |
🗂️ 트랜잭션 로그 구조와 장애 복구 시나리오 구성 (0) | 2025.04.15 |
🗂️ 쿼리 옵티마이저(Query Optimizer)의 작동 방식과 성능 영향 (0) | 2025.04.14 |
🗂️ 정형/비정형 데이터 통합을 위한 데이터 가상화 기술 (1) | 2025.04.13 |