안녕하세요. SQLER의 코난 김대우입니다.
이번 강좌에서는, 7-10. 인덱싱된 뷰(Indexed View)를 진행 하겠습니다.
SQLER에서 진행되는, 챗GPT와 함께 배우는 SQL Server 강좌 목록
이번에 진행할 강좌는 실무에서 뷰 사용입니다.
TL;DR
뷰(View)와 저장 프로시저(Stored Procedure) 실무 활용성을 논의합니다. 데이터베이스 사용자 페르소나에 맞는 데이터 제공의 중요성, 뷰와 저장 프로시저를 활용한 효과적인 데이터 제공 방법을 다룹니다.
데이터베이스 사용자 페르소나의 진화
데이터베이스 관리자, 데이터베이스 개발자로 데이터베이스 사용자 페르소나가 분류되던 시기가 지나, 인공지능 딥러닝의 시대에 다양한 데이터 소비 패턴이 등장합니다. 더 빠르고 정확한 인사이트를 데이터로부터 얻기 위해 비즈니스 의사결정권자, 데이터를 머신러닝 트레이닝에 사용하기 위해 분석하는 데이터 과학자, 백엔드 애플리케이션 개발자 등 페르소나에 따라 다양한 데이터 소비 요구가 존재합니다.
페르소나에 적합한 데이터 제공
데이터 적재 패턴 역시 진화합니다. DBMS의 성능과 기능이 향상되면서, 데이터를 관리하기 위한 다양한 기능과 패턴이 생겨납니다. 단순 데이터를 기록하는 시스템에서, 데이터 감사 기능과 데이터에 대한 메타데이터 역시 함께 기록하고 관리하게 됩니다. 심지어는 동시에 통계 목적의 집계 데이터를 실시간으로 기록하기도 하고, PII(Personal Identifiable Information - 개인 식별 정보) 보호와 같은 법제도에 맞춰 개인 정보 보호를 위한 다양한 장치도 마련해야 합니다.
☑️ 챗GPT 활용: 개인 식별 정보(PII)에 대해서 알려줘
하나의 테이블이지만, 페르소나에 맞춰 보여줄 데이터와 그렇지 못한 데이터로 극명하게 나뉘게 되고, 데이터에 대한 보안성 요구가 높아집니다. 네, 반드시 페르소나 맞춤 데이터가 제공되어야 합니다.
개발과 데이터를 분리 - 테이블, 뷰, 저장 프로시저
강좌에서 몇 번 소개해 드린 것처럼, 개발 로직과 데이터베이스의 데이터를 논리적으로 분리하기 위한 장치를 거의 모든 DBMS가 제공합니다. 대표적인 장치가 저장 프로시저(Stored Procedure)와 뷰(View)입니다.
저장프로시저
다음 강좌로 진행되는 저장 프로시저는 프로그래밍의 함수처럼 동작하는 완전히 캡슐화된 모듈입니다. 저장 프로시저 이름과 파라미터를 제공하면, 결과셋이 출력되는 완전한 모듈화와 캡슐화를 제공합니다. 어느 정도 규모 있는 현업 개발팀에서 가장 많이 사용되고, 잘 구성된 DBMS는 100% 저장 프로시저로만 데이터를 제공합니다.
데이터베이스 개발자가 저장 프로시저를 생성하면, 애플리케이션 개발자는 테이블 구조나 제약 등에 상관없이, 저장 프로시저를 호출하면 원하는 결과를 얻습니다. 저장 프로시저 실행 권한을 개별 사용자에게 부여해 애플리케이션에 맞는 사용자 대상 실행권한을 부여할 수 있어 보안성도 높습니다.
DBMS의 스키마 구조나 테이블과 같은 Raw 데이터 제공 없이 보안성과 모듈화, 캡슐화 가능한 장치가 저장 프로시저입니다. 저장 프로시저 코드는 데이터베이스 개발자가 직접 작성하기 때문에, 인덱스나 잠금과 같은 데이터베이스 성능 팩터를 고려해 개발됩니다. 즉, 저장 프로시저로 최적의 성능을 제공할 수 있습니다. 하지만, 저장 프로시저 작성에 시간이 소요될 수 있고, 저장 프로시저 작성에 기술적 난이도가 있습니다.
뷰
뷰는 저장 프로시저와 테이블의 중간단계입니다. 지난 강좌에서 확인한 것처럼, 테이블을 반영하는 거울인 뷰는 페르소나에 맞춰 테이블의 일부 또는 집계된 정보를 제공할 수 있습니다. 뷰 자체 권한을 제공 가능해 사용자나 역할에 맞춰 권한을 부여, 높은 보안성을 제공할 수 있습니다.
애플리케이션 개발자가 뷰를 이용해 개발할 경우, 필요한 데이터만 초점을 맞출 수 있습니다.
데이터 소비자는 뷰를 활용해 자유롭게 쿼리를 작성할 수 있습니다. 하지만, 자유로운 쿼리 작성은 다른 의미로, 데이터베이스 개발자가 생성한 인덱스를 잘 타지 못해 성능 저하를 유발하거나 잠금을 유발해 DBMS에 전반적인 성능 저하를 발생시킬 수도 있습니다.
뷰 쓰지 말라는 건가요?
지난 SQLER의 강좌를 통해 뷰에 대해서 깊이 있게 살펴보셨습니다. 직접 뷰를 생성하고 사용해 보신 것처럼, 뷰는 훌륭한 데이터베이스 개체로 다양한 문제들을 해결합니다.
개발 효율을 위해 테이블에 직접 쿼리 할지, 뷰를 이용해 제공할지, 저장 프로시저를 이용해 모듈화 할지 여부는 우리들 개발자의 선택입니다. 알고 사용하는 것과 모르고 사용하는 것은 전혀 다릅니다. 뷰 강좌에 이렇게 긴 시간을 할애하는 만큼, 현업에서 뷰는 대단히 많이 사용됩니다. 기술한 뷰의 장점들을 잘 활용하고 단점들을 보완해 잘 사용하시길 바랍니다.
SQL 강좌 책 구매
강좌가 도움이 되셨다면, 책으로 구매 가능합니다. 책 판매 수익금은 전액 코딩 교육 사회공헌 활동에 기부되며, 아래 링크에서 구매하시면 더 많은 금액이 기부됩니다.