본문 바로가기
소프트웨어공학

스키마에 대해 알아보자

by greemday 2024. 9. 12.

우리가 흔히 말하는 스키마란 데이터베이스의 구조, 제약조건, 개체, 관계, 속성을 포함한 큰 포괄적인 명세를 기술한 것이라고 볼 수 있다. 여러 속성의 집합을 개체라고 하며, 그들 사이에는 관계가 있다. 데이터 사전에는 스키마에 명시된 정보가 적재된다. 스키마는 크게 3가지로 나누어 볼 수 있으며 내부 스키마, 개념 스키마, 외부 스키마가 있다. 개념스키마란 전체적인 뷰라고 할 수 있는데 데이터베이스의 큰 논리적 구조를 나타낸다. 전체 조직의 데이터 요구사항을 종합적으로 반영하며 보편적으로 하나의 데이터베이스당 하나의 개념 스키마만 실존한다. 통상적으로 스카마 라고 하면 주로 개념 스키마를 의미한다. 외부 스키마란 응용 프로그램 혹은 사용자 관점에서 데이터베이스의 논리적 구조를 정의한다. 데이터베이스에 접근 시 SQL과 같은 질의어나, JAVA와 같은 프로그래밍 언어를 활용할 수 있고 서브 스키마라고도 불린다, 여러 개의 외부 스키마가 하나의 데이터베이스에 존재할 수 있다. 내부 스키마는 저장 스키마라고도 할 수 있으며 데이터베이스의 구조를 물리적인 저장장치 관점에서 정의하는 것이다. 또한 데이터 독립성이라는 것은 크게 물리적 독립성과 논리적 독립성으로 나누어 볼 수 있는데. 첫째 물리적 독립성은 데이터베이스의 논리적 구조나 응용 프로그램에 영향을 미치지 않고 데이터의 물리적 구조를 바꿀 수 있는 능력치를 말한다. 외부와 개념스키마는 내부 스키마가 변경되어도 전혀 영향을 받지 않도록 도와주는 역할을 한다. 논리적인 독립성이란 외부 스키마가 개념 스키마의 변화에도 영향을 받지 않도록 지원하는 것이며 응용프로그램에도 영향을 주지 않고 데이터베이스 논리적 구조를 수정할 수 있는 능력이다.

데이터베이스 관리 시스템에 대해 간략히 서술해 보겠다. 여러 종류의 시스템이 있지만 그중 객체 지향형 시스템은 정보를 객체 형태로 표현하며 객체지향 프로그래밍 개념에 기반하여 만들어진 데이터베이스 모델이다. 역시 클래스, 상속 등의 개념을 활용할 수 있으며 비정형 데이터들을 데이터베이스화할 수 있도록 하기 위해서 만들어진 모델이다. 데이터베이스 설계 시 고려해야 할 중요한 몇 가지는 저장된 데이터의 값이 어떠한 조건을 만족해야 한다는 것이며 데이터의 삽입 삭제 연산 후에도 값은 제약조건을 반드시 충족해야 하며 전체적인 시스템 운영에 영향을 주지 않고 새로운 데이터를 지속적인 방향으로 가중할 수 있고 시스템의 응답시간을 최소화하며 저장 공간을 최적화하고 생산성을 극대화하는 것을 포함해야 하며 외부로부터의 불법적인 데이터 노출 변경에 대한 방호기능을 가져야 한다. 논리적 데이터베이스 설계 시 관계형 데이터 모델, 계층형 모델, 네트워크 모델 등의 분류로 구분해야 하고 성능과 제약사항에 종속되지 않아야 하며 특정한 시스템에 독립적이어야 한다.

정규화와 반정규화의 개념에 대해서 말해보겠다. 어떠한 관계형 데이터베이스의 설계단계에서 데이터의 중복을 최소화하는 과정이라고 할 수 있다. 무결성 유지와 저장 용량 절감이 가능하며 데이터의 중복을 절대 허용하지 않는다. 그렇다면 우리는 정규화를 왜 하는 것 인가 가장 먼저 데이터의 중복을 막기 위함이요. 정보가 사라지지 않기 위함이라 할 수 있다. 데이터가 쌓이면서 발생하는 이상 현상의 발생 가능성을 최대한 낮출 수 있음이다. 여기서 이상 현상이란 데이터가 중복됨으로 인해 관계 조작 시 발생하는 예상치 못한 문제점들을 통칭하는 말이다. 몇 가지 예를 보겠다. 한 튜플을 삭제할 때 연쇄 삭제 현상으로 정보를 손실하거나 튜플의 속성값을 갱신할 때 일부 튜플의 정보만 갱신되어 데이터에 모순이 생기는 현상이다. 반정규화란 정규화로 인해서 다양한 테이블의 조인이 성능이 나빠졌을 때, 반정규화는 이 문제를 해결하기 위해 사용되며 데이터베이스 설계에서 정규화 이후 성능 향상 혹은 운영 및 개발 편의성을 위해 인위적으로 중복을 허용하거나 데이터를 재조립하는 기법이라 할 수 있다. 마냥 좋다고 할 수 없기에 우리가 유의해야 할 사항들을 나열해 보자. 인위적으로 데이터를 중복시킴으로 인해 데이터 무결성에 손상이 생길 위협이 존재하며 읽기 작업은 고속이나, 삽입, 삭제, 수정 작업은 속도 저하의 가능성이 존재한다. 테이블이 커지고 복잡해서 운영유지가 어려워질 수 있고 우선으로 반정규화를 결정하기 전에 데이터의 무결성과 일관성을 유지할 것 인지, 혹은 데이터베이스의 성능을 우선시할지 판단을 해봐야 할 것이다. 반정규화의 대상은 자주 사용되며 어떠한 범위만 조회하는 테이블 혹은 다량의 데이터를 자주 처리해야 하는 테이블, 통계 정보가 필요한 테이블, 여러 조인으로 인해 속도가 저하된 경우를 예로 들 수 있다. 유형에 따라서는 레코드 업무 프로세스 상태 용량 칼럼 고빈도의 칼럼, 자주 조회되는 칼럼 등으로 분류할 수 있겠다.

테이블 저장 사이징(Sizing) 은 데이터의 양이 방대하고 증가량이 커질수록 디스크에 대한 입출력 분산이 철저하게 고려되어야만 성능의 향상이 이루어질 수 있으며 정확한 데이터 용량을 산정하며 디스크 사용의 효율을 높인다. 업무량이 집중되어 있는 디스크를 분리, 설계하여 디스크에 대한 입출력 부하를 가늠한다. 여러 프로세스가 동시에 접근할 때 발생하는 디스크 입출력 경합을 최소화하여 데이터의 접근 성능을 큰 폭으로 향상할 수 있다. 테이블 사이징(Sizing)시 초기 테이블의 크기를 계산한다. 테이블의 보관 주기를 확정 지으며 초기건수, 증가 건수, 최대 건수를 정의한다. 또한 물리적인 공간의 확보가 가능하다면 테이블의 초기크기는 더욱 커질 수 있다. 테이블 용량 계산의 경우 총 블록 헤드를 계산하며 블록당 가능한 데이터 영역을 계산한다.