데이터베이스 뷰는 기본 테이블로부터 생성된 가상 테이블이다. 물리적으로 데이터를 저장하지는 않고, SQL 쿼리의 결과를 저장하는 객체이다.
장점으로는 복잡성이 감소되고 재사용성이 증가된다. 그리고 필요 데이터만 노출시킬 수 있으므로 보안이 강화되고 여러 테이블의 데이터를 하나로 결합해야할 경우 뷰를 이용하면 데이터 관리가 쉬워진다. 그래서 보통 복잡한 쿼리를 자주 사용할 때나, 민감한 데이터에 접근을 제한하고자 할 때 유용하게 사용할 수 있다.
단점으로는 기본 테이블의 데이터를 실시간으로 조회하기 때문에 복잡한 뷰나 대규모 데이터의 경우 성능 문제가 발생할 수 있다. 그리고 뷰를 통해 데이터를 직접 수정하는 것은 제약이 따르고, 기본테이블 구조가 변경되면 뷰도 수정이 필요할 수 있다.
🌟 추가 질문
📍 데이터베이스의 뷰도 엔티티로 만들어서 스프링 JPA에서 사용이 가능한가?
사용이 가능하다. 다만, 뷰는 읽기 전용이기 때문에 JPA에서 생성된 엔티티도 일반적으로 읽기 전용으로 처리된다.
JPA 엔티티 생성 예시
@Entity
@Immutable // Hibernate의 읽기 전용 엔티티임을 명시
@Table(name = "product_summary") // 뷰의 이름을 매핑
public class ProductSummary {
@Id
private Long id;
private String name;
}
@Immutable 어노테이션을 사용하면 이 엔티티가 변경 불가능하다는 것을 명시할 수 있다. (Insert, Update, Delete 쿼리 실행 불가)
이후 다른 엔티티와 마찬가지로 JpaRepository를 생성해서 연결해주면 사용이 가능하다.