반응형
MSSQL을 사용하다 보면 **View(뷰)**라는 개념을 자주 접하게 됩니다. 하지만 실제로 뷰를 얼마나 잘 활용하고 있을까요? 이 글에서는 뷰의 기본 개념부터 생성, 사용법, 장단점, 실무 팁까지 체계적으로 정리해 드리겠습니다.
뷰(View)란?
**뷰(View)**는 하나 이상의 테이블을 조합하여 만든 가상의 테이블입니다.
즉, 실제 데이터를 저장하고 있지는 않지만, SELECT 쿼리 결과를 테이블처럼 다룰 수 있도록 만들어주는 객체입니다. 뷰를 사용하면 복잡한 쿼리를 단순화할 수 있고, 데이터 접근을 제한할 수도 있습니다.
뷰 생성 방법
CREATE VIEW 뷰이름 AS
SELECT 컬럼1, 컬럼2, ...
FROM 테이블명
WHERE 조건;
예제
CREATE VIEW vw_ActiveUsers AS
SELECT user_id, username, last_login
FROM Users
WHERE is_active = 1;
이 뷰는 Users 테이블에서 활성화된 사용자만 보여줍니다.
뷰 사용 방법
뷰는 일반 테이블처럼 사용하면 됩니다.
SELECT * FROM vw_ActiveUsers;
-- 조인도 가능
SELECT u.username, o.order_date
FROM vw_ActiveUsers u
JOIN Orders o ON u.user_id = o.user_id;
뷰 업데이트 / 수정
기존 뷰를 수정할 때는 ALTER VIEW 또는 CREATE OR ALTER VIEW를 사용합니다.
ALTER VIEW vw_ActiveUsers AS
SELECT user_id, username, last_login, email
FROM Users
WHERE is_active = 1;
뷰 삭제
DROP VIEW vw_ActiveUsers;
뷰의 장점
1. 복잡한 쿼리의 재사용
- 복잡한 조인이나 조건문을 매번 쓰지 않고 뷰로 재사용 가능
2. 보안
- 민감한 컬럼을 숨기고 제한된 데이터만 보여줄 수 있음
3. 논리적 독립성 유지
- 테이블 구조가 변경돼도 뷰를 통해 기존 쿼리 유지 가능
4. 추상화
- 비즈니스 로직을 뷰에 감춰서 단순화된 인터페이스 제공
뷰의 주의사항 / 단점
- 성능 저하
복잡한 뷰(특히 뷰 안에 뷰가 중첩된 경우)는 성능에 영향을 줄 수 있습니다. - 데이터를 저장하지 않음
항상 원본 테이블에서 데이터를 읽기 때문에 성능 문제가 있을 수 있습니다. - 업데이트 제한
일반적으로 뷰를 통해 데이터를 수정할 수 있지만, 조인이나 그룹이 포함된 경우는 수정 불가합니다.
인덱싱된 뷰 (Indexed View)
기본적으로 뷰는 데이터를 저장하지 않지만, **인덱싱된 뷰 (또는 스키마 바인딩된 뷰)**는 예외입니다.
자주 사용되는 복잡한 뷰에 대해 인덱스를 생성하면 성능 향상에 도움이 됩니다.
-- 예: 인덱싱된 뷰 생성
CREATE VIEW vw_SalesSummary
WITH SCHEMABINDING AS
SELECT store_id, COUNT_BIG(*) AS sales_count
FROM dbo.Sales
GROUP BY store_id;
-- 클러스터형 인덱스 생성
CREATE UNIQUE CLUSTERED INDEX idx_SalesSummary
ON vw_SalesSummary (store_id);
실무 팁
- 뷰 이름은 보통 vw_로 시작 (vw_UserList, vw_SalesSummary)
- 뷰의 목적은 재사용성과 보안이지, 성능 향상은 아님 (인덱싱된 뷰는 예외)
- 뷰 안에서 또 다른 뷰를 호출하는 "뷰 안의 뷰"는 성능에 영향을 줄 수 있음
- 변경 가능한 뷰인지 확인하려면 INFORMATION_SCHEMA.VIEWS 또는 sys.sql_modules 활용
마무리
**뷰(View)**는 잘 활용하면 SQL 개발을 훨씬 더 모듈화, 구조화, 보안 강화할 수 있게 도와줍니다.
하지만 무분별한 사용은 오히려 성능 이슈나 유지보수 난이도를 높일 수 있으므로 적절한 설계와 사용 기준이 중요합니다.
반응형
'MS-SQL' 카테고리의 다른 글
| ODBC란 무엇인가? 데이터베이스 접근의 표준 인터페이스 (0) | 2025.12.04 |
|---|---|
| MSSQL 인덱싱된 뷰로 성능 최적화하는 방법 (1) | 2025.08.08 |
| 초보도 이해하는 MSSQL 트리거 사용법 (실무 예제 포함) (1) | 2025.07.24 |
| MS-SQL 연결된 서버(Linked Server) 설정방법 2 (0) | 2025.04.04 |
| MS-SQL 연결된 서버(Linked Server) 설정방법 (0) | 2025.04.04 |