물리 데이터 모델링(Physical Data Modeling)은 논리 데이터 모델을 바탕으로 DBMS에 실제 구현 가능한 구조로 변환하는 과정입니다.
기술사 수준에서는 성능, 저장 효율, 인덱싱, 파티셔닝, 보안 등을 고려한 현실적이고 최적화된 구조 설계가 핵심입니다.
1. 물리 데이터 모델링 개요
구분 | 설명 |
---|
정의 | 논리 모델을 기반으로 DBMS에 맞게 실제 테이블, 인덱스, 파티션, 스토리지 등을 설계하는 단계 |
목적 | 성능 최적화, 데이터 무결성 유지, 운영환경 반영 |
산출물 | 테이블 스키마, 인덱스 설계서, DDL 스크립트, 파티션 정의 등 |
2. 주요 설계 항목
1) 데이터 타입(Data Type) 지정
- 논리형 → DBMS별 구체 타입으로 지정
- 예:
name
→ VARCHAR2(100)
, amount
→ NUMBER(10,2)
등
2) 테이블 및 컬럼 설계
- 정규화된 구조 기반으로 PK, FK, 제약조건 반영
- 컬럼 순서: 자주 사용하는 컬럼 우선 배치 고려
3) 인덱스 설계
- 기본키 인덱스는 자동 생성
- 자주 검색/조인되는 컬럼은 보조 인덱스 생성
- 예:
user_id
, course_id
, payment_date
4) 파티셔닝(PARTITIONING)
- 대용량 테이블에 대해 성능, 관리 효율을 위해 파티션 설계
- 기준: 날짜, 사용자, 지역 등
- 예:
Payment
→ payment_date
기준 RANGE 파티션
5) 물리적 제약조건 설정
- PK, FK, UNIQUE, NOT NULL, CHECK
- 무결성 보장 + 성능 고려
6) 스토리지 및 파일 그룹 지정
- 테이블/인덱스의 저장 위치 지정 (Tablespace 등)
- SSD, HDD 등 물리 디스크 설계 고려
7) 보안 및 권한
- 사용자 접근 제어
- 테이블/컬럼 수준 권한 설정
3. 예시: Payment
테이블 물리 모델
컬럼명 | 데이터 타입 | 제약조건 | 설명 |
---|
payment_id | NUMBER(10) | PK, NOT NULL | 결제 고유 ID |
user_id | NUMBER(10) | FK → User | 결제한 사용자 ID |
course_id | NUMBER(10) | FK → Course | 결제한 강의 ID |
payment_date | DATE | NOT NULL | 결제 일자 |
amount | NUMBER(10,2) | CHECK > 0 | 결제 금액 |
pay_method | VARCHAR2(20) | | 카드, 계좌이체 등 |
인덱스 설계:
IDX_PAYMENT_USER_DATE (user_id, payment_date)
IDX_PAYMENT_DATE (payment_date)
(→ 파티션 가능성 높음)
파티션 예:
PARTITION BY RANGE (payment_date)
(
PARTITION p202501 VALUES LESS THAN (TO_DATE('2025-02-01','YYYY-MM-DD')),
PARTITION p202502 VALUES LESS THAN (TO_DATE('2025-03-01','YYYY-MM-DD'))
)
4. 성능/운영 고려사항
항목 | 고려 내용 |
---|
접근 패턴 | 검색 조건 기준 인덱스/파티션 설계 |
트랜잭션 부하 | 동시성 제어 (락 경합 최소화) |
백업/복구 | 테이블별 복구 전략, 물리 위치 설계 |
용량 추정 | 테이블별 데이터량/성장률 고려한 스토리지 설계 |
보안 | 데이터 마스킹, 권한 제어, 감사 로그 등 |
어린이 버전 요약
논리 모델이 설계도라면, 물리 모델은 실제로 건물을 짓는 거예요!
벽돌 크기(자료형), 문 위치(인덱스), 창문(파티션), 보안 자물쇠(권한)까지 꼼꼼하게 설계해야 돼요!