데이터베이스 시스템의 개요
전사 아키텍처
P/V | 업무아키텍처 | 데이터 아키텍처 | 애플리케이션 아키텍처 | 기술 아키텍처 |
---|---|---|---|---|
개괄적 관점 | 기업 이념, 경영 방침 업무 주제 영역 CEO, 이사진 | 데이터 주제 영역 데이터 표준 정책 개괄 데이터 모델 데이터 관리 정책, CIO | 애플리케이션 정책 시스템구성도 CIO | 전사 기술영역 모델 기반구조 구성도 CIO |
개념적 관점 | 경영목표 업무영역 기획자, 관리자 | 데이터 영역 데이터 표준 원칙 개념 데이터 모델 요구사항/데이터표준 관리 데이터아키텍트, DBA | 애플리케이션 원칙 애플리케이션 기능분할도 애플리케이션 프로세스사양서 애플리케이션 아키텍트 | 기반구조 관계도 기술 아키텍트 |
논리적 관점 | 경영전략 관리대상업무 중간 관리자 | 논리적 데이터 요소 단어/용어사전 논리 데이터 모델 데이터 모델 관리 데이터 모델러 | 메시지 목록 애플리케이션 설계서 애플리케이션 목록 애플리케이션 설계자 | 기반구조 설계서 시스템성능 설계서 기반구조 설계자 |
물리적 관점 | 경영전술 업무프로세스 업무매뉴얼 업무절차서 담당자 | 물리적 데이터 요소 도메인/코드사전 물리 데이터 모델 데이터 영향도 관리 데이터 모델러 | 코딩규칙 소스코드 애플리케이션 개발자 | 기술자원 목록 제품 목록 시스템 관리자 |
부가적 관점 | 업무환경 조성 실무자 | DB환경 데이터, DB 구성 목록 인덱스 디자인 차트 저장공간 설계도, DB설계도 DB, 운영자 | 애플리케이션 환경 조성 실행 모듈 애플리케이션 개발자 | 정보시스템 환경 조성 실무자 |
업무와 데이터, 데이터 표준
기업의 업무
- 관리 대상 업무 : 개체들 사이에서 관계가 형성되어 데이터 흐름이 발생하는 것
- 데이터 흐름이 발생하지 않는 하나의 개체에만 관련된 대상업무는 행위가 반복됨(회원비 납부 vs. 회원등록)
- 핵심 줄기 업무 vs. 부수적인 업무
- 업무 영역 - 업무 주제 영역 -> 업무 계층도와 기능 차트로 표현
요구사항 수집과 분석
- 프로젝트의 기준이 되는 업무 명세서를 생성하는 과정에서 명확한 대상 업무를 도출하여 확정
- 업무 기술서(매뉴얼, 절차서), 제안요청서, 수행계획서 등에서 수집하거나 애플리케이션이나 홈페이지, DB 설계에 사용되었던 문서에서 수집, 실무 현장의 문서 및 설문조사, 워크샵에서 수집, 우수 경쟁사나 해외 기업의 벤치마킹, 문헌, 전문가를 통하여 수집
- 업무 명세서와 같은 문서로 정리하는 것이 좋음
- 업무행위 기반 분석 방법론: 문장에서 동사 추출 후 행위 중심으로 대상업무 도출 및 확정
데이터
- 업무 규칙에 대한 4가지 규칙
- 선택성(Selectivity)/참여도 : 인스턴스들이 관계에 대하여 참여하는 정도
- 기수성(Cardinality): 한 인스턴스에 대하여 상대 인스턴스가 몇 개나 관련되어 있는지
- 상속(Inheritance): 한 인스턴스가 상대 인스턴스에게 어떻게 정보를 넘겨주는가
- 관계명(Relationship Name): 업무 관련성의 명칭
- DB 환경 데이터: DBMS, 네트워크, 시스템 구조, 보안 관련 정보
- DB 운영 데이터: DBA가 운영시 참조하는 데이터로 DB 환경 데이터, 백업과 복제 정보, 모니터링과 튜닝 정보, 권한 정보, 전사 데이터 관련 정보, 유지보수 정보, 관련업체 정보, 사용자 정보 및 이해관계자 정보
- 저장 구조 관련 데이터: 논리(테이블스페이스, 세그먼트, 익스텐트 및 블록), 물리(데이터파일)
- 데이터베이스 관련 데이터: 인덱스와 제약 조건
데이터 표준
- 데이터 품질: 적합성, 적시성, 정확성, 완전성, 적절성 및 접근 가능성
- 데이터 표준: 보통 사전으로 구성
- 표준 단어: 사전적으로 문법상의 일정한 뜻을 가지는 말의 최소 단위. 단어사전에 정의
- 표준 용어: 완전한 의미를 가지는 어휘로, 표준 단어의 조합으로 구성. 용어 사전에 정의
- 도메인 사전: 엔터티의 속성이나 테이블 컬럼의 데이터 타입을 도메인으로 정의할 때 사용하는 사전
- 코드 사전: DB와 App에서 사용되는 코드를 정의한 사전
- 메시지 목록: 애플리케이션에서 사용하는 메시지들을 모아 표준화하여 목록화한 것
데이터베이스 시스템
데이터베이스
데이터 모델
- 데이터 모델의 종류
- 개괄 데이터 모델 : 업무 개요 판단 및 전반적 골격 이해, 생략하는 경우가 많음
- 개념 데이터 모델 : 정보시스템의 데이터 구조에 대한 전체적인 개념 파악
- 논리 데이터 모델 : 업무 데이터들을 구조화시켜 논리적 수준에서 모델화한 설계도
- 물리 데이터 모델 : 논리 모델을 구현하기 위해 배치도 역할을 하는 모델
테이블
- 데이터베이스와 물리모델의 차이: 컬럼들의 순서 및 인덱스 생성 여부
- 데이터를 테이블에 저장하는 방식
- 분리형(Heap) 테이블: 테이블 데이터와 인덱스 데이터가 분리되어 저장. 어떠한 컬럼에 의해서도 정렬되지 않는 유형. 삽입 성능은 좋지만 검색, 삭제 및 갱신 성능은 별로. 인덱스를 생성하여 성능 개선. 테이블 유형 중 가장 많이 사용하는 형태
- 일체형(Index Organized) 테이블: 인덱스 데이터를 테이블에 함께 저장. 기본키에 대하여 B* 트리 인덱스를 구성하고 인덱스의 말단 노드(leaf node)에 데이터 행을 저장하는 방식. 기본 키를 중심으로 액세스할 때는 빠르지만 일반 컬럼을 액세스할 때는 비정렬 저장 방식과 동일. 삽입, 갱신, 삭제(기본 키 제외) 성능이 나쁨. 우편번호 테이블에 유리.
- 클러스터형(Clustering) 테이블: 컬럼 값이 동일한 행을 저장하는 단위 저장 공간인 ‘클러스터’에 데이터를 저장. 중복이 심할수록 유리.
- 인덱스 클러스터형: B* 트리 구조 사용, 중복이 많은 경우 유용
- 해시 클러스터형: 해시 함수 사용, 균일 분포를 가지는 동등 비교에서 많이 사용
- 파티션 테이블: 별개의 테이블스페이스를 지정하여 저장할 수 있어 분산 효과 극대화
- 범위 파티션: 컬럼 값의 범위에 따라 행들을 분할하여 해당 파티션에 저장
- 리스트 파티션: 파티션별로 저장될 수 있는 컬럼 값을 나열하여 해당 행을 파티션별로 저장
- 해시 파티션: 해시 값이 동일한 행을 동일한 파티션에 저장
- 복합 파티션: 복합하여 저장
- 임시 테이블: 트랜잭션이나 세션별로 데이터를 저장하고 처리 (임시 저장용으로 사용)
- 외부 테이블: Select, 조인, 정렬 등은 가능하나 수정, 삭제, 추가, 인덱스 생성 불가능. 주로 ETL 작업에서 많이 사용
인덱스
일반적으로 B* 트리 인덱스를 가장 많이 사용하고, DW처럼 중복이 많거나 OR 연산이나 NOT 연산을 많이 하는 경우에 비트맵 인덱스를 많이 사용
- 분포도 : 동일 컬럼 값을 가진 행의 수 / 전체 행의 수 (작을 수록 좋다고 봄)
데이터베이스 관리 시스템과 데이터베이스 설계 툴
3단계 스키마 아키텍처와 데이터 독립성
3단계 스키마 아키텍처: 사용자가 DBMS 내에서 스키마 단계를 시각화하는 수단
- 외부 단계(뷰 단계): 외부 스키마 - 특정 사용자 그룹이 관심있는 데이터베이스 부분만 기술하고 나머지는 사용자그룹에게 숨김
- 개념 단계: 개념 스키마 - 모든 사용자들을 위해 데이터베이스 전체 구조 기술. 물리적인 저장 구조를 숨기고 논리적 구조만 표현
- 내부 단계: 내부 스키마 - DB의 물리적 저장 구조 기술, 액세스 경로도 함께 기술.
- 외부-개념 사상: 개념 단계를 외부 단계에서 동일한 의미를 가진 단계에 대응시키는 것
- 개념-내부 사상: 내부 단계를 개념 단계에서 동일한 의미를 가진 단계에 대응시키는 것
데이터 독립성
- 논리적 데이터 독립성: 외부스키마, 애플리케이션 변경없이 개념 스키마 변경 가능
- 물리적 데이터 독립성: 개념스키마 변경없이 내부 스키마 변경 가능
그러나 컴파일할 때 두 번의 사상을 거쳐야 해서 효율이 떨어지고 오버헤드 발생 가능 (따라서 대부분의 DBMS는 완전한 3단계-스키마 아키텍처 구현x)
오라클 구조
- 인스턴스: DB를 액세스하는 수단. SGA와 백그라운드 프로세스로 구성
- SGA(System Global Area): 사용자 정보를 공유하여 저장하는 메모리 영역
- 공유 풀(Shared Pool)
- 라이브러리 캐시 : 최근 실행된 SQL문과 PL/SQL문 저장
- 데이터 딕셔너리 캐시: 최근 액세스된 DB파일, 테이블, 인덱스, 열, 사용자, 권한 및 DB 객체에 관한 정보들을 저장
- 데이터베이스 버퍼 캐시: 데이터 파일에서 액세스된 데이터 블록의 복사본 저장
- 리두 로그 버퍼: 데이터베이스가 비정상 종료되어 재시작될 때 복구를 위해 데이터블록의 모든 변경 내용들을 로그 형태로 저장
- JAVA 풀과 대용량 풀도 추가로 가지고 있음
- 공유 풀(Shared Pool)
- 백그라운드 프로세스 중 DBWn, LGWR, SMON, PMON, CKPT만 필수
- DBWn(DB Writer n): 데이터베이스 버퍼 캐시에 저장된 데이터를 데이터 파일에 저장할 때 동작. 체크포인트 발생, 더티 버퍼가 가득찬 경우, 사용 가능 버퍼가 없는 경우, 시간 초과 및 기타 여러 가지 사유가 발생하면 동작
- LGWR(Log Writer): 리두 로그 버퍼의 내용을 데이터베이스에 있는 리두 로그 파일에 저장할 때 동작하는 프로세스. 커밋의 발생, DBWn가 동작하기 전, 리두로그 버퍼가 1/3까지 찬 경우, 기타 사유시 동작
- SMON(System Monitor): 비정상 종료된 데이터베이스가 재시작될 때 롤백이나 롤포워드를 수행하여 복구. 사용자가 액세스 가능하도록 데이터베이스 열기, 데이터 파일의 사용 가능한 공간 병합, 할당된 임시 세그먼트 해제 등도 수행
- PMON(Process Monitor): 프로세스가 실패했을 때 사용자의 트랜잭션을 롤백시키고 사용자의 자원을 해제하여 다른 사용자가 사용 가능하도록 함
- CKPT(Checkpoint) Process: 체크포인트 발생시 DBWn 프로세스에 알리고 데이터 파일 헤더와 제어 파일에 체크포인트 정보 갱신
- 체크포인트 : 3초마다 데이터베이스 버퍼 캐시 데이터를 데이터베이스에 자동으로 저장할 때 이 때의 지점을 제어 파일에 저장하여 리두로그 파일에서 복구가 시작되는 위치를 식별할 때 사용
오라클 데이터베이스 구조
- 테이블스페이스
- 논리적으로는 여러 세그먼트, 물리적으로는 여러 데이터 파일로 구성
- 하나의 테이블스페이스에 여러 객체의 세그먼트 저장 가능
- 테이블과 인덱스는 서로 다른 테이블스페이스에 저장하는 것이 효율적
- 세그먼트
- 논리적으로 여러 익스텐트들이 모여서 구성- 익스텐트 단위로 초기화 및 증감
- 객체의 인스텐트마다 구성되는 블록수가 다름
- 데이터 세그먼트(테이블 데이터 저장), 인덱스 세그먼트(인덱스 데이터 저장), 언두 세그먼트(로그 저장), 임시 세그먼트(정렬 등 동작에서 임시 사용) 등이 있음
- 익스텐트: 물리적 데이터 파일의 구성 단위
- 블록: 기본적으로 8kb로 설정하여 실제 데이터를 저장
- ROWID: 행식별자. 객체번호+상대파일번호+블록번호+블록내 슬롯번호