Database Security
데이터베이스 보안
대전대학교 • 011780 • Aaron Snowberger
기말고사 스터디 가이드
p. 227-532
6.1. SQL 응용: 내장 함수
-- 새로운 manager 계정 만든다
SELECT current_user; -- postgres (기본 사용자)
CREATE USER manager WITH PASSWORD '1234';
GRANT ALL PRIVILEGES ON DATABASE univdb TO manager;
GRANT ALL PRIVILEGES ON 학생2, 수강2, 과목2 TO manager;
GRANT ALL ON SCHEMA public TO manager; -- 인덱스 권한까지 부여
SELECT * FROM pg_namespace; -- 모든 스키마 표시
ALTER DATABASE univdb OWNER TO manager; -- postgres 계정만 실행할 수 있다
ALTER TABLE 학생2 OWNER TO manager;
ALTER TABLE 수강2 OWNER TO manager;
ALTER TABLE 과목2 OWNER TO manager;
-- 위 드랍다운 화살표 누르고 New Connection... 선택
-- univdb와 manager 계정 선택하고 저장하기
SELECT current_user; -- manager (새로운 사용자!!!)
6.1. SQL 응용: 내장 함수
DROP VIEW IF EXISTS V1_고학년학생; -- 뷰
-- manager 계정으로 변경
CREATE VIEW V1_고학년학생(학생이름, 나이, 성, 학년) AS
SELECT 이름, 나이, 성별, 학년 FROM 학생2
WHERE 학년 >= 3 AND 학년 >=4;
SELECT * FROM V1_고학년학생;
CREATE VIEW V2_과목수강현황(과목번호, 강의실, 수강인원수) AS
SELECT 과목2.과목번호, 강의실, COUNT(과목2.과목번호)
FROM 과목2 JOIN 수강2 ON 과목2.과목번호 = 수강2.과목번호
GROUP BY 과목2.과목번호;
SELECT * FROM V2_과목수강현황;
CREATE VIEW V3_고학년여학생 AS
SELECT * FROM V1_고학년학생
WHERE 성 = '여';
SELECT * FROM V3_고학년여학생;
6.1. SQL 응용: 내장 함수
-- 인덱스
DROP INDEX IF EXISTS idx_수강;
DROP INDEX IF EXISTS idx_과목;
DROP INDEX IF EXISTS idx_학생;
CREATE INDEX idx_수강 ON 수강(학번, 과목번호); -- 소유자가 된다면
CREATE UNIQUE INDEX idx_과목 ON 과목(이름 ASC);
CREATE UNIQUE INDEX idx_학생 ON 학생(학번);
-- SHOW INDEX FROM 학생; -- MySQL만
-- PostgreSQL에서 한 테이블의 모든 인덱스 표시
SELECT indexname, indexdef
FROM pg_indexes
WHERE tablename = '수강2';
-- 2023 슬라이드 8장, #32부터
EXPLAIN ANALYZE SELECT * FROM 수강2;
07
SQL 응용
학습목표
p. 227-282
7.1. SQL 응용: 내장 함수
PostgreSQL에서도 SQL 명령문에서 활용할 수 있는 다양한 내장 함수를 제공합니다. 주요 숫자, 문자, 날짜 및 시간 관련 함수 사용 방법을 살펴봅니다.
7.1.1 내장 함수의 개요
SQL 명령문에서 검색 결과를 변환하거나 원하는 결과로 가공할 수 있습니다. SQL 함수는 DBMS가 제공하는 내장 함수(built-in function)와 사용자가 직접정의하는 사용자 정의 함수(user-defined function)로 분류한다.
PostgreSQL에서도 MySQL처럼 내장 함수와 사용자 정의 함수를 지원합니다. 단, 몇 가지 문법 차이가 있으므로 유의해야 합니다.
7.1. SQL 응용: 내장 함수
7.1.1 내장 함수의 개요
SQL 내장 함수는 열이름이나 상수 값을 입력받아 값 하나를 결과로 반환한다. 기본 연산 함수와 시스템 정보 제공 함수, 데이터 가공 함수 등이 제공된다. SELECT절이나 WHERE 절 뿐만 아니라 UPDATE SET절 등에서도 사용 가능하다.
MySQL과 PostgreSQL은 유사한 내장 함수들이 많지만, 일부 함수에 차이가 있습니다. MySQL의 몇 가지 함수는 PostgreSQL에 없거나 다른 이름과 기능을 가질 수 있습니다. 주요 차이점을 함수별로 정리하면 다음과 같습니다.
7.1. SQL 응용: 내장 함수
7.1.1 내장 함수의 개요
PostgreSQL에서 기본 내장 함수는 숫자, 문자, 날짜와 시간 관련 함수가 포함됩니다.
또한 DATE_FORMAT() 함수는 MySQL에서 사용 가능하지만, PostgreSQL에서는 TO_CHAR() 함수로 대체하여 날짜 포맷을 변환할 수 있습니다.
7.1. SQL 응용: 내장 함수
7.1.1 내장 함수의 개요
숫자 함수
예: PostgreSQL에서 TO_CHAR(숫자, '형식')으로 대체.
7.1. SQL 응용: 내장 함수
7.1.1 내장 함수의 개요
문자열 함수
7.1. SQL 응용: 내장 함수
7.1.1 내장 함수의 개요
문자열 함수
7.1. SQL 응용: 내장 함수
7.1.1 내장 함수의 개요
날짜 및 시간 함수
7.1. SQL 응용: 내장 함수
7.1.1 내장 함수의 개요
날짜 및 시간 함수
7.1. SQL 응용: 내장 함수
7.1.1 내장 함수의 개요
날짜 및 시간 함수
7.1. SQL 응용: 내장 함수
7.1.1 내장 함수의 개요
날짜 및 시간 함수
요약하면, MySQL과 PostgreSQL은 대부분의 내장 함수를 유사하게 제공하지만, 몇몇 함수들은 PostgreSQL에서 다른 함수나 형식으로 표현해야 합니다.
7.1. SQL 응용: 내장 함수
7.1.2 내장 함수의 적용
1) 숫자 함수
7.1. SQL 응용: 내장 함수
7.1.2 내장 함수의 적용
1) 숫자 함수
7.1. SQL 응용: 내장 함수
7.1.2 내장 함수의 적용
2) 문자 함수
7.1. SQL 응용: 내장 함수
7.1.2 내장 함수의 적용
2) 문자 함수
7.1. SQL 응용: 내장 함수
7.1.2 내장 함수의 적용
3) 날짜 / 시간 함수
7.1. SQL 응용: 내장 함수
7.1.2 내장 함수의 적용
3) 날짜 / 시간 함수
7.1. SQL 응용: 내장 함수
7.1.2 내장 함수의 적용
3) 날짜 / 시간 함수
7.2. SQL 응용: 저장 프로시저
저장 프로시저 (stored procedure)는 미리 작성하여 데이터베이스 안에 저장한 SQL 문장들의 묶음이다. 독립된 프로그램으로 데이터베이스 안에 하나의 객체로 저장된다. 보통 DBA가 데이터베이스 관리를 수행하기 위해 사용하는 기능들이 DBMS에 의해 저장 프로시저로 제공된다.
저장 프로시저를 사용할 경우, 최적화된 SQL문을 미리 데이터베이스에 작성해둘 수 있고 복잡한 SQL문을 전달할 필요가 없어 네트워크 부하가 줄어들며 여러 응용 프로그램간의 공유가 가능한 것이 장점이다.
7.2. SQL 응용: 저장 프로시저
7.2.1 삽입 / 수정 프로시저의 생성 및 활용
CREATE PROCEDURE 문
MySQL에서는 CREATE PROCEDURE와 CREATE FUNCTION이 초기부터 지원되었으며, 트랜잭션 및 데이터 변경 작업을 수행할 때 유사한 방식으로 사용할 수 있습니다.
PostgreSQL 11부터는 CREATE PROCEDURE 명령어도 사용할 수 있게 되었는데, 이 명령어는 프로시저를 생성하며 데이터베이스 내에서 트랜잭션 제어가 가능합니다. 프로시저는 값을 반환하지 않지만, 여러 SQL 명령어를 포함하고 있어 복잡한 로직을 한 번에 실행할 때 유용합니다.
프로시저는 CALL 명령어를 사용해 호출됩니다.
7.2. SQL 응용: 저장 프로시저
7.2.1 삽입 / 수정 프로시저의 생성 및 활용
InsertOrUpdateCourse 프로시저 생성 및 사용:
7.2. SQL 응용: 저장 프로시저
7.2.1 삽입 / 수정 프로시저의 생성 및 활용
InsertOrUpdateCourse 프로시저 생성 및 사용:
7.2. SQL 응용: 저장 프로시저
7.2.1 삽입 / 수정 프로시저의 생성 및 활용
7.2. SQL 응용: 저장 프로시저
7.2.1 삽입 / 수정 프로시저의 생성 및 활용
7.2. SQL 응용: 저장 프로시저
7.2.1 삽입 / 수정 프로시저의 생성 및 활용
PostgreSQL 버전 11 이하에서는 저장 프로시저를 함수와 구별하여 정의하며, CREATE PROCEDURE 문을 사용하지 않고 대신 CREATE FUNCTION을 주로 사용합니다.
7.2. SQL 응용: 저장 프로시저
7.2.1 삽입 / 수정 프로시저의 생성 및 활용
SelectAverageOfBestScore 프로시저 생성 및 사용:
7.2. SQL 응용: 저장 프로시저
7.2.2 검색 저장 프로시저의 생성 및 활용
SelectAverageOfBestScore 프로시저 생성 및 사용:
프로시저의 호출
7.2. SQL 응용: 저장 프로시저
7.2.1 삽입 / 수정 프로시저의 생성 및 활용
7.2. SQL 응용: 저장 프로시저
7.2.2 검색 저장 프로시저의 생성 및 활용
SelectAverageOfBestScore 프로시저 생성 및 사용:
프로시저의 호출
7.2. SQL 응용: 저장 프로시저
7.2.3 저장 프로시저의 삭제
DROP PROCEDURE 문
프로시저 삭제하기 전에 삭제할 저장 프로시저의 내용을 확인해 보자. SHOW CREATE PROCEDURE 명령어를 실행하면 삭제할 저장 프로시저의 내용을 확인할 수 있다.
7.3. SQL 응용: 트리거
PostgreSQL에서도 트리거 기능을 지원합니다. 트리거는 특정 이벤트(INSERT, UPDATE, DELETE) 발생 시 자동으로 실행되도록 설정됩니다.
7.3. SQL 응용: 트리거
7.3.1 트리거의 생성 및 활용
MySQL의 CREATE TRIGGER와 동일한 문법으로 PostgreSQL에서도 트리거를 생성할 수 있습니다. 다만, PostgreSQL에서는 트리거 함수 내에서 OLD 및 NEW 키워드를 사용하여 변경 전후의 데이터를 참조할 수 있습니다.
7.3. SQL 응용: 트리거
7.3.1 트리거의 생성 및 활용
7.3. SQL 응용: 트리거
7.3.1 트리거의 생성 및 활용
CREATE TRIGGER문
7.3. SQL 응용: 트리거
7.3.1 트리거의 생성 및 활용
CREATE TRIGGER문
7.3. SQL 응용: 트리거
7.3.1 트리거의 생성 및 활용
DROP TRIGGER문
7.4. SQL 응용: 사용자 정의 함수
PostgreSQL는 사용자가 정의한 함수와 절차를 지원하며, 둘 다 특정 작업을 자동화하거나 코드 재사용을 가능하게 합니다. 다만, 함수와 프로시저의 목적과 호출 방식에는 차이가 있습니다.
7.4. SQL 응용: 사용자 정의 함수
CREATE FUNCTION은 주로 값을 반환할 때 사용됩니다. 반환되는 값은 정수, 문자열 등 기본 데이터형이거나 테이블 형태일 수 있습니다. 함수 내에서 데이터를 변경할 수 있지만, 트랜잭션의 일부로 자동으로 작동하지 않으며, 이를 위해서는 트리거 또는 특정 기능을 추가해야 합니다.
PostgreSQL 11부터는 CREATE PROCEDURE 명령어를 생성하며 데이터베이스 내에서 트랜잭션 제어가 가능합니다. 프로시저는 값을 반환하지 않지만, 여러 SQL 명령어를 포함하고 있어 복잡한 로직을 한 번에 실행할 때 유용합니다. 프로시저는 CALL 명령어를 사용해 호출됩니다.
7.4. SQL 응용: 사용자 정의 함수
7.4.1 사용자 정의 함수의 생성
CREATE FUNCTION문
7.4. SQL 응용: 사용자 정의 함수
7.4.1 사용자 정의 함수의 생성
CREATE FUNCTION문
7.4. SQL 응용: 사용자 정의 함수
7.4.2 사용자 정의 함수의 삭제
DROP FUNCTION문
7.4. SQL 응용: 사용자 정의 함수
7.4.2 사용자 정의 함수의 삭제
저장 프로시저, 트리거, 사용자 정의 함수의 비교
7.4. SQL 응용: 사용자 정의 함수
7.4.2 사용자 정의 함수의 삭제
저장 프로시저, 트리거, 사용자 정의 함수의 비교
7.5. SQL 응용: 트랜잭션
데이터베이스 응용 프로그램 개발 시 여러 SQL 문을 하나의 단위로 묶어 처리할 필요가 있습니다. 이를 트랜잭션 단위로 정의하여 안정성과 일관성을 확보할 수 있습니다.
7.5.1 트랜잭션의 개념
SQL 명령어 하나로는 복잡한 업무 처리가 어려울 수 있습니다. 따라서 여러 SQL 명령어를 트랜잭션 단위로 묶어 일괄적으로 처리해야 할 필요가 있습니다.
7.5. SQL 응용: 트랜잭션
7.5.1 트랜잭션의 개념
트랜잭션 정의
트랜잭션은 하나의 작업 단위로 처리되어야 하는 SQL 명령어 집합입니다. 이 명령어들이 모두 성공해야 트랜잭션이 완료되며, 하나라도 실패하면 전체를 취소할 수 있습니다.
트랜잭션을 시작하려면 START TRANSACTION을 사용하고, 성공적으로 완료하려면 COMMIT을 사용합니다. ROLLBACK 명령어를 사용하면 트랜잭션 시작 전 상태로 되돌릴 수 있습니다.
7.5. SQL 응용: 트랜잭션
7.5.1 트랜잭션의 개념
트랜잭션 예시
계좌 이체는 두 개의 UPDATE 문을 포함하며, 두 문이 모두 성공해야만 트랜잭션이 완료됩니다. 트랜잭션의 실패 시에는 ROLLBACK하여 모든 변경사항을 취소할 수 있습니다.
7.5. SQL 응용: 트랜잭션
7.5.1 트랜잭션의 개념
트랜잭션의 ACID 특성
7.5. SQL 응용: 트랜잭션
7.5.1 트랜잭션의 개념
트랜잭션 지원 DBMS 모듈
트랜잭션을 지원하기 위해 DBMS는 동시성 제어와 회복 모듈을 제공한다.
동시에 실행되는 트랜잭션 간의 간섭을 제어한다. 최종적으로 각 트랜잭션이 순차적으로 실행한 결과와 동일한 고립성 결과를 보장하고 트랜잭션 실행 이전과 이후의 데이터베이스 일관성이 항상 유지되도록 한다.
완전한 트랜잭션 결과의 복구를 보장한다. 장애 발생 시 트랜잭션 실행의 원자성을 보장하 고 커밋된 트랜잭션의 결과는 반드시 데이터베이스에 반영되도록 지속성을 지원한다.
7.5. SQL 응용: 트랜잭션
7.5.1 트랜잭션의 개념
트랜잭션 지원 DBMS 모듈
이론적으로는 다양한 동시성 제어 및 회복 기법이 존재하지만 DBMS의 지원 기법은 대 부분 비슷하다.
7.5. SQL 응용: 트랜잭션
7.5.2 트랜잭션의 종류
트랜잭션은 설정 모드에 따라 [그림 7-7]과 같이 3가지 트랜잭션으로 구분할 수 있다.
7.5. SQL 응용: 트랜잭션
7.5.2 트랜잭션의 종류
명시적 트랜잭션: 사용자가 START TRANSACTION과 COMMIT 명령어를 직접 지정합니다. 주로 PostgreSQL과 MySQL에서 동일하게 사용됩니다.
7.5. SQL 응용: 트랜잭션
7.5.2 트랜잭션의 종류
명시적 트랜잭션 예
7.5. SQL 응용: 트랜잭션
7.5.2 트랜잭션의 종류
자동완료 트랜잭션: 각 SQL 명령어가 독립적인 트랜잭션으로 자동 처리됩니다.
PostgreSQL에서는 기본적으로 모든 명령어가 개별 트랜잭션 단위로 동작하며, MySQL과 달리 자동 커밋 모드 설정이 필요하지 않습니다.
MySQL의 자동완료 모드에서는 모든 SQL문장 하나하나가 실행되면 바로 커밋되기 때문에 롤백 명령문은 적용되지 않는다.
7.5. SQL 응용: 트랜잭션
7.5.2 트랜잭션의 종류
수동완료 트랜잭션: 트랜잭션의 시작은 자동으로 실행되며, 완료만 사용자가 직접 명시합니다. PostgreSQL에서도 수동 커밋이 필요한 경우가 있으며, BEGIN을 통해 트랜잭션을 시작하고 COMMIT 또는 ROLLBACK으로 종료합니다.
7.5. SQL 응용: 트랜잭션
7.5.2 트랜잭션의 종류
주의점 (MySQL과의 차이점)
MySQL은 자동 커밋 모드를 AUTOCOMMIT 설정을 통해 조정해야 하며, 기본값이 1로 자동 완료 모드가 설정되어 있습니다.
PostgreSQL은 기본적으로 자동 커밋 모드가 비활성화된 상태에서 작업을 진행하며, COMMIT을 명시적으로 호출해야만 변경사항이 반영됩니다.
7.5. SQL 응용: 트랜잭션
7.5.3 트랜잭션과 로그
PostgreSQL은 트랜잭션과 로그 관리가 중요한 특징입니다. 트랜잭션은 데이터 변경의 일관성을 보장하며 로그는 데이터 복구를 위한 필수 요소입니다.
트랜잭션 처리 과정
7.5. SQL 응용: 트랜잭션
7.5.3 트랜잭션과 로그
로그와 회복
7.5. SQL 응용: 트랜잭션
7.5.3 트랜잭션과 로그
로그의 구조와 예
7.5. SQL 응용: 트랜잭션
7.5.3 트랜잭션과 로그
로그의 기반 회복의 예
7.5. SQL 응용: 트랜잭션
7.5.4 트랜잭션과 로크
다중 사용자 환경에서 동시성 제어는 필수적입니다. PostgreSQL은 로크를 통해 데이터 무결성을 보장합니다.
바람직한 동시성 (concurrency)이란 2 개 이상의 트랜잭션을 동시에 실행하는 비직렬 스케쥴 (non-serial schedule) 의 결과가 트랜잭션을 뒤섞지 않고 순차적으로 실행하는 직렬 스케쥴 , (serial schedule) 의 결과와 같도록 보장하는 것이다. 이를 보장하는 트랜잭션 스케줄을 칙렬 가능(serializable)’이라고 한다. 직렬 가능성 (serializability)을 보장하기 위한 방법 중 하나가 로크를 이용하는 것이다.
7.5. SQL 응용: 트랜잭션
7.5.4 트랜잭션과 로크
로크 개념
7.5. SQL 응용: 트랜잭션
7.5.4 트랜잭션과 로크
로크의 종류
7.5. SQL 응용: 트랜잭션
7.5.4 트랜잭션과 로크
로크 설정 및 해제
로크는 트랜잭션 시작 시 설정하고, 트랜잭션 커밋 또는 롤백 시 해제합니다. 독점 로크와 공유 로크 2가지 유형의 로크 사이에는 서로 추가 잠금 허용 여부를 결정하는 로크 양립성(lock compatibility) 규칙이 있다.
7.5. SQL 응용: 트랜잭션
7.5.4 트랜잭션과 로크
2단계 로킹 규약과 로크 해제
단지 로크를 설정했다고 해서 동시성 제어가 완벽하게 이루어지지 않는다. 로크를 적절히 설정했더라도 로크를 너무 일찍 해제할 경우, 트랜잭션의 고립성이 손상되어 결국 데이터 일관성이 유지되지 않는다. 로크 설정과 로크 해제를 적절한 시점에 할 필요가 있다.
양단계 로킹 규약(2-phase locking protocol)은 각 트랜잭션별로 로크를 설정하는 과정과 로 크를 해제하는 과정 2단계로 진행함으로써 필요한 순간까지 획득한 로크를 유지하도록 하는 규칙이다.
7.5. SQL 응용: 트랜잭션
7.5.4 트랜잭션과 로크
2단계 로킹 규약과 로크 해제
7.5. SQL 응용: 트랜잭션
7.5.4 트랜잭션과 로크
교착 상태
로크를 적용하면 교착 상태에 빠질 수 있으므로 주의해야 한다. 교착 상태 (deadlock)는 둘 이상의 트랜잭션의 로크가 서로 얽혀서 영원히 풀리지 않는 상태를 말한다. 서로 필요한 데이터 중 일부에 대한 로크를 획득하고 서로 상대방이 획득한 로크가 풀리기를 기다리게 되면 교착 상태에 들어가게 된다.
7.5. SQL 응용: 트랜잭션
7.5.4 트랜잭션과 로크
트랜잭션 고립 수준
로크를 설정하는 목적은 적절한 수준에서 트랜잭션 동시 실행이 이루어지도록 하기 위해서 이다.
필요로 하는 트랜잭션의 실행 수준에 따른 다양한 고립 수준을 정의하고 상황에 맞는 적 절한 수준의 잠금 전략을 수행한다. 고립 수준(isolation level)은 트랜잭션이 다른 트랜잭션 과 고립되는 정도를 의미한다.
7.5. SQL 응용: 트랜잭션
7.5.4 트랜잭션과 로크
트랜잭션 고립 수준
4가지 트랜잭션 고립 수준이 있습니다.
7.5. SQL 응용: 트랜잭션
7.5.4 트랜잭션과 로크
트랜잭션 고립 수준
고립 수준에 따라 발생할 수 있는 문제 유형은 다음과 같다.
7.5. SQL 응용: 트랜잭션
7.5.4 트랜잭션과 로크
SET TRANSACTION ISOLATION LEVEL문
7.5. SQL 응용: 트랜잭션
7.5.4 트랜잭션과 로크
SET TRANSACTION ISOLATION LEVEL예
7.5. SQL 응용: 트랜잭션
7.5.4 트랜잭션과 로크
SET TRANSACTION ISOLATION LEVEL예
7.5. SQL 응용: 트랜잭션
7.5.4 트랜잭션과 로크
SET TRANSACTION ISOLATION LEVEL예
데이터베이스
연습문제
연습문제
08
정규화
학습목표
p. 283-314
8.1. 정규화: 정규화와 이상 현상
데이터베이스에서 많은 사용자가 동시에 사용하는 대량의 데이터를 효율적으로 구성하는 것은 중요한 문제입니다. 잘못된 스키마 정의는 데이터 중복과 이상 현상을 발생시킬 수 있으며, 이를 방지하기 위해 정규화가 필요합니다. 정규화는 데이터베이스 스키마를 올바르게 설계하는 방법입니다.
8.1. 정규화: 정규화와 이상 현상
8.1.1 정규화의 필요성
관계형 데이터베이스는 데이터를 테이블 형식으로 저장하며, 잘못된 설계는 데이터 중복과 무결성 훼손 등의 문제를 초래할 수 있습니다. 정규화는 이러한 문제를 최소화하여 데이터베이스의 효율성을 높입니다.
8.1. 정규화: 정규화와 이상 현상
8.1.2 이상 현상
이상 현상은 잘못된 스키마 설계로 인해 데이터 중복에서 발생하는 문제로, 삽입, 갱신, 삭제 시 원치 않는 결과를 초래할 수 있습니다.
8.1. 정규화: 정규화와 이상 현상
8.1.3 정규화의 개념
정규화는 데이터 중복을 줄이고 관련된 속성들만으로 릴레이션을 구성해 이상 현상을 방지하는 과정입니다. 각 릴레이션에는 하나의 종속성만 표현되도록 분해하여 효율적인 데이터베이스 구조를 만듭니다.
8.2. 정규화: 함수 종속성
함수 종속성은 같은 릴레이션 내 속성 간의 연관성을 분석하는 기준입니다. 주어진 속성 값이 다른 속성 값을 결정하는 관계를 의미하며, 이를 통해 릴레이션을 효과적으로 설계할 수 있습니다.
8.2. 정규화: 함수 종속성
8.2.1 함수 종속성 정의
함수 종속성은 속성 간에 특정 속성이 다른 속성을 결정할 때 형성됩니다. 예를 들어, 학생 정보에서 학번이 주어지면 이름, 주소 등 다른 속성 값이 자동으로 결정되는 관계입니다.
8.2. 정규화: 함수 종속성
8.2.1 함수 종속성 정의
8.2. 정규화: 함수 종속성
8.2.2 함수 종속 다이어그램
속성 간 함수 종속 관계를 시각화하는 다이어그램으로, 각 속성 간의 종속성을 직관적으로 이해할 수 있도록 돕습니다.
8.2. 정규화: 함수 종속성
8.2.2 함수 종속 다이어그램
8.3. 정규화: 기본 정규형
정규화는 데이터베이스에서 이상 현상을 방지하기 위해 릴레이션을 분해하는 과정이다. 정규형은 특정 조건을 만족해야 하며, 주로 제1정규형부터 제3정규형까지만 사용된다.
8.3. 정규화: 기본 정규형
8.3.1 정규형의 종류
정규형은 릴레이션이 만족해야 하는 특정한 함수 종속성을 정의하며, 높은 정규형일수록 조건이 엄격해진다. 일반적으로 제3정규형 이상을 충족하면 충분하다고 본다.
8.3. 정규화: 기본 정규형
8.3.2 제1정규형
제1정규형은 릴레이션의 모든 속성이 원자값(단일 값)을 가져야 한다. 예를 들어, 전화번호 속성이 여러 값을 가지면 제1정규형을 충족하지 못한다. 원자값을 가지도록 속성을 나누어야 하며, 이로 인해 중복 데이터와 삽입, 수정, 삭제 시 발생하는 이상 현상을 막을 수 있다.
8.3. 정규화: 기본 정규형
8.3.2 제1정규형
제 1 정규형의 문제점
‘수강_2' 릴레이션은 각 속성의 도메인이 원자 값이므로 제 1 정규형에 속한다. 그러나 실제 데이터 분석 시 불필요한 데이터 중복이 많아 삽입, 수정, 삭제 시 이상 현상이 발생할 수 있다.
(1-1) 삽입 이상
과목번호 ‘c006'인 과목의 개설학과가 ‘통계’라는 사실을 따로 삽입할 수 없다. {학번, 과목번호} 조합이 기본키이므로, 어떤 학생이 이 과목을 수강하지 않으면 ‘학번’ 속성 값이 NULL이 되어 기본키 제약 조건을 위배한다.
8.3. 정규화: 기본 정규형
8.3.2 제1정규형
제 1 정규형의 문제점
‘수강_2' 릴레이션은 각 속성의 도메인이 원자 값이므로 제 1 정규형에 속한다. 그러나 실제 데이터 분석 시 불필요한 데이터 중복이 많아 삽입, 수정, 삭제 시 이상 현상이 발생할 수 있다.
(1-2) 수정 이상
컴퓨터학과의 학과장이 변경될 경우, 모든 투플을 찾아 ‘학과장’ 속성 값을 일괄적으로 변경해야 한다. 불필요한 데이터가 여러 번 중복 저장되어 있어 일부만 변경할 경우 갱신 불일치 문제가 발생할 수 있다.
8.3. 정규화: 기본 정규형
8.3.2 제1정규형
제 1 정규형의 문제점
‘수강_2' 릴레이션은 각 속성의 도메인이 원자 값이므로 제 1 정규형에 속한다. 그러나 실제 데이터 분석 시 불필요한 데이터 중복이 많아 삽입, 수정, 삭제 시 이상 현상이 발생할 수 있다.
(1-3) 삭제 이상
과목번호 ‘c002' 과목에 관련된 유일한 투플을 삭제하면, 그 과목의 개설학과와 학과장 정보까지 함께 삭제되어 원하지 않는 정보가 사라진다.
8.3. 정규화: 기본 정규형
8.3.2 제1정규형
제 1 정규형의 문제점 해결
제 1 정규형을 충족하는 릴레이션의 이상 현상을 해결하기 위해 속성 간의 함수 종속성을 분석해야 한다. {학번, 과목번호}의 조합이 기본키이며, ‘학점’ 속성만 기본키에 완전 함수 종속되어 있다.
나머지 속성들은 기본키에 부분 함수 종속되어 있어 불필요한 데이터 중복이 발생한다. 이를 해결하기 위해 ‘수강_2' 릴레이션을 서로 연관성이 높은 속성끼리 3개의 릴레이션으로 분해해야 한다.
8.3. 정규화: 기본 정규형
8.3.2 제1정규형
무손실 분해
릴레이션 분해는 정보 손실 없이 동등한 릴레이션으로 분해해야 하며, 이를 무손실 분해(nonloss decomposition)라고 한다. 분해된 릴레이션은 자연 조인(natural join) 연산으로 원래의 릴레이션으로 복원할 수 있어야 하며, 그렇지 않으면 잘못된 분해가 된다. 분해할 때는 결정자와 그에 종속되는 속성들을 함께 떼어내고, 결정자는 분해 전의 릴레이션에 공통 속성으로 남겨두어야 한다.
8.3. 정규화: 기본 정규형
8.3.2 제1정규형
무손실 분해
[그림 8-7]의 함수 종속 관계를 고려하여 ‘수강_2' 릴레이션을 3개의 릴레이션으로 분해함으로써 데이터 중복을 줄이고 앞서 언급한 삽입, 수정, 삭제 이상의 발생을 방지할 수 있다.
제 1 정규형의 이상 원인은 기본키의 일부이면서 결정자 역할을 하는 속성이 존재하기 때문에 발생하며, 기본키의 부분 함수 종속성을 제거함으로써 문제를 해결할 수 있다.
8.3. 정규화: 기본 정규형
8.3.2 제1정규형
제 1 정규형의 문제점 해결
8.3. 정규화: 기본 정규형
8.3.3 제2정규형
제2정규형은 제1정규형을 충족하며, 기본키에 속하지 않는 모든 속성이 기본키에 완전 함수 종속이어야 한다. 제2정규형을 충족하지 못하는 경우 속성을 분해하여 부분 함수 종속을 제거하고, 불필요한 데이터 중복과 이상 현상을 방지할 수 있다.
8.3. 정규화: 기본 정규형
8.3.3 제2정규형
제 2 정규형의 문제점
‘수강_2' 릴레이션을 분해한 릴레이션 중 ‘과목_1’ 릴레이션은 과목 관련 속성들로 구성된 테이블이며 과목번호가 기본키이다. 이 릴레이션은 부분 함수 종속성이 없으므로 제 2 정규형에 속한다. 그러나 실제 데이터를 분석해보면 여전히 불필요한 데이터 중복이 있어 삽입, 수정, 삭제 시 이상 현상이 발생할 수 있다.
(2-1) 삽입 이상
과목개설학과인 ‘통계’학과의 학과장이 ‘홍장미’라는 사실만 따로 삽입할 수 없다. ‘과목번호’ 속성이 기본키이므로, 어떤 과목을 미리 등록하지 않으면 ‘과목번호’ 속성 값이 NULL이 되어 기본키 제약 조건을 위배한다.
8.3. 정규화: 기본 정규형
8.3.3 제2정규형
제 2 정규형의 문제점
‘수강_2' 릴레이션을 분해한 릴레이션 중 ‘과목_1’ 릴레이션은 과목 관련 속성들로 구성된 테이블이며 과목번호가 기본키이다. 이 릴레이션은 부분 함수 종속성이 없으므로 제 2 정규형에 속한다. 그러나 실제 데이터를 분석해보면 여전히 불필요한 데이터 중복이 있어 삽입, 수정, 삭제 시 이상 현상이 발생할 수 있다.
(2-2) 수정 이상
컴퓨터학과의 학과장이 변경될 경우, 여전히 과목개설학과 ‘컴퓨터’인 모든 투플을 찾아 ‘학과장’ 속성 값을 한꺼번에 변경해야 한다. ‘과목개설학과’에 대한 ‘학과장’ 속성 값이 불필요하게 중복 저장되어 있기 때문이다.
8.3. 정규화: 기본 정규형
8.3.3 제2정규형
제 2 정규형의 문제점
‘수강_2' 릴레이션을 분해한 릴레이션 중 ‘과목_1’ 릴레이션은 과목 관련 속성들로 구성된 테이블이며 과목번호가 기본키이다. 이 릴레이션은 부분 함수 종속성이 없으므로 제 2 정규형에 속한다. 그러나 실제 데이터를 분석해보면 여전히 불필요한 데이터 중복이 있어 삽입, 수정, 삭제 시 이상 현상이 발생할 수 있다.
(2-3) 삭제 이상
과목번호 ‘c002’의 등록을 취소하면 ‘경영’학과의 학과장 정보까지 함께 삭제되어, 다른 과목이 등록되어 있지 않다면 경영학과의 학과장 정보가 완전히 사라져버린다.
8.3. 정규화: 기본 정규형
8.3.3 제2정규형
제 2 정규형의 문제점 해결
제 2 정규형을 충족하는 ‘과목_1’ 릴레이션에서 삽입, 수정, 삭제 이상이 발생하는 이유는 둘 이상의 의미적 연관성을 하나의 릴레이션으로 함께 표현했기 때문이다. 이를 해결하기 위해 속성들 간의 함수 종속성을 분석해야 한다.
‘과목_1’ 릴레이션의 함수 종속성은 다음과 같다. 이 릴레이션의 이상 원인은 ‘학과장’ 속성이 기본키인 ‘과목번호’뿐만 아니라 ‘과목개설학과’ 속성에도 완전 함수 종속이기 때문이다. 이행적 종속 관계로 인해 불필요한 데이터의 중복이 발생한다.
8.3. 정규화: 기본 정규형
8.3.3 제2정규형
제 2 정규형의 문제점 해결
이행적 함수 종속성(transitive functional dependency)은 기본키에 속하지 않은 일반 속성 값이 다른 일반 속성 값을 결정함을 의미한다. 이 문제를 해결하려면 이행적 종속 관계를 끊어 두 종속 관계를 각기 다른 릴레이션에 표현해야 한다.
‘과목_1’ 릴레이션을 두 개의 릴레이션으로 분해하면 데이터 중복이 감소하고 앞서 지적한 삽입, 수정, 삭제 이상의 발생을 방지할 수 있다. 이행적 함수 종속성을 제거함으로써 문제를 해결할 수 있다.
8.3. 정규화: 기본 정규형
8.3.3 제2정규형
제 2 정규형의 문제점 해결
8.3. 정규화: 기본 정규형
8.3.3 제2정규형
제 2 정규형의 문제점 해결
8.3. 정규화: 기본 정규형
8.3.4 제3정규형
어떤 릴레이션 R이 제2정규형이고 기본키에 속하지 않는 모든 속성이 기본키에 이행적 함수 종속이 아니면, 제 3정규형에 속한다. 제 3정규형은 제 2정규형을 충족하는 릴레이션의 기본키가 아닌 일반 속성이 결정자인지를 검사한다. 일반 속성이 기본키 속성이 아닌 일반 속성에 종속적일 때 제 3정규형에 위배된다.
8.3. 정규화: 기본 정규형
8.3.4 제3정규형
8.3. 정규화: 기본 정규형
8.3.4 제3정규형
제3정규형의 문제점
제 3정규형만으로도 일반적인 중복성이 제거되므로 대부분의 경우 제 3정규형까지 정규화를 진행한다. 그러나 다음과 같은 경우 여전히 이상 현상이 발생할 수 있다.
8.3. 정규화: 기본 정규형
8.3.4 제3정규형
제3정규형 문제점 해결
문제 해결을 위해 속성 간의 함수 종속성을 분석할 수 있다. ‘수강_4’ 릴레이션의 함수 종속성을 분석하여 기본키가 아닌 결정자를 분리해 2개의 릴레이션으로 분해하면 데이터 중복이 감소하고 이상 현상이 발생하지 않게 된다.
8.3. 정규화: 기본 정규형
8.3.4 제3정규형
제3정규형 문제점 해결
8.3. 정규화: 기본 정규형
8.3.4 제3정규형
제3정규형 문제점 해결
8.3. 정규화: 기본 정규형
8.3.5 보이스코드 정규형
보이스코드 정규형 (Boyce Codd Normal Form)은 릴레이션 R의 모든 결정자가 후보키이면 릴레이션 R은 보이스코드 정규형에 속한다. 제 3정규형보다 강력하며, ‘강한 제 3 정규형’이라고도 한다.
8.3. 정규화: 기본 정규형
8.3.5 보이스코드 정규형
BCNF는 제 3정규형의 경우 여러 후보키가 존재할 때 발생할 수 있는 이상 현상을 해결하기 위해 정의되었다. 제 3정규형이더라도 기본키 속성이 기본키가 아닌 일반 속성에 종속적일 때 BCNF에 위배된다.
8.3. 정규화: 기본 정규형
8.3.5 보이스코드 정규형
8.3. 정규화: 기본 정규형
8.3.6 정규화의 적용
정규화는 릴레이션을 정보 표현 측면에서 동등하면서도 중복을 감소시키는 더 작은 릴레이션으로 무손실 분해하여 이상 현상을 제거하는 데이터베이스 설계 방법이다.
8.3. 정규화: 기본 정규형
8.3.6 정규화의 적용
8.3. 정규화: 기본 정규형
8.3.6 정규화의 적용
반정규화
반정규화(de-normalization)는 정규화의 반대 개념으로 ‘역정규화’라고도 한다. 정 규화와는 반대로 보다 낮은 수준의 정규형으로 릴레이션을 통합하는 것이다.
반정규화는 다음과 같은 다양한 과정을 포함한다.
데이터베이스
연습문제
연습문제
연습문제
09
E-R 모델
학습목표
p. 315-340
9.1. E-R 모델
현실 세계의 실체를 개체, 관계, 속성으로 표현하는 것이 E-R 모델의 핵심이다. 이 모델은 데이터베이스가 표현해야 하는 대상을 단순한 기호로 나타내며, 사용자와 개발자가 쉽게 소통할 수 있도록 돕는다.
9.1. E-R 모델
9.1.1. E-R 모델과 E-R 다이어그램
E-R 모델은 1976년 피터 첸이 제안한 개념적 모델링 방법이다. 이 모델의 장점은 그래픽 기호로 표현되는 E-R 다이어그램을 통해 이해하기 쉽게 만드는 것이다. 주요 요소는 사각형으로 표현되는 개체, 마름모로 표현되는 관계, 타원으로 표현되는 속성이다.
9.1. E-R 모델
9.1.2 개체
개체는 현실 세계에서 저장할 가치가 있는 데이터를 나타내며, 사람, 사물, 장소, 추상적 개념을 포함한다. 데이터베이스에서는 개체의 공통 특성을 모아 구조를 정의한다. 개체는 속성으로 구별되며, 각 속성에 대응하는 값을 정의하여 개체 인스턴스를 형성한다.
9.1. E-R 모델
9.1.2 개체
개체와 개체 타입, 개체 집합의 차이
개체는 실제 존재를 의미하고, 개체 집합은 동일 유형의 개체 인스턴스를, 개체 타입은 데이터베이스에 저장될 공통 특성만을 정의한 것이다.
9.1. E-R 모델
9.1.2 개체
관계형 모델과의 관계
9.1. E-R 모델
9.1.3 속성
속성은 개체나 관계의 고유한 특성이다.
9.1. E-R 모델
9.1.3 속성
1) 단일 값 속성과 다중 값 속성
특정 속성이 갖는 값이 하나이면 단일 값 속성(single-valued attribute)이라 한다. 보통 기본(default) 속성이 단일 값 속성이며 실선 타원으로 표시한다. 만약 개체가 갖는 속성 값이 여러 개이면 다중 값 속성(multivalued attribute)이며 이종 실선의 타원으로 표시한다.
9.1. E-R 모델
9.1.3 속성
2) 단순 속성과 복합 속성
단순 속성(simple attribute)은 의미적으로 더 이상 분해할 수 없는 속성이다. 기본 속성으로 대부분의 속성이 이에 속한다. 복합 속성(composite attribute)은 둘 이상의 속성으로 이루어져 의미적으로 더 작은 단위로 분해가 가능한 속성이다. 타원 모양의 상위 속성과 하위 속성을 실선 링크로 연결한다.
9.1. E-R 모델
9.1.3 속성
3) 저장 속성과 유도 속성
저장 속성(stored attribute)은 실제 값을 저장하는 속성이다. 기본 속성으로 대부분의 속성이 저장 속성이다. 유도 속성(derived attribute)은 값을 저장하지 않아도 다른 속성 값에서 계산되거나 유도될 수 있는 속성이다. 유도 속성은 E-R 다이어그램에서 점선의 타원으로 표시한다.
9.1. E-R 모델
9.1.3 속성
4) 키 속성
속성은 키 속성과 일반 속성으로 구분한다. 키 속성(key attribute)은 각 개체를 유일하게 식별할 수 있는 고유한 값을 갖는 속성이다. E-R 다이어그램에서 키 속성은 밑줄을 그어 표시한다.
9.1. E-R 모델
9.1.4 관계
관계는 개체 사이의 연관성을 나타낸다. 개체는 독립적 존재지만 관계는 개체 없이는 존재할 수 없다. 관계는 개체 타입들 사이의 연관성을 정의하며, 개체 간 상호 관계를 통해 의미를 확장할 수 있다.
9.1. E-R 모델
9.1.4 관계
9.1. E-R 모델
9.1.5 관계의 유형
사람과 사람, 사람과 사물, 사물과 사물 등 다양한 개체 간의 관계가 존재하며, 관계의 유형은 몇 가지로 제한할 수 있다.
9.1. E-R 모델
9.1.5 관계의 유형
분류기준1: 관계 카디널리티
최대 사상수: 관계에서 특정 개체와 연결된 상대 개체의 최대 수를 표시하며, 유형은
9.1. E-R 모델
9.1.5 관계의 유형
분류기준1: 관계 카디널리티
최대 사상수: 관계에서 특정 개체와 연결된 상대 개체의 최대 수를 표시하며, 유형은
9.1. E-R 모델
9.1.5 관계의 유형
분류기준1: 관계 카디널리티
최대 사상수: 관계에서 특정 개체와 연결된 상대 개체의 최대 수를 표시하며, 유형은
9.1. E-R 모델
9.1.5 관계의 유형
분류기준1: 관계 카디널리티
최대 사상수: 관계에서 특정 개체와 연결된 상대 개체의 최대 수를 표시하며, 유형은
9.1. E-R 모델
9.1.5 관계의 유형
분류기준1: 관계 카디널리티
최소 사상수: 특정 개체가 관계를 맺어야 하는 최소 수를 표시하며, 전체 참여(최소값 1)와 부분 참여(최소값 0)로 나뉜다.
9.1. E-R 모델
9.1.5 관계의 유형
분류기준1: 관계 카디널리티
최소 사상수: 특정 개체가 관계를 맺어야 하는 최소 수를 표시하며, 전체 참여(최소값 1)와 부분 참여(최소값 0)로 나뉜다.
9.1. E-R 모델
9.1.5 관계의 유형
분류기준2: 관계차수
9.1. E-R 모델
9.1.5 관계의 유형
분류기준3: 관계의 종속성
9.1. E-R 모델
9.1.5 관계의 유형
9.1. E-R 모델
9.1.5 관계의 유형
E-R 다이어그램 표기법
개체와 관계는 각각 고유한 표기법으로 E-R 다이어그램에 표시되며, 다양한 관계와 개체 간의 관계를 시각적으로 나타낸다.
9.2. E-R 다이어그램
지금까지 살펴본 E-R 다이어그램의 기호들을 정리하고 실제 예시를 통해 적용 방법을 이해해 보자.
9.2. E-R 다이어그램
9.2.1 E-R 다이어그램의 표기법 요약
초기 E-R 다이어그램은 사각형, 마름모, 타원, 그리고 연결 선으로만 구성되었지만, 더 상세하고 정확한 모델링을 위해 다양한 기호가 추가되며 확장되었다. 표기법 요약은 <표 9-1>에 있다. 다이어그램 작성 시, 기호의 의미와 제한 사항을 충분히 이해하지 못해 흔히 발생하는 오류들이 있다.
9.2. E-R 다이어그램
9.2.1 E-R 다이어그램의 표기법 요약
[그림 9-24]는 올바른 표기법과 잘못된 예시를 보여준다. 속성, 개체, 관계가 직접 링크로 연결될 수 없으며, 관계는 최소 두 개 이상의 개체와 연결되어야 한다.
9.2. E-R 다이어그램
9.2.2 E-R 다이어그램의 작성 예
수강 신청 데이터베이스를 위한 간단한 E-R 다이어그램을 작성해 보자. ‘교수’, ‘강의실’, ‘교과목’ 개체를 도출하여 사각형으로 표시하고, ‘강의’를 관계로 추가하며 속성도 연결한다.
9.2. E-R 다이어그램
9.2.2 E-R 다이어그램의 작성 예
‘교과목’ 개체에 ‘학생’을 추가하고, ‘수강신청’, ‘수강취소’ 관계를 연결하며, 신청일자와 취소일자 속성도 추가한다.
9.2. E-R 다이어그램
9.2.2 E-R 다이어그램의 작성 예
‘학생’ 개체에 ‘보호자’ 개체를 추가하고 ‘보호’ 관계를 연결하며 이름과 관계 속성을 포함한다. 이 과정을 통해 수강 신청 E-R 다이어그램의 완성본을 [그림 9-26]에서 확인할 수 있다.
9.2. E-R 다이어그램
9.2.2 E-R 다이어그램의 작성 예
완성된 E-R 다이어그램에서는 누락된 키 속성 및 카디널리티 표시를 확인하여 각 개체와 관계가 올바르게 연결되었는지 점검한다.
데이터베이스
연습문제
연습문제
10
데이터베이스 설계
학습목표
p. 341-377
10.1. 데이터베이스 설계
데이터베이스 설계는 정보 시스템 개발 과정에서 핵심적인 기초 단계입니다. 건축물 설계 도면을 작성하는 것처럼 데이터베이스 설계는 매우 중요합니다. 이 과정에서는 데이터베이스 설계 과정과 예시를 알아봅니다.
10.1.1 데이터 모델링과 데이터 모델
데이터베이스는 현실 세계를 빠르고 정확하게 반영해야 하기 때문에 구조가 매우 중요합니다.
10.1. 데이터베이스 설계
10.1.1 데이터 모델링과 데이터 모델
데이터 모델링
개발자들은 경험에 의존하여 데이터베이스 구조를 쉽게 결정하려 하지만, 이는 어려운 작업입니다. 데이터베이스 모델링은 데이터베이스 구조를 체계적으로 설계하기 위해 필요한 절차입니다. 데이터 모델링은 개념적 모델링, 논리적 모델링, 물리적 모델링의 세 단계로 이루어집니다. 각 단계에서는 다양한 데이터 모델을 사용하여 데이터베이스 구조를 명세화합니다.
10.1. 데이터베이스 설계
10.1.1 데이터 모델링과 데이터 모델
데이터 모델 종류
사용자의 요구 사항을 분석하는 단계로, E-R 모델을 사용하여 개체(Entity)와 관계(Relationship)를 표현합니다.
10.1. 데이터베이스 설계
10.1.1 데이터 모델링과 데이터 모델
데이터 모델 종류
개념적 모델을 논리적 데이터 모델로 변환하여, 특정 DBMS와 독립적으로 관계형 데이터베이스 구조를 설계합니다.
10.1. 데이터베이스 설계
10.1.1 데이터 모델링과 데이터 모델
데이터 모델 종류
논리적 데이터 모델을 특정 DBMS에 맞게 최적화하여 물리적인 데이터 구조를 명세화합니다.
10.1. 데이터베이스 설계
10.1.2 데이터베이스 설계 과정
데이터베이스 설계는 총 5단계로 진행되며, 각각의 단계는 설계 품질을 높이기 위해 반복적 검토가 이루어질 수 있습니다.
사용자 요구사항을 수집하고 분석하여 요구사항 명세서를 작성합니다.
요구사항 명세서를 기반으로 E-R 다이어그램을 작성하여 개념적 스키마를 완성합니다.
10.1. 데이터베이스 설계
10.1.2 데이터베이스 설계 과정
E-R 다이어그램을 논리적 스키마로 변환하고, 관계형 데이터 모델에 맞게 릴레이션을 정의합니다.
논리적 스키마를 바탕으로 DBMS의 특성에 맞는 내부 저장 구조와 접근 방식을 설계합니다.
물리적 스키마를 SQL 명령문을 통해 실제 데이터베이스로 구현합니다.
이 과정은 단계별로 검증과 보완이 이루어지며, 최종적으로 정제된 설계 결과를 도출합니다.
10.1. 데이터베이스 설계
10.1.2 데이터베이스 설계 과정
핵심 요약
데이터베이스 모델링은 E-R 다이어그램을 작성하는 개념적 모델링에 중점을 두며, 데이터베이스 설계는 이를 논리적 데이터 모델로 변환하는 논리적 데이터 설계에 중점을 둡니다.
10.2. 요구사항분석
데이터베이스 설계 과정의 첫 단계인 요구사항 명세서를 작성하며, 병원 데이터베이스 구축을 예시로 간단한 논리적 스키마 설계를 시작한다.
10.2.1 요구사항 명세
데이터베이스의 구현 범위와 사용자를 결정하고, 예비 사용자들로부터 수집한 요구 사항을 분석하여 문서화한다.
분석가는 사용자의 요구 사항을 정확히 반영한 명세서를 작성하며, 최종적으로 사용자의 확인을 받는다.
10.2. 요구사항분석
10.2.2 요구사항 명세서(병원 DB)의 작성
10.2. 요구사항분석
10.2.2 요구사항 명세서(병원 DB)의 작성
10.3. 개념적 설계
개념적 설계 단계에서는 데이터베이스의 전체 구조를 결정하고, E-R 다이어그램을 작성한다. 요구사항 명세서로부터 개체, 관계, 속성을 도출하여 표현한다.
10.3. 개념적 설계
10.3.1 개체 정의
10.3. 개념적 설계
10.3.2 관계 정의
10.3. 개념적 설계
10.3.3 속성 정의
10.3. 개념적 설계
10.3.4 E-R 다이어그램 작성
요구사항 명세서에서 도출한 개체, 관계, 속성을 기반으로 E-R 다이어그램을 작성한다.
개체는 사각형, 관계는 마름모, 속성은 타원형으로 표현하며, 중복되는 용어는 하나의 표준 용어로 통일한다.
10.3. 개념적 설계
10.3.4 E-R 다이어그램 작성
E-R 다이어그램 작성 과정에서는 명세서의 문장을 데이터 중심의 관점에서 분석하고, 최종적으로 사용자의 요구사항을 완전히 반영하도록 한다.
10.3. 개념적 설계
10.3.4 E-R 다이어그램 작성
병원 데이터베이스의 E-R 다이어그램 예시는 환자, 의사, 병실, 진료 등의 관계와 속성을 시각적으로 표현한 결과이다.
10.4. 논리적 설계
논리적 설계 단계에서는 개념적 설계에서 만들어진 E-R 다이어그램을 특정 데이터 모델(주로 관계형 데이터 모델)에 따라 논리적 스키마로 변환합니다.
관계형 데이터베이스에서는 모든 개체와 관계를 릴레이션으로 표현하므로 E-R 다이어그램을 릴레이션 스키마로 변환하는 과정이 필요합니다.
10.4. 논리적 설계
10.4.1 개체 변환
개체는 기본적으로 하나의 릴레이션으로 변환되며, 이 릴레이션을 '개체 릴레이션'이라 부릅니다.
개체의 키 속성은 릴레이션의 기본키로, 일반 속성은 릴레이션의 속성으로 변환됩니다.
예시: '의사' 개체는 '의사번호', '이름', '진료과목' 속성을 포함한 '의사' 릴레이션으로 변환되며, '의사번호'가 기본키가 됩니다.
10.4. 논리적 설계
10.4.2 관계 변환
관계는 관계의 카디널리티(1:n, 1:1, m:n)에 따라 변환 과정이 다릅니다.
일대다(1:n) 관계: '일'측 개체의 기본키를 '다'측 개체 릴레이션의 외래키로 추가하여 변환합니다. 예를 들어, '진료과'의 '과번호'를 '의사' 릴레이션에 '소속진료과번호'로 추가하고 외래키로 정의합니다.
10.4. 논리적 설계
10.4.2 관계 변환
관계는 관계의 카디널리티(1:n, 1:1, m:n)에 따라 변환 과정이 다릅니다.
일대일(1:1) 관계: 한쪽 릴레이션의 기본키를 다른 쪽 릴레이션의 외래키로 추가합니다. 양쪽 모두 외래키를 가질 필요는 없으며, 데이터 중복을 피하기 위해 한쪽만 외래키로 정의할 수 있습니다.
10.4. 논리적 설계
10.4.2 관계 변환
관계는 관계의 카디널리티(1:n, 1:1, m:n)에 따라 변환 과정이 다릅니다.
다대다(m:n) 관계: 다대다 관계는 독립된 새로운 릴레이션으로 변환되며, 관계의 두 개체 릴레이션의 기본키를 외래키로 포함합니다. 이 외래키들의 조합을 새로운 릴레이션의 기본키로 지정합니다.
예시: '진료' 릴레이션은 '의사번호'와 '환자주민등록번호'를 외래키로 가지며, 이 두 속성의 조합이 기본키가 됩니다.
10.4. 논리적 설계
10.4.3 논리적 스키마 작성
개념적 설계의 E-R 다이어그램을 논리적 데이터베이스 스키마로 변환한 최종 결과물은 물리적 설계 단계로 이어집니다. 물리적 설계에서는 논리적 설계 결과를 DBMS의 특성에 맞춰 열의 데이터 유형, 크기, 제약 조건, 인덱스 등을 정의하며, 역정규화도 고려할 수 있습니다.
10.4. 논리적 설계
10.4.3 논리적 스키마 작성
논리적 설계와 물리적 설계를 통해 DBMS에 실제 저장 구조를 생성할 수 있으며, 이 과정은 많은 경험을 필요로 합니다. 설계 단계에서 해석과 주관적인 해결 방안이 다를 수 있어 일관된 결과를 얻기 어려운 경우도 있습니다.
10.5. ERwin 실습
ERwin은 ER 다이어그램을 작성하기 위한 대표적인 데이터 모델링 도구입니다. ERwin에서는 논리적 모델링과 물리적 모델링을 통합하여 작업할 수 있습니다.
ERwin 대신 erdplus.com을 상요하겠습니다.
10.5. ERwin 실습
10.5.1 ERwin의 기본 화면 구성
10.5. ERwin 실습
10.5.1 ERwin의 기본 화면 구성
10.5. ERwin 실습
10.5.2 ERwin의 기본 환경 설정
10.5. ERwin 실습
10.5.2 ERwin의 기본 환경 설정
1) 적용할 모델의 유형과 대상 DBMS의 종류를 선택한다.
10.5. ERwin 실습
10.5.2 ERwin의 기본 환경 설정
2) 1E 표기법으로 변경한다.
10.5. ERwin 실습
10.5.2 ERwin의 기본 환경 설정
10.5. ERwin 실습
10.5.3 IE 표기법
9장과 10장에서 사용된 E-R 모델 표기법은 피터 첸(Peter Chen)의 고전적인 방법입니다.
다양한 데이터 모델링 도구에서 IE(Information Engineering) 표기법과 바커(Baker) 표기법 등을 제공합니다. 이 책에서는 ERwin의 IE 표기법을 사용한 ER 다이어그램 작성 방법을 설명합니다.
여기서는 기존의 '개체' 대신 '엔터티'라는 용어를 사용하고, 'E-R 다이어그램' 대신 'ER 다이어그램'이라고 표기합니다.
10.5. ERwin 실습
10.5.3 IE 표기법
엔터티 표현
IE 표기법에서는 엔터티와 속성을 사각형으로 표현하며, 사각형은 세 부분으로 나뉩니다.
[그림 10-16]에서 기존 E-R 표기법과 IE 표기법을 비교할 수 있습니다.
10.5. ERwin 실습
10.5.3 IE 표기법
엔터티 표현
10.5. ERwin 실습
10.5.3 IE 표기법
관계선 표현
IE 표기법에서는 마름모 대신 관계선을 사용해 엔터티를 연결하며, 다양한 기호를 통해 관계의 카디널리티(참여도)를 표현합니다.
10.5. ERwin 실습
10.5.3 IE 표기법
관계선 표현
10.5. ERwin 실습
10.5.3 IE 표기법
관계선 표현
10.5. ERwin 실습
10.5.3 IE 표기법
관계선 표현
10.5. ERwin 실습
10.5.3 IE 표기법
관계선 표현
10.5. ERwin 실습
10.5.3 IE 표기법
관계선의 유형
[그림 10-17]에서는 다양한 관계선 유형을 보여줍니다.
부모 엔터티에서 자식 엔터티로 일대일 또는 일대다 관계를 표현하며, 'I' 기호는 1, 'n' 기호는 다수를 나타냅니다.
'o' 기호는 부분 참여를 의미하고, 기호가 없으면 전체 참여를 의미합니다.
10.5. ERwin 실습
10.5.4 1E 표기법의 적용 예
IE 표기법에 따른 엔터티와 다양한 관계 카디널리티를 갖는 관계선의 표현 예제를 살펴보자.
일대일 (1:1) 관계 예
'간병' 관계는 강 엔터티 간의 관계이므로 IE 표기법에서 비식별(non-identifying) 관계선인 점선으로 연결된다. ‘간병인’ 엔터티는 선택적인 관계를 표현하고, '환자' 엔터티는 최대 1명의 간병인만을 가질 수 있는 선택적 관계를 표현한다. ‘간병인’ 엔터티의 기본 키는 ‘환자’ 엔터티의 외래 키로 자동 추가된다.
10.5. ERwin 실습
10.5.4 1E 표기법의 적용 예
IE 표기법에 따른 엔터티와 다양한 관계 카디널리티를 갖는 관계선의 표현 예제를 살펴보자.
일대다(1:n) 관계 예
'소속' 관계는 점선으로 연결된다. ‘진료과’ 엔터티는 필수적으로 의사에게 소속되어야 하고, 의사는 여러 진료과에 소속될 수 있다. 자동으로 추가된 외래 키 속성은 ‘소속진료과번호’로 변경된다.
10.5. ERwin 실습
10.5.4 1E 표기법의 적용 예
IE 표기법에 따른 엔터티와 다양한 관계 카디널리티를 갖는 관계선의 표현 예제를 살펴보자.
다대다(m:n) 관계 예
다대다 관계는 중간 엔터티를 통해 변환된다. 예를 들어 ‘의사’와 ‘환자’ 간의 관계는 ‘진료’라는 중간 엔터티를 통해 표현된다. 각 엔터티의 기본 키는 중간 엔터티의 외래 키로 자동 추가된다.
10.5. ERwin 실습
10.5.4 1E 표기법의 적용 예
10.5. ERwin 실습
10.5.4 1E 표기법의 적용 예
순환관계 예
엔터티가 자신과 관계를 맺는 순환 관계는 비식별 관계로 실선으로 연결된다. 예를 들어, ‘의사’ 엔터티는 자신과 순환 관계를 맺고, 지도 교수를 선택적으로 가질 수 있다.
10.5. ERwin 실습
10.5.4 1E 표기법의 적용 예
약엔터티의 식별 관계 예
'보유' 관계는 식별 관계로 실선으로 연결된다. ‘병실’과 ‘침대’는 병실번호를 기본 키로 공유하며, ‘침대’ 엔터티의 기본 키는 ‘병실’ 엔터티의 외래 키로 추가된다.
10.5. ERwin 실습
10.5.4 1E 표기법의 적용 예
일반화관계 예
상위 엔터티와 하위 엔터티 간의 일반화 관계는 실선으로 연결된다. 상위 엔터티의 키 속성은 하위 엔터티의 키 속성으로 상속된다.
10.5. ERwin 실습
10.5.4 1E 표기법의 적용 예
ERwin을 이용한 IE 표기법 변환
논리적 모델 변환
ERwin을 이용해 IE 논리적 모델로 변환할 수 있으며, 이를 통해 전체 스키마 구조를 직관적으로 파악할 수 있다.
10.5. ERwin 실습
10.5.4 1E 표기법의 적용 예
ERwin을 이용한 IE 표기법 변환
논리적 모델 변환
ERwin을 이용해 IE 논리적 모델로 변환할 수 있으며, 이를 통해 전체 스키마 구조를 직관적으로 파악할 수 있다.
10.5. ERwin 실습
10.5.4 1E 표기법의 적용 예
ERwin을 이용한 IE 표기법 변환
물리적 모델 변환
ERwin의 논리적 모델을 기반으로 물리적 모델을 쉽게 변환할 수 있다. 물리적 모델은 데이터 유형과 같은 속성을 추가하여 실제 DBMS의 테이블 구조를 표현한다.
10.5. ERwin 실습
10.5.4 1E 표기법의 적용 예
SQL 자동생성
ERwin에서 정의된 물리적 모델은 SQL 명령문을 자동으로 생성하여 실제 데이터베이스의 테이블을 만들 수 있다. 이를 통해 Oracle DBMS에서 사용할 수 있는 스키마 생성 SQL을 자동으로 생성한다.
데이터베이스
연습문제
연습문제
11
데이터웨어하우스와 데이터베이스 응용
학습목표
p. 380-420
11.1. 데이터웨어하우스 개념
11.1.1 데이터웨어하우스의 출현 배경
데이터베이스에 많은 데이터가 축적되면서 의사결정을 돕는 ‘데이터웨어하우스’가 등장했습니다. 기존 정보 시스템의 문제는 다음과 같습니다:
11.1. 데이터웨어하우스 개념
11.1.1 데이터웨어하우스의 출현 배경
11.1. 데이터웨어하우스 개념
11.1.1 데이터웨어하우스의 출현 배경
데이터베이스는 즉각적인 업무 처리를 위한 OLTP(Online Transaction Processing) 환경에적합한 데이터 저장소이다. 신속한 데이터 처리에 비해 상대적으로 데이터 분석은 느리고많은 제한을 가지므로 바효율적이다.
해결 방안은 업무용 데이터와 분석용 데이터의 저장소를 분리하는 것이다. 데이터베이스는 업무 트랜잭션 처리를 위한 운영 저장소로 사용하고 분석을 위한 새로운 저장소를 구축하는 방식인데 바로 데이터웨어하우스이다.
11.1. 데이터웨어하우스 개념
11.1.2 데이터웨어하우스의 정의
데이터웨어하우스는 의사결정을 위한 통합 데이터 저장소입니다. 주요 특성은 다음과 같습니다:
대학의 예를 들면, 데이터웨어하우스는 학생, 교수, 과목, 학과 등 분석하고자 하는 주제 중심으로 구성된다. 주제별로 요약되어 있어 학과뿐만 아니라 학생별 교수별 과목별로 다양한 분석이 가능하다.
11.1. 데이터웨어하우스 개념
11.1.2 데이터웨어하우스의 정의
데이터웨어하우스는 의사결정을 위한 통합 데이터 저장소입니다. 주요 특성은 다음과 같습니다:
남녀 성별 데이터의 경우, ‘m’과 ‘f' 또는 ‘1’과 ‘0', ‘남’과 ‘여’, ‘male’과'female' 등 다양하다. 분석을 위해서는 하나의 통일된 형식으로 변환이 필요하다.
11.1. 데이터웨어하우스 개념
11.1.2 데이터웨어하우스의 정의
데이터웨어하우스는 의사결정을 위한 통합 데이터 저장소입니다. 주요 특성은 다음과 같습니다:
과거부터 현재까지 여러 시점의 데이터가 모두 의미가 있다.추이 분석을 위해서는 각 시점에서의 데이터 버전 즉, 스냅샷(snapshot)을 저장하는 것이 중요하다.
11.1. 데이터웨어하우스 개념
11.1.2 데이터웨어하우스의 정의
데이터웨어하우스는 의사결정을 위한 통합 데이터 저장소입니다. 주요 특성은 다음과 같습니다:
데이터웨어하우스는 수정이나 삭제가 거의 없는 일종의 겁색 전용 데이터베이스이다. 데이터가 일단 저장되면 검색이나 추가적 적재만 발생할 뿐 갱신과 삭제는 거의 발생하지 않는다.
11.1. 데이터웨어하우스 개념
11.1.2 데이터웨어하우스의 정의
데이터베이스와 데이터웨어하우스의 비교
데이터웨어하우스가 필요한 가장 큰 이유는 의사 결정에 필요한 올바른 정보(right information)를 올바른 형식(right form)으로 적시(right time)에 제공하기 위해서이다.
데이터웨어하우스는 의사 결정을 위한 맞촘 형식으로 구축되고 전적으로 데이터 분석 용도로 사용된다.
11.1. 데이터웨어하우스 개념
11.1.3 데이터웨어하우스 시스템
데이터웨어하우스 시스템은 3계층 구조로 구성됩니다:
11.1. 데이터웨어하우스 개념
11.1.3 데이터웨어하우스 시스템
데이터웨어하우스 구축 방식
데이터 마트는 일부 사용자만을 위해 주제 범위를 제한하여 구축한 작은 데이터 저장소입니다. 데이터 마트는 부서 단위로 빠르게 요구를 반영할 수 있어 인기가 높습니다.
11.1. 데이터웨어하우스 개념
11.1.3 데이터웨어하우스 시스템
데이터웨어하우스의 장점
데이터웨어하우스가 구축되면 분석 속도가 빨라지고, 수작업으로 시간이 오래 걸리던 정형 보고서도 빠르게 생성할 수 있습니다. 이는 조직의 운영과 전략을 지원하는 핵심 인프라로 자리 잡게 됩니다.
정형 보고서는 미리 개발된 고정된 형식의 보고서로, 데이터를 요약 테이블에 저장하여 빠르게 생성됩니다.
비정형 보고서는 사용자의 요청에 따라 동적으로 생성되며, 시스템 성능에 따라 시간이 더 소요될 수 있습니다.
11.2. 데이터웨어하우스 설계
11.2.1 다차원 모델링
다차원 모델링은 데이터베이스와 달리, 데이터웨어하우스는 데이터의 다차원성을 고려하여 구조화합니다. 이는 다양한 분석 관점에서 데이터를 조회할 수 있도록 합니다. 다차원 모델링에서는 여러 데이터 소스를 통합하고 조회 중심의 구조를 가지며, 이력 데이터를 포함하고 빠른 조회를 위해 비정규화를 활용합니다.
11.2. 데이터웨어하우스 설계
11.2.1 다차원 모델링
다차원 모델링 과정에서 고려해야 하는 데이터웨어하우스의 주요 특징은 다음과 같다.
11.2. 데이터웨어하우스 설계
11.2.1 다차원 모델링
다차원 데이터베이스(MDB)는 분석 전용으로 설계된 데이터베이스로, 큐브 구조를 사용하여 데이터를 저장합니다. 큐브의 셀 안에는 모든 차원 멤버의 조합에 따른 값이 저장되며, 해싱과 캐싱을 통해 빠른 검색이 가능합니다. 하지만, 차원이 많아질수록 데이터 크기가 급격히 증가하는 단점이 있습니다.
11.2. 데이터웨어하우스 설계
11.2.1 다차원 모델링
다차원 질의(Multi-dimensional query)는 데이터를 다양한 관점에서 분석할 수 있도록 하는 기능입니다. 슬라이싱(Slicing)은 큐브의 단면을 분석하고, 다이싱(Dicing)은 작은 부분 큐브를 분석합니다. 피보팅(Pivoting)은 큐브의 축을 변경하여 분석하는 방식입니다.
11.2. 데이터웨어하우스 설계
11.2.1 다차원 모델링
다차원 모델
11.2. 데이터웨어하우스 설계
11.2.1 다차원 모델링
다차원 모델
11.2. 데이터웨어하우스 설계
11.2.1 다차원 모델링
다차원 모델
11.2. 데이터웨어하우스 설계
11.2.2 스타 스키마
차원 모델링(dimensional modeling)은 관계형 스키마 구조에 차원성을 부여하는 설계 방법이다. 테이블들이 입체적인 다양한 연관성을 가질 수 있도록 주제 중심의 스키마 구조로 변환한다. 차원 모델링에 사용되는 대표적인 모델은 스타 스키마이다.
11.2. 데이터웨어하우스 설계
11.2.2 스타 스키마
스타 스키마(Star schema)는 관계형 데이터베이스에서 차원 모델링을 수행하는 대표적인 방식입니다. 하나의 사실 테이블(fact table)을 중심으로 여러 차원 테이블(dimension table)이 연결된 방사형 구조로, 조인 횟수를 줄여 조회 속도를 향상시킵니다.
11.2. 데이터웨어하우스 설계
11.2.2 스타 스키마
사실 테이블은 측정값이나 집계값을 저장하며, 예를 들어 판매량, 매출액 등이 여기에 포함됩니다. 차원 테이블은 사실 테이블의 데이터를 설명하는 특정 관점(예: 대리점명, 분기명)을 저장합니다.
11.2. 데이터웨어하우스 설계
11.2.2 스타 스키마
예를 들어, 대학 조직의 장학금 분석에서는 시간(연도/학기/월)과 조직(대학교/단과대학/학과)의 차원 테이블과 장학금액 등의 사실 테이블로 스키마를 구성할 수 있습니다.
11.2. 데이터웨어하우스 설계
11.2.2 스타 스키마
스타 스키마는 SQL을 이용하여 간단한 다차원 분석을 수행할 수 있다. 예를 들어, 연도별단과대학 장학 현황을 분석하고자 할 경우 다음과 같이 SQL문을 작성한다.
11.2. 데이터웨어하우스 설계
11.2.3 스노우플레이크 스키마
스노우플레이크 스키마(Snowflake Schema)는 데이터 중복을 줄이기 위해 차원 테이블을 정규화한 구조로, 스타 스키마의 변형된 형태입니다. 구조가 눈송이처럼 생겨서 스노우플레이크 스키마라고 불립니다.
예를 들어, '조직' 차원 테이블이 '학과', '단과대학', '대학교'로 나뉘며 정규화됩니다. '시간' 차원 테이블도 '월', '학기', '연도'로 분리됩니다.
11.2. 데이터웨어하우스 설계
11.2.3 스노우플레이크 스키마
이로 인해 차원 테이블이 더 세분화되어 SQL 쿼리가 복잡해질 수 있습니다.
일반적으로 스타 스키마는 응답 시간이 빠르고 구조가 간단하여 이해하기 쉬워 많이 사용됩니다.
11.2. 데이터웨어하우스 설계
11.2.3 스노우플레이크 스키마
은하수 스키마
은하수 스키마(Galaxy Schema)는 여러 스타 스키마가 결합된 구조로, 여러 사실 테이블들이 동일한 차원 테이블을 공유합니다. 성운 스키마라고도 하며, 다양한 데이터 분석 요구에 유연하게 대응할 수 있습니다.
11.2. 데이터웨어하우스 설계
11.2.3 스노우플레이크 스키마
스타스키마와스노우플레이크스키마의 비교
11.2. 데이터웨어하우스 설계
11.2.3 스노우플레이크 스키마
다차원 모델링의 예
지난 12개월 동안 2개 학과에서 개설한 3개 과목의 수강 실적을 분석하기 위해 다차원 모델링을 적용할 수 있습니다.
관계형 데이터베이스를 사용한 경우, 스타 스키마로 설계할 수 있으며, 다차원 데이터베이스로 설계하면 더 효율적인 구조를 얻을 수 있습니다.
11.3. OLAP
11.3.1 OLAP의 정의
OLAP(Online Analytical Processing)은 데이터웨어하우스에서 다차원 분석을 가능하게 하는 기술입니다. OLAP은 데이터베이스의 OLTP(On Line Transaction Processing)와는 반대 개념으로, 사용자가 직접 대규모 데이터를 동적으로 분석하여 의사 결정을 돕습니다. OLAP의 핵심은 다차원 분석(FASMI: Fast Analysis of Shared Multi-dimensional Information)입니다.
11.3. OLAP
11.3.1 OLAP의 정의
OLAP의 정의와 특성
11.3. OLAP
11.3.2 OLAP의 종류
11.3. OLAP
11.3.2 OLAP의 종류
어떤 OLAP을 선택할지에 대한 결정은 얼마나 빠른 웅답 시간을 요구하고 얼마나 복잡한질의를 사용할 것인지에 따라 다르다. 〈표 11-3〉은 3가지 OLAP 방식을 비교 분석한 내용이다.
11.3. OLAP
11.3.3 OLAP 연산 기능
OLAP 도구는 다음과 같은 표준 연산을 지원합니다:
큐브는 단과대학별 요약이 아니라 공과대학 소속의 개별 학과별 총 도서 대출권수를 상세히 보여준다.
11.3. OLAP
11.3.3 OLAP 연산 기능
OLAP 도구는 다음과 같은 표준 연산을 지원합니다:
‘Department’에서 ‘School' 수준으로, 다시 ‘Level' 수준으로 상승하면서 데이터를 학과별로 묶는 대신 학부와 대학원별로 데이터를 묶는다.
11.3. OLAP
11.3.3 OLAP 연산 기능
OLAP 도구는 다음과 같은 표준 연산을 지원합니다:
예를 통해 2010년 학부생이 대출한 도서의 총 대출권수가 10권임을 분석할 수 있다.
11.3. OLAP
11.3.3 OLAP 연산 기능
OLAP 도구는 다음과 같은 표준 연산을 지원합니다:
예를 들면, 가로축에 시간 정보를, 세로축에 조직 정보를 배치한 분석 보고서를 가로축과 세로축을 서로 맞바꾸어 새로운 분석 양식을 생성할 수 있다.
11.3. OLAP
11.3.3 OLAP 연산 기능
OLAP 도구는 다음과 같은 표준 연산을 지원합니다:
예를 들면, 월별 매출 요약 정보를 분석하다가 매출이 급감한 특정 월에 대해서 일별, 또는 시간별 매출 정보를 상세하게 분석할 수 있다.
11.3. OLAP
11.3.3 OLAP 연산 기능
OLAP 도구는 다음과 같은 표준 연산을 지원합니다:
예를 들어, 사용자가 ‘매출’ 큐브를 분석하는 과정에서 판교 매장에서 휴대폰의 매출액이 급격히 증가하고 있음을 발견했다면 사용자는 재고’ 큐브로 드릴-어크로스하여 각 매장별로 부족한 휴대폰의 재고량을 조절할 수 있다.
OLAP의 이러한 기능들은 사용자가 다차원 데이터를 효과적으로 분석하고 의사 결정을 내리는 데 도움을 줍니다.
11.4. 데이터베이스 응용
현대 데이터베이스는 다양한 요구사항을 수용하기 위해 확장된 형태로 발전하였습니다. 이 중 대표적인 응용 분야를 살펴보겠습니다.
11.4.1 분산 데이터베이스
정의: 분산 데이터베이스는 물리적으로 분산된 여러 데이터베이스를 네트워크로 연결하여 하나의 중앙 집중형 데이터베이스처럼 사용 가능한 시스템입니다.
분산 데이터 독립성: 사용자나 프로그램이 데이터의 분산 여부를 인식할 필요가 없으며, DBMS가 이를 관리합니다.
11.4. 데이터베이스 응용
11.4.1 분산 데이터베이스
5가지 투명성:
11.4. 데이터베이스 응용
11.4.1 분산 데이터베이스
[그림 11-25]는 데이터 투명성을 제공하기 위한 전역, 단편화, 할당 스키마를 포함한 분산데이터베이스의 구조를 보여준다. 다양한 스키마의 기능은 다음과 같다.
11.4. 데이터베이스 응용
11.4.1 분산 데이터베이스
11.4. 데이터베이스 응용
11.4.1 분산 데이터베이스
클라이언트-서버 데이터베이스
클라이언트-서버 구조는 다양한 컴퓨터 장비가 네트워크로 연결된 분산 컴퓨팅 환경에서 사용하는 서비스 구조입니다. 이 구조는 요청을 처리하는 클라이언트(client)와 요청된 서비스를 수행하는 서버(server)로 기능을 분리합니다.
11.4. 데이터베이스 응용
11.4.1 분산 데이터베이스
클라이언트-서버 데이터베이스
클라이언트-서버 데이터베이스는 이 구조를 활용하여 분산 데이터베이스를 구현하는 방식입니다. 여기서 DBMS의 전체 기능을 클라이언트와 서버 컴퓨터로 분할하여 관계형 데이터베이스의 분산 시스템을 구성합니다. 클라이언트(전위 컴퓨터)는 사용자가 요청한 질의를 여러 개의 독립적인 서브질의로 나누어 서버(후위 컴퓨터)로 보냅니다. 서버는 이 서브질의를 처리한 후, 결과를 클라이언트에게 반환합니다. 클라이언트는 받은 서브질의의 결과들을 조합하여 원래 질의에 대한 최종 결과를 생성합니다.
11.4. 데이터베이스 응용
11.4.2 객체지향 데이터베이스
정의: 객체 단위로 데이터를 관리하며 객체, 속성, 메소드, 클래스 계층과 상속 등의 객체지향 개념을 지원합니다.
주요 개념:
활용 분야: CAD/CAM, 통신, 지리정보, 멀티미디어 등의 복잡한 데이터베이스 응용에 적합합니다.
11.4. 데이터베이스 응용
11.4.2 객체지향 데이터베이스
11.4. 데이터베이스 응용
11.4.3 객체-관계 데이터베이스
정의: 관계형 데이터베이스와 객체지향 데이터베이스의 장점을 결합한 하이브리드 모델입니다.
특징: 관계 데이터베이스의 간단함과 객체지향 데이터 모델의 확장성을 모두 제공합니다. SQL3 표준을 사용해 객체지향적 질의를 지원합니다.
11.4. 데이터베이스 응용
11.4.4 멀티미디어 데이터베이스
멀티미디어 데이터베이스는 텍스트, 이미지, 비디오, 오디오 등의 다양한 비정형 데이터를 효율적으로 저장하고 관리하는 시스템입니다. 정형 데이터뿐 아니라, 대용량의 사진, 동영상, 음성 데이터를 효과적으로 저장하고 검색할 수 있는 기능을 제공합니다.
11.4. 데이터베이스 응용
11.4.4 멀티미디어 데이터베이스
저장과 검색
11.4. 데이터베이스 응용
11.4.4 멀티미디어 데이터베이스
시스템 유형
11.4. 데이터베이스 응용
11.4.5 공간 데이터베이스
공간 데이터베이스는 다차원 공간 내 객체와 객체 간의 공간적 관계를 저장·관리하는 시스템입니다. 위치 기반의 데이터 저장, 공간 색인, 공간 질의, 공간 분석 기능을 제공합니다.
공간 데이터 유형
11.4. 데이터베이스 응용
11.4.5 공간 데이터베이스
기능
데이터베이스
연습문제
연습문제
12
빅데이터와 NoSQL
학습목표
p. 421-456
12.1. 빅데이터 개념
1.1 빅데이터의 등장 배경
현대 사회의 복잡성을 분석하고 예측하기 위해 빅데이터 기술이 필요하다. 디지털 정보량의 급격한 증가로 SNS 메시지, IoT 센서 데이터, 웹서버 로그 등 다양한 데이터가 생성되고, 기존 기술로는 이를 처리하는 데 한계가 있다. 대용량 데이터 처리 비용이 낮아지면서 성공 사례가 늘어나 빅데이터 활용이 증가하고 있다.
12.1. 빅데이터 개념
1.1 빅데이터의 등장 배경
TIP: 데이터 과학
데이터 과학은 데이터에서 의미 있는 정보와 가치를 찾아내는 학문으로, 통계학, 컴퓨터 과학, 프로그래밍 기술 등이 융합된 분야이다. 데이터 과학자는 가설을 세우고 모델을 검증하여 숨겨진 진실을 탐구한다.
12.1. 빅데이터 개념
1.2 빅데이터의 기본 개념
12.1. 빅데이터 개념
1.2 빅데이터의 기본 개념
빅데이터의 특성
12.1. 빅데이터 개념
1.2 빅데이터의 기본 개념
빅데이터의 유형
각 유형은 데이터 복잡도와 용량에 따라 다르며, 비정형 데이터는 연구와 관심이 집중되는 분야이다.
12.1. 빅데이터 개념
1.2 빅데이터의 기본 개념
빅데이터의 유형
12.2. 빅데이터 기술과 NoSQL
빅데이터의 주요 기술
빅데이터는 대용량 데이터를 저장하고 분석 모형을 적용해 탐색, 분석, 시각화하는 과정으로 이루어진다. 주요 기술은 데이터 수집, 처리, 저장, 분석, 시각화 기술로 나뉜다.
12.2. 빅데이터 기술과 NoSQL
빅데이터의 주요 기술
12.2. 빅데이터 기술과 NoSQL
2.1 빅데이터의 수집
조직 내부 및 외부 데이터를 정제된 형태로 수집하며, 데이터의 충분성, 완전성, 일관성, 정확성을 고려.
데이터 유형
수집 기술
12.2. 빅데이터 기술과 NoSQL
2.1 빅데이터의 수집
의미있는 분석 결과를 얻기 위해 다음 4가지 기준을 고려한다.
12.2. 빅데이터 기술과 NoSQL
2.1 빅데이터의 수집
수집 데이터의처리
수집 데이터의 처리는 데이터 가공이나 데이터 분석을 준비하는 과정이다. 수집된 모든 빅데이터는 분석 가능한 데이터로 변환하는 전처리 과정을 수행한 후 저장한다. 저장 이후에는 분석을 위하여 후처리 과정을 추가적으로 수행한다.
12.2. 빅데이터 기술과 NoSQL
2.2 빅데이터의 처리와 하둡(맵리듀스)
빅데이터 처리 방식
12.2. 빅데이터 기술과 NoSQL
2.2 빅데이터의 처리와 하둡(맵리듀스)
아파치 하둡
12.2. 빅데이터 기술과 NoSQL
2.2 빅데이터의 처리와 하둡(맵리듀스)
하둡의 장단점
하둡 에코 시스템
12.2. 빅데이터 기술과 NoSQL
2.2 빅데이터의 처리와 하둡(맵리듀스)
맵리듀스 처리 과정
12.2. 빅데이터 기술과 NoSQL
2.2 빅데이터의 처리와 하둡(맵리듀스)
맵리듀스 활용 예: 단어 개수 세기
12.2. 빅데이터 기술과 NoSQL
2.3 빅데이터의 저장과 NoSQL
빅데이터 저장 방식
12.2. 빅데이터 기술과 NoSQL
2.3 빅데이터의 저장과 NoSQL
빅데이터 저장 방식
12.2. 빅데이터 기술과 NoSQL
2.3 빅데이터의 저장과 NoSQL
NoSQL 데이터베이스의 장점
12.2. 빅데이터 기술과 NoSQL
2.3 빅데이터의 저장과 NoSQL
CAP 이론
12.2. 빅데이터 기술과 NoSQL
2.3 빅데이터의 저장과 NoSQL
NoSQL 데이터베이스 유형
12.2. 빅데이터 기술과 NoSQL
2.3 빅데이터의 저장과 NoSQL
NoSQL 데이터베이스 유형
12.2. 빅데이터 기술과 NoSQL
2.3 빅데이터의 저장과 NoSQL
NoSQL 데이터베이스 유형
12.2. 빅데이터 기술과 NoSQL
2.3 빅데이터의 저장과 NoSQL
NoSQL 데이터베이스 유형
12.2. 빅데이터 기술과 NoSQL
2.4 빅데이터의 분석과 데이터 마이닝
빅데이터의 분석
12.2. 빅데이터 기술과 NoSQL
2.4 빅데이터의 분석과 데이터 마이닝
데이터 마이닝
12.2. 빅데이터 기술과 NoSQL
2.4 빅데이터의 분석과 데이터 마이닝
데이터 마이닝
12.2. 빅데이터 기술과 NoSQL
2.4 빅데이터의 분석과 데이터 마이닝
데이터 마이닝
12.2. 빅데이터 기술과 NoSQL
2.4 빅데이터의 분석과 데이터 마이닝
데이터 마이닝
12.2. 빅데이터 기술과 NoSQL
2.4 빅데이터의 분석과 데이터 마이닝
데이터 마이닝
12.2. 빅데이터 기술과 NoSQL
2.5 빅데이터의 시각화
시각화 분류
데이터베이스
연습문제
연습문제
13
NoSQL과 몽고DB
학습목표
p. 457-490
13.1. NoSQL 몽고DB 개요
전통적인 관계형 데이터베이스는 소규모 사용자를 위한 단일 애플리케이션 운영에 적합했지만, 빅데이터, IoT, 클라우드 환경에서 발생하는 대규모 데이터와 사용자 요구를 충족하기 어렵다. 이를 해결하기 위해 NoSQL 데이터베이스가 등장했으며, 그 중 몽고DB는 문서 기반 데이터베이스로 가장 널리 사용된다.
13.1. NoSQL 몽고DB 개요
몽고DB는 오픈 소스 DBMS로 유연한 스키마와 높은 성능, 확장성을 제공하며 관계형 데이터베이스와 유사한 질의 기능을 지원한다.
13.1. NoSQL 몽고DB 개요
1.1 NoSQL 몽고DB의 특성
13.1. NoSQL 몽고DB 개요
1.1 NoSQL 몽고DB의 특성
13.1. NoSQL 몽고DB 개요
1.1 NoSQL 몽고DB의 특성
몽고DB는 데이터베이스 → 컬렉션 → 문서로 이어지는 계층적 구조로 데이터를 관리한다.
13.1. NoSQL 몽고DB 개요
1.1 NoSQL 몽고DB의 특성
몽고DB 설치 후에 자동 생성되는 기본 데이터베이스는 다음과 같다.
그림 13-3은 몽고DB 안의 계층 구조를 보여준다.
13.1. NoSQL 몽고DB 개요
1.1 NoSQL 몽고DB의 특성
문서 데이터 모델
몽고DB는 계층적 데이터를 문서에 저장하며, 관계형 데이터베이스의 복잡한 조인을 대체할 수 있다. 관계는 내장(embedded) 방식과 참조(reference) 방식으로 표현된다.
몽고DB는 동적 스키마를 통해 데이터 구조의 빈번한 변경에도 유연하게 대응하며, 스키마가 없는 데이터베이스를 효과적으로 관리할 수 있다.
13.1. NoSQL 몽고DB 개요
1.1 NoSQL 몽고DB의 특성
JSON과 BSON의 차이
JSON(JavaScript Object Notation)
BSON(Binary JSON)
13.1. NoSQL 몽고DB 개요
1.1 NoSQL 몽고DB의 특성
몽고DB의 동적 스키마
예시
컬렉션
13.1. NoSQL 몽고DB 개요
1.1 NoSQL 몽고DB의 특성
몽고DB의 관계 표현
13.1. NoSQL 몽고DB 개요
1.1 NoSQL 몽고DB의 특성
몽고DB와 관계형 데이터베이스의 비교
13.1. NoSQL 몽고DB 개요
1.1 NoSQL 몽고DB의 특성
실습 예제: cinemadb
회원 컬렉션: 회원 정보 구조 포함.
13.1. NoSQL 몽고DB 개요
1.1 NoSQL 몽고DB의 특성
실습 예제: cinemadb
영화 컬렉션: 영화 정보 및 평점, 댓글 등의 중첩 문서 포함.
13.2. 몽고DB 실습
2.1 몽고DB의 설치 및 실행
13.2. 몽고DB 실습
2.1 몽고DB의 설치 및 실행
13.2. 몽고DB 실습
2.1 몽고DB의 설치 및 실행
Mongo Atlas는 아무것도 설치하지 않고 MongoDB를 사용해 볼 수 있는 좋은 곳입니다. 웹 애플리케이션 프로그래밍에 유용한 MongoDB의 온라인 클라우드 기반 설치입니다. 우리의 용도에는 충분할 것입니다.
13.2. 몽고DB 실습
2.2 몽고DB 쉘을 이용한 데이터베이스와 컬렉션 관리
데이터베이스 생성 및 확인
13.2. 몽고DB 실습
2.2 몽고DB 쉘을 이용한 데이터베이스와 컬렉션 관리
TIP
13.2. 몽고DB 실습
2.2 몽고DB 쉘을 이용한 데이터베이스와 컬렉션 관리
컬렉션 생성 및 이름 변경
13.2. 몽고DB 실습
2.2 몽고DB 쉘을 이용한 데이터베이스와 컬렉션 관리
몽고DB 데이터 유형
BSON: JSON 기반으로 날짜형, 객체형 등 추가 데이터 타입 지원.
주요 데이터 유형
13.2. 몽고DB 실습
2.2 몽고DB 쉘을 이용한 데이터베이스와 컬렉션 관리
ObjectId 구성
TIP: _id 필드는 기본적으로 색인이 생성되어 고유성을 보장.
13.3. 컬렉션 문서 관리 명령문
3.1 컬렉션 문서 삽입
쉘을 통해서 컬렉션 안에 문서를 삽입, 검색, 수정, 삭제하는 그림 13-10과 같은 명령어의 사용 방법을 살펴 보자.
13.3. 컬렉션 문서 관리 명령문
3.1 컬렉션 문서 삽입
1. 단일 문서 삽입: insertOne()
13.3. 컬렉션 문서 관리 명령문
3.1 컬렉션 문서 삽입
2. 복수 문서 삽입: insertMany()
명령어 옵션
13.3. 컬렉션 문서 관리 명령문
3.2 컬렉션 문서 검색
검색 기본 명령어: find()
검색 조건
필드 반환 제어
13.3. 컬렉션 문서 관리 명령문
3.2 컬렉션 문서 검색
find()와 findOne() 차이
13.3. 컬렉션 문서 관리 명령문
3.2 컬렉션 문서 검색
비교 연산자
13.3. 컬렉션 문서 관리 명령문
3.2 컬렉션 문서 검색
논리 연산자
내장 문서 검색
13.3. 컬렉션 문서 관리 명령문
3.2 컬렉션 문서 검색
정규식 검색: $regex
13.3. 컬렉션 문서 관리 명령문
3.2 컬렉션 문서 검색
검색 결과의 정렬, 생략 및 제한: sort(), skip(), limit()
13.3. 컬렉션 문서 관리 명령문
3.3 컬렉션 문서 수정 (update문)
updateOne(), updateMany()
수정 조건과 연산자
최소 2개의 인자 필요:
13.3. 컬렉션 문서 관리 명령문
3.3 컬렉션 문서 수정 (update문)
문서 치환 (replaceOne() 함수)
13.3. 컬렉션 문서 관리 명령문
3.4 데이터베이스, 컬렉션, 문서의 삭제
문서 삭제 (deleteOne(), deleteMany())
13.3. 컬렉션 문서 관리 명령문
3.4 데이터베이스, 컬렉션, 문서의 삭제
컬렉션 삭제 (drop())
13.3. 컬렉션 문서 관리 명령문
3.4 데이터베이스, 컬렉션, 문서의 삭제
데이터베이스 삭제 (dropDatabase())
데이터베이스
연습문제
연습문제
14
데이터베이스 모바일 웹 프로그래밍
학습목표
p. 491-532
14.1. 개발 환경 구축
무비 웹 앱 (Movie Web App)
PHP, HTML, 제이쿼리 모바일 기술을 활용하여 개발된 모바일 웹 프로그램으로, 아파치 웹 서버와 MySQL 데이터베이스를 사용하여 영화 정보를 등록, 수정, 삭제, 검색할 수 있다. 스마트폰 등 모바일 장치에 적합한 인터페이스를 제공한다.
14.1. 개발 환경 구축
1.1 무비 웹 앱의 실행 구조
14.1. 개발 환경 구축
1.2 실행 환경 설치
14.1. 개발 환경 구축
1.2 실행 환경 설치
‘〈?php’와 ‘?〉’로 둘러싼 PHP 스크립트 코드는 HTML 태그 사이에 위치할 수 있다.
작성한 ‘test _hello.php’ 파일은 인터넷을 통해 어디에서나 실행할 수 있도록 ‘C:\ xampp\htdocs' 폴더에 저장한다.
[부록 D]를 따라 설치했다면 아파치의 공개 공유 폴더 는 ‘C:\ xampp\htdocs’이다. 앞으로 작성할 php 파일은 모두 웹 서버의 공개 공유 폴더 에 저장한다.
14.1. 개발 환경 구축
1.2 실행 환경 설치
movie_user 사용자 계정 생성
먼저, MySQL 서버를 구동시키고 MySQL 워크벤치에 슈퍼 사용자 ‘root' 계정으로 접속 한다. 영화 웹 앱을 위해 PHP 코드 안에서 필요한 사용자 계정을 생성하고 접근 권한을 부여한다.
14.1. 개발 환경 구축
1.2 실행 환경 설치
movieDB 데이터베이스의 구성
영화 웹 앱에서 처리할 데이터를 저장할 ‘movieDB' 데이터베이스를 먼저 생성하고 그 안에'movie' 테이블을 생성한다. MySQL 워크벤치에서 생성한 ‘movie_user' 계정으로 접속한뒤 다음 SQL 명령문들을 실행한다.
14.1. 개발 환경 구축
1.2 실행 환경 설치
'movie' 테이블의 스키마 구조와 실제로 입력 저장될 영화 정보의 예는 다음과 같다.
14.1. 개발 환경 구축
1.2 실행 환경 설치
'movie' PHP 프로젝트를 생성하면 ‘C:\xampp\htdocs\movie' 폴 더가 생성된다. 서버 측 php 파일과 이미지를 포함한 이 책의 모든 movie 예제 코드를 이 ‘movie' 폴더 안에 저장하면 웹 브라우저를 통해 실행할 수 있다.
이때, 영화 포스터 를 저장할 ‘photo' 하위 폴더를 ‘movie' 폴더 안에 생성한다. 등록한 영화 포스터는 ‘C:\xampp\htdocs\movie\photo' 폴더 안에 저장된다.
14.2. 무비 웹 앱의 개발
2.1 앱 구성
14.2. 무비 웹 앱의 개발
2.2 HTML 문서 작성
14.2. 무비 웹 앱의 개발
2.3 시작 화면 구현
14.2. 무비 웹 앱의 개발
2.4 제이쿼리 모바일 연동
14.2. 무비 웹 앱의 개발
2.4 제이쿼리 모바일 연동
제이쿼리 모바일 페이지 구조
제이쿼리 모바일 기반의 웹 앱 화면은 여러 개의 모바일 페이지로 구성되며, 하나의 HTML5 문서 안에 여러 모바일 페이지를 포함할 수 있다. 모바일 페이지는 헤더, 콘텐츠, 푸터로 나뉜다.
기본 영역 정의:
14.2. 무비 웹 앱의 개발
2.4 제이쿼리 모바일 연동
제이쿼리 모바일 적용 방법:
<div> 태그에 data-role 속성을 설정하여 각 영역(페이지, 헤더, 콘텐츠, 푸터)을 정의한다.
data-role은 HTML5에서 제이쿼리 모바일을 위한 커스텀 속성이다.
14.2. 무비 웹 앱의 개발
2.4 제이쿼리 모바일 연동
주요 기능
14.2. 무비 웹 앱의 개발
2.4 제이쿼리 모바일 연동
콘텐츠와 기타 영역
14.2. 무비 웹 앱의 개발
2.4 제이쿼리 모바일 연동
14.2. 무비 웹 앱의 개발
2.5 입력 화면구현
14.2. 무비 웹 앱의 개발
2.5 입력 화면구현
14.2. 무비 웹 앱의 개발
2.5 입력 화면구현
14.2. 무비 웹 앱의 개발
2.5 입력 화면구현
14.2. 무비 웹 앱의 개발
2.6 입력 화면과 PHP 프로그램 작성
PHP 스크립트 작성 방법 + PHP의 역할
MySQL에 요청 전달 및 결과 처리 후 동적 웹 페이지로 클라이언트에 출력한다.
14.2. 무비 웹 앱의 개발
2.6 입력 화면과 PHP 프로그램 작성
insert_result.php 코드 분석
14.2. 무비 웹 앱의 개발
2.6 입력 화면과 PHP 프로그램 작성
insert_result.php 코드 분석
14.2. 무비 웹 앱의 개발
2.6 입력 화면과 PHP 프로그램 작성
insert_result.php 코드 분석
14.2. 무비 웹 앱의 개발
2.6 입력 화면과 PHP 프로그램 작성
insert_result.php 코드 분석
14.2. 무비 웹 앱의 개발
2.7 수정 화면 구현
제이쿼리 모바일 대화상자 생성
14.2. 무비 웹 앱의 개발
2.7 수정 화면 구현
MySQL 검색 결과 반환
14.2. 무비 웹 앱의 개발
2.8 삭제 화면 구현
서버 업로드 파일 삭제
14.2. 무비 웹 앱의 개발
2.8 삭제 화면 구현
질의 결과 행 개수 확인
리스트뷰 생성
연습문제
14.2.10. 무비 웹 앱 전체 코드
연습문제
연습문제
연습문제
연습문제
연습문제
연습문제
연습문제
연습문제
연습문제
연습문제