2022. 5. 29. 12:45ㆍ정처기(필기)/소프트웨어개발
②(1) 물리 데이터 저장소
1. 물리 데이터 저장소 개념
- 논리 데이터 모델을 사용하고자 하는 각 DBMS의 특성을 고려하여 데이터베이스 저장 구조로 변환하기 위한 데이터 저장소
!!여기서 잠깐!!
DBMS란?
- Database Management System의 준말로 데이터를 한 곳에 모은 저장소를 만들고 그 저장소에 여러 사용자가 접근하여 데이터를 저장 및 관리 등의 기능을 수행하며 공유할 수 있는 환경을 제공하는 응용 소프트웨어 프로그램
2. 물리 데이터 저장소 모델 변환 절차
단위 개체를 테이블로 변환 -> 속성을 컬럼으로 변환(표준화된 약어 사용) -> UID를 기본 키로 변환 -> 관계를 외래 키로 변환 -> 컬럼 유형과 길이 정의 -> 반 정규화 수행(테이블 통합, 테이블 분할, 중복 추가, 컬럼 중복화가 있음)
!!여기서 잠깐!!
UID란?
- UID는 특정 사용자에게 부여되는 숫자 또는 이름
3. 물리 데이터 저장소 구성
① 테이블 제약조건 설계
- 대표적인 테이블 제약조건으로 삭제 제약조건, 갱신 제약조건이 있다.
삭제 제약 조건 - 연쇄(모든 Row가 삭제), 제한(외부 키에 없는 것만 삭제 가능), 무효(정의된 외부 키와 일치하는 것을 Null로 수정)
갱신 제약 조건 - 연쇄(외부 키와 일치하는 모든 Row 수정), 제한(외부 키에 없는 것만 수정가능), 무효(외부 키와 일치하는 것을 Null로 수정)
② 인덱스 설계
- 인덱스는 적용 기준, 컬럼 설정, 고려사항 등을 고려하여 설계한다.
- 인덱스 분포도가 10~15% 이내인 경우
분포도 = (1 / (컬럼 값의 종류)) * 100(단위는 %)
분포도 = (컬럼 값의 평균 Row 수) / (테이블의 총 Row 수) * 100
- 인덱스를 선정할 때 분포도가 좋은 컬럼은 단독적으로 생성한다.
- 자주 조합되어 사용되는 컬럼은 결합 인덱스로 생성한다.
③ 뷰 설계
- 뷰의 속성
- REPLACE : 뷰가 이미 존재하는 경우 재생성
- FORCE : 기본 테이블의 존재 여부에 관계 없이 뷰 생성
- NOFORCE : 기본 테이블이 존재할 때만 뷰 생성
- WITH CHECK OPTION : 서브 쿼리 내의 조건을 만족하는 행만 변경
- WITH READ ONLY : 데이터 조작어 작업 불가
④ 클러스터 설계
- 분포도가 넓을수록 오히려 유리하다.
- 액세스 효율 향상을 위한 물리적 저장 방법이다.
⑤ 파티션 설계
▼ 파티션의 종류
종류 | 설명 |
범위 분할 | 분할 키값이 범위 내에 있는지 여부를 구분하는 분할 기법 |
해시 분할 | 해시 함수의 값에 따라 파티션에 포함할지 여부를 결정하는 분할 기법 |
목록 분할 | 값 목록에 파티션을 할당하고 분할 키값을 그 목록에 맞게 분할 기법 |
조합 분할 | 범위 분할, 해시 분할, 목록 분할 중 2개 이상의 분할 기법을 결정 |
라운드로빈 파티셔닝 | 라운드로빈 분할로 회전하면서 새로운 행이 파티션에 할당 |
!!여기서 잠깐!!
해시함수란?
- 해시함수는 임의의 길이의 데이터를 입력받아 일정한 길이의 비트열로 반환시켜주는 함수다.
▼ 파티션의 장점
성능 향상 - 데이터 액세스 범위를 줄여 성능 향상
가용성 향상 - 전체 데이터의 훼손 가능성이 감소하고 데이터의 가용성도 향상
백업 가능 - 분할 영역을 독립저그올 백업하고 복구 가능
경합 감소 - 디스크 스트라이핑으로 입출력 성능을 향상
!!여기서 잠깐!!
디스크 스트라이핑이란?
- 논리적 볼륨의 데이터를 여러 디스크 드라이브에 분산하는 기술
(2) ORM 프레임워크
1. ORM 프레임워크의 개념
- 관계형 데이터베이스와 객체지향 프로그래밍 언어 간 호환되지 않는 데이터를 변환하는 프로그래밍 기법이다.
- 객체지향 언어에서 사용하는 객체를 관계형 데이터베이스로 변환하여 테이블을 구성하는 데 활용된다.
2. ORM 프레임워크 기술
유형 | 기술 | 설명 |
SQL Mapping |
iBatis | SQL에 기반한 데이터베이스와 자바, 닷넷, 루비 등을 연결시켜주는 역할을 하는 개발 프레임워크 |
MyBatis | 객체지향 언어인 자바의 관계형 DB 프로그래밍을 좀 더 쉽게 할 수 있게 도와주는 개발 프레임워크 | |
OR Mapping |
Hibernate | 자바 언어를 위한 객체 관계 매핑 프레임워크 객체지향 도메인 모델을 관계형 데이터베이스로 매핑하기 위한 프레임워크 제공 |
3. ORM 프레임워크 매핑 기법
객체 - 테이블 - 객체 지향 내 객체는 데이터베이스에서 테이블로 변환
속성 - 컬럼 - 객체의 속성은 데이터베이스에서 컬럼으로 변환
오퍼레이션 - 프로시저/ 함수 - 객체의 행위인 오퍼레이션은 데이터베이스에서 프로시저 또는 함수로 변환
4. ORM 프레임워크 절차
[1] 클래스 - > 테이블 변환
[2] 애트리뷰트 -> 컬럼 변환
[3] 클래스 간 관계 -> 테이블 간 관계 변환(클래스 간 관계를 데이터베이스의 테이블 제약사항으로 변환)
5. ORM 종류
▼ 부분적 ORM
- SQL을 특정 이름으로 정의하여 사용
- SQL Mapper 사용
- iBatis, MyBatis, Embeded SQL 사용
- 데이터 전송 방식이 효율적이다
▼ 완전 ORM
- 내부 엔진에서 SQL 자동생성
- Object Relation Mapper 사용
- Hibernate 사용
- 효율적인 매핑 기법이 장점
(3) 트랜잭션 인터페이스
1. 트랜잭션 인터페이스 개념
- 데이터베이스 트랜잭션의 입출력과 기능 형태를 정의한 인터페이스이다.
!!여기서 잠깐!!
트랜잭션이란?
- 데이터베이스 시스템에서 하나의 논리적 기능을 정상적으로 수행하기 위한 작업의 기본 단위
2. 트랜잭션 인터페이스의 특징
원자성 : 트랜잭션 연산을 데이터베이스 모두에 반영하거나 반영하지 말아야 함
일관성 : 트랜잭션이 실행을 성공적으로 완료할 시 일관성 있는 데이터베이스 상태를 유지해야 함
격리성 : 둘 이상 트랜잭션 동시 실행 시 한 개의 트랜잭션만 접근이 가능하여 간섭이 불가함
영속성 : 성공적으로 완료된 트랜잭션 결과는 영구적으로 반영됨
(4) 프로시저
1. 프로시저 개념
- 프로시저는 일련의 쿼리들을 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합니다.
- 데이터베이스 내부에 저장되고 일정한 조건이 되면 자동으로 수행된다.
2. 절차형 데이터조작 프로시저
[1] Oracle 기반 PL/SQL 개념
- 표준 SQL을 기반으로 오라클에서 개발한 데이터 조작 언어
- 표준 SQL의 확장 기능이 우수
- 장점은 컴파일이 불필요하며, 모듈화도 가능하고, 절차적 언어를 사용하고, 에러처리 등이 있다.
- PL/SQL은 선언부(실행부에서 참조할 모든 변수, 상수 등), 실행부(BEGIN과 END사이에 기술되는 영역), 예외부(실행부에서 에러가 발생했을 때 문장 기술)로 이루어져 있다.
▼ PL/SQL을 활용한 저장형 객체 활용
- 저장된 프로시저 : 일련의 쿼리들을 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합
- 저장된 함수 : 일련의 SQL 처리를 수행하고, 수행 결과를 단일 값으로 반환할 수 있는 절차형 SQL
- 저장된 패키지 : 프로시저나 함수를 효율적으로 관리하기 위한 집합
- 트리거 : 특정 테이블에 삽입, 수정, 삭제 등의 데이터 변경 이벤트가 발생 시 DBMS에서 자동적으로 실행되도록 구현된 프로그램
(5) 프로그램 디버깅
1. 프로그램 디버깅의 개념
- 프로그램 디버깅은 프로시저가 입력 자료를 받아 출력을 올바르게 도출하는지에 관한 확인 과정이다.
- 프로시저의 디버깅을 위해 SQL*Plus라는 도구를 이용한다.
(6) 단위 테스트 도구
1. 단위 테스트 도구의 개념
- 단위 테스트 도구는 단위 테스트에서 구현된 프로시저의 적합성을 확인하기 위한 도구이다.
- PL/SQL 테스트를 위해 DBMS_OUTPUT 패키지를 사용한다.
(7) 쿼리 성능 측정
- 데이터베이스에서 프로시저에 있는 SQL 실행 계획을 분석, 수정을 통해 최소의 시간으로 원하는 결과를 얻도록 프로시저를 수정하는 사전 작업이다.
- 쿼리 성능을 측정하는 방법은 EXPLAIN PLAN을 주로 활용한다.
(8) 소스 코드 인스펙션
1. 소스 코드 인스펙션의 개념
- 데이터베이스 성능 향상을 위하여 프로시저 코드를 보면서 성능 문제점을 개선해 나가는 활동이다.
- 데이터 조작 프로시저 최적화를 위한 SQL 코드 인스펙션이 있다.
'정처기(필기) > 소프트웨어개발' 카테고리의 다른 글
인터페이스 구현 (0) | 2022.06.01 |
---|---|
알고리즘(Algorithm) (0) | 2022.05.31 |
애플리케이션 테스트 관리 (0) | 2022.05.31 |
통합 구현 (0) | 2022.05.30 |
데이터 입출력 구현 (0) | 2022.05.28 |