1. 전용 View와 공용 View
1) 전용 View
- 전용 View는 하나의 프로그램 또는 하나의 SQL에서만 사용하기 위해 생성한 View를 의미합니다.
2) 공용 View
- 공용 View는 두개 이상의 프로그램 또는 SQL에서 사용하기 위해 생성한 View를 의미합니다.
2. 전용 View와 공용 View 접근 패턴
1) 전용 View
- 전용 View는 말 그대로 하나의 프로그램 또는 SQL에서만 사용되므로 여기서 사용될 때
’View Merging’이 안되는 부분을 쉽게 파악하여 적용 관리할 수 있습니다.
2) 공용 View
- 문제가 되는 것은 공용 View인데 View를 생성 또는 변경 시 해당 View가 어느 업무까지
공유해서 사용될 지 정확히 파악하여 그 업무에서 사용하는 조인 컬럼들에 대해 해당 View에서
가공되어 Merging이 안되는것을 방지해야 합니다.
- 하지만 실제 프로젝트에서 View를 생성할 때 이 View가 어느영역까지 공유가 될지 미리 파악하여
관리해야 하나 이렇게 관리하는곳은 그리 많지 않습니다. 그 이유는 여러가지가 있겠지만 몇가지만
나열해보면 자신의 업무만 해결하면 OK되는 문화, 시간에 쫓기는 프로젝트의 특성, 전체 Object를
관리하는 체계 미흡등을 꼽을 수 있습니다.
3. 공용 View을 생성 및 관리시 상도덕이 필요한 이유
- 데이터베이스의 가장 큰 특징 중 하나는 바로 사용자가 데이터를 공동으로 사용하는 것입니다.
- 즉, 데이터베이스에서 사용하는 모든 Object(Table, Index, View 등)는 사용자가 공유하여
사용되고 있는데 이들이 유기적으로 잘 연결되어 데이터가 흘러가야 작게는 데이터를 효율적으로
액세스 할 수 있고 크게는 시스템의 자원을 효율적으로 사용하여 성공적인 프로젝트를 수행할
수 있습니다.
- 그러나 이런 Object 중 하나인 View는 업무담당자들이 비지니스 로직을 SQL로 구현하여 만들기
때문에 이런 공용 View를 만들 때 데이터가 View 안으로 잘 들어갔다 나올 수 있도록 환경을
만들어 주어야 하나, 이런 부분에 대한 고려 없이 비지니스 로직만 구현하기 ㅤㄸㅒㅤ문에 문제가
되는 것입니다.
- 그러므로 View를 만드는 업무담당자들은 반드시 이 View는 나만이 사용하는 것이 아니라
다른 사람들도 사용할 수 있기 ㅤㄸㅒㅤ문에 이 View를 사용할 때 데이터를 잘 주고 받을 수 있도록
생성 및 관리를 해야 합니다.
4. 공용 View를 관리하는 방법 제안
- 프로젝트는 일반적으로 EA(Enterprise Architecture)의 방법을 많이 사용하고 있습니다.
- EA의 흐름도는 DA(Data Architecture) -> TA(Technical Architecture) -> AA(Application Architecture)
순서로 진행을 하는데 DA를 구성할 때 ERD(Entity Relationship Diagram)을 사용하여 전체적인 윤곽을
잡아나가고 있습니다.
- 제가 제안드리고자 하는 방법은 바로 이 ERD와 같이 Entity간의 흐름도를 View에도 도입을 시키는 것입니다.
- 즉 View는 Entity간의 집합을 가지고 또다른 집합을 만드는 것이므로 이 집합간의 관계를 ERD처럼
도식화 시킨다면 View 안의 연결고리들을 미리 파악하여 View안의 Select-List절을 가공하여 침투를
못시키는 일을 방지할 수 있기 때문입니다.
- 물론 이 방법론은 Entity처럼 고정적이지 않고 가변적인 View를 가지고 접근하기 때문에 쉬운 방법은
아니나 구현만 된다면 어떤 프로젝트든 자원을 30%이상 감소 시킬 수 있을것으로 생각됩니다.
5. 공용 View 생성 및 관리 시 점검 사항
1) View 안의 컬럼 가공
① DECODE(), NVL(), SUBSTR() 같은 함수를 사용하여 가공하는 경우
② Scalar Subquery를 사용하여 가공하는 경우
③ User Defined Function을 사용하여 가공하는 경우
2) View안의 Local Hint 사용
3) VIew안에서 Alias 전략적으로 사용하는 방법
4) View Merging을 방해하는 기타 요소들
다음 시간에는 이 5번 사항 중 1)번에 대해 살펴보도록 하겠습니다.
읽으시고 이상한점이나 궁금하신 내용이 있으시면 리플 달아주시기 바랍니다.