View 란 ? (거울)
- 실시간으로 원본 테이블을 바라보는 가상의 창
- 데이터 저장 개념이 아님
- 데이터 변경 시 바로 적용
- 빠르게 만들 수 있지만 조회 성능이 떨어짐
Snapshot (Materialized View) 란 ? (사진)
- 조회 결과를 저장하여 가져다 씀
- 특정 시점 데이터를 보관함
- 필요할 때 리프레시 가능 (수동 또는 커밋 발생 시마다)
둘의 차이 ?
- 가상과 실제 저장이라는 차이 존재
- 그로 인해 성능 차이 또한 존재
| 항목 | View (가상 뷰) | Snapshot (물리적 뷰, Materialized View) |
|---|---|---|
| 저장 방식 | ❌ 없음 (가상 테이블) | ✅ 있음 (쿼리 결과를 실제 저장) |
| 데이터 최신성 | 항상 최신 | Refresh 시점 기준 (실시간 아님) |
| 조회 성능 | ⚠️ 느릴 수 있음 (매번 쿼리 실행) | ✅ 빠름 (캐싱 효과) |
| 갱신 방식 | ❌ 없음 | ✅ 자동/수동 설정 가능 (ON COMMIT, ON DEMAND) |
| 사용 목적 | 실시간 데이터 조회용 | 리포트, 분석, 반복 조회, 분산 동기화 등 |
| 저장 공간 사용 | ❌ 없음 | ✅ 있음 |
| 사용 예시 | 대시보드 실시간 상태, 단순 필터링 | 일별 매출 리포트, 대량 조회, 통계 분석 등 |
실무 상황
고객사가 저장 공간의 제약으로 스냅샷 대신 view 를 써야한다라는 요청
-> 개발팀은 view 를 사용하게 될 경우 성능을 보장 할 수 없다로 답변
- 스냅샷은 실제 저장을 하기 떄문에 저장 공간이 필요합니다
- view는 실제 데이터가 저장된 걸 불러 오는게 아닌 사실상 SELECT 문과 다를바가 없기 떄문에 성능이 SELECT 문 정도의 속도 또는 그 이하로 나옵니다
즉 대시보드 같은 데이터가 많고 발표 자료 같이 한번 저장해놓으면 계속 쓰는 형태의 데이터는 스냅샷을 통해 보여주고
실시간 검색어 같은 실시간으로 변화가 많은 데이터는 View를 통해 보여줍니다
기술면접 예시
- View와 Snapshot의 차이점은?
- Materialized View에서 Refresh 방식에는 어떤 것들이 있는가?
- View는 왜 DML(Insert/Update)이 제한될 수 있는가?
- View의 성능 문제를 어떻게 해결할 수 있을까?
'SQL(oracle)' 카테고리의 다른 글
| [Oracle SQL] Index 란? (ft. 뭐든 과하면 독이다) (0) | 2025.10.06 |
|---|---|
| [Oracle SQL] 가로 세로 Pivot ? (ft. 돌려 돌려 돌림판) (0) | 2025.09.17 |
| [Oracle] inner ? outer ? + ? (0) | 2025.09.10 |
| SQL의 문자열 함수 (2) | 2024.03.06 |
| SQL의 숫자 함수 (0) | 2024.03.05 |