[Oracle SQL] View vs Snapshot (Materialized View) 차이

View 란 ? (거울)

  • 실시간으로 원본 테이블을 바라보는 가상의 창
  • 데이터 저장 개념이 아님
  • 데이터 변경 시 바로 적용
  • 빠르게 만들 수 있지만 조회 성능이 떨어짐

Snapshot (Materialized View) 란 ? (사진)

  • 조회 결과를 저장하여 가져다 씀
  • 특정 시점 데이터를 보관함
  • 필요할 때 리프레시 가능 (수동 또는 커밋 발생 시마다)

둘의 차이 ?

  • 가상과 실제 저장이라는 차이 존재
  • 그로 인해 성능 차이 또한 존재
항목 View (가상 뷰) Snapshot (물리적 뷰, Materialized View)
저장 방식 ❌ 없음 (가상 테이블) ✅ 있음 (쿼리 결과를 실제 저장)
데이터 최신성 항상 최신 Refresh 시점 기준 (실시간 아님)
조회 성능 ⚠️ 느릴 수 있음 (매번 쿼리 실행) ✅ 빠름 (캐싱 효과)
갱신 방식 ❌ 없음 ✅ 자동/수동 설정 가능 (ON COMMIT, ON DEMAND)
사용 목적 실시간 데이터 조회용 리포트, 분석, 반복 조회, 분산 동기화 등
저장 공간 사용 ❌ 없음 ✅ 있음
사용 예시 대시보드 실시간 상태, 단순 필터링 일별 매출 리포트, 대량 조회, 통계 분석 등

실무 상황

고객사가 저장 공간의 제약으로 스냅샷 대신 view 를 써야한다라는 요청
-> 개발팀은 view 를 사용하게 될 경우 성능을 보장 할 수 없다로 답변

  1. 스냅샷은 실제 저장을 하기 떄문에 저장 공간이 필요합니다
  2. view는 실제 데이터가 저장된 걸 불러 오는게 아닌 사실상 SELECT 문과 다를바가 없기 떄문에 성능이 SELECT 문 정도의 속도 또는 그 이하로 나옵니다

즉 대시보드 같은 데이터가 많고 발표 자료 같이 한번 저장해놓으면 계속 쓰는 형태의 데이터는 스냅샷을 통해 보여주고
실시간 검색어 같은 실시간으로 변화가 많은 데이터는 View를 통해 보여줍니다

기술면접 예시

  1. View와 Snapshot의 차이점은?
  2. Materialized View에서 Refresh 방식에는 어떤 것들이 있는가?
  3. View는 왜 DML(Insert/Update)이 제한될 수 있는가?
  4. View의 성능 문제를 어떻게 해결할 수 있을까?