OLTP System

ACID, 정규화, 트랜잭션 특성, OLTP vs OLAP 비교


📚 시리즈 네비게이션

이전현재다음
OverviewOLTP SystemDW System

시리즈 목차


🎯 OLTP란?

OLTP (Online Transaction Processing): 실시간으로 트랜잭션을 처리하는 운영계 시스템

핵심 특징:

  • 실시간 데이터 입력/수정/삭제
  • 짧고 빠른 트랜잭션
  • 동시 사용자 많음
  • 현재 상태 데이터 중심

📊 OLTP 특징

트랜잭션 특성

특성설명
빈번함초당 수천~수만 건
단순함소량 데이터 조회/변경
빠름밀리초 단위 응답
동시성수천~수만 동시 사용자

ACID 속성

OLTP 시스템은 ACID를 보장해야 함.

속성의미설명
AAtomicity (원자성)트랜잭션은 전부 성공하거나 전부 실패
CConsistency (일관성)트랜잭션 전후 데이터 무결성 유지
IIsolation (격리성)동시 트랜잭션 간 간섭 없음
DDurability (지속성)완료된 트랜잭션은 영구 저장
-- 계좌 이체 예시 (원자성)
BEGIN TRANSACTION;
    UPDATE accounts SET balance = balance - 100000 WHERE id = 'A';
    UPDATE accounts SET balance = balance + 100000 WHERE id = 'B';
COMMIT;
-- 둘 다 성공하거나 둘 다 실패 (부분 성공 없음)

🗄️ 데이터 모델링

정규화 (Normalization)

OLTP는 높은 수준의 정규화를 사용함.

이유:

  • 데이터 중복 최소화
  • 갱신 이상(Anomaly) 방지
  • 데이터 무결성 유지

정규화 단계:

단계설명
1NF원자값, 반복 그룹 제거
2NF부분 함수 종속 제거
3NF이행 함수 종속 제거
BCNF모든 결정자가 후보키
flowchart TB
    subgraph Before["정규화 전 (비정규화)"]
        BT["주문ID | 고객명 | 고객주소 | 상품명 | 상품가격 | 수량"]
    end
    
    subgraph After["정규화 후 (3NF)"]
        Customer["고객<br/>고객ID (PK)<br/>고객명<br/>고객주소"]
        Order["주문<br/>주문ID (PK)<br/>고객ID (FK)<br/>상품ID (FK)<br/>수량"]
        Product["상품<br/>상품ID (PK)<br/>상품명<br/>상품가격"]
        
        Customer --> Order
        Product --> Order
    end
    
    Before --> After

🆚 OLTP vs OLAP 비교

구분OLTPOLAP (DW)
목적업무 처리분석/의사결정
쿼리단순, INSERT/UPDATE복잡, SELECT/집계
데이터현재 상태히스토리
정규화높음 (3NF)낮음 (비정규화)
응답 시간밀리초초~분
사용자현업 직원분석가, 경영진
동시 사용자수천~수만수십~수백

🛠️ 주요 OLTP 시스템

상용 RDBMS

제품벤더특징
Oracle DatabaseOracle엔터프라이즈 시장 1위, 기능 풍부
Microsoft SQL ServerMicrosoftWindows 환경, BI 통합
IBM Db2IBM메인프레임, 대기업

오픈소스 RDBMS

제품특징
MySQL웹 서비스에서 가장 많이 사용
PostgreSQL기능 풍부, Oracle 대안
MariaDBMySQL 포크, 호환성

업무 시스템 예시

시스템설명
ERP전사자원관리 (SAP, Oracle ERP)
CRM고객관계관리 (Salesforce)
SCM공급망관리
MES생산관리시스템
주문/결제이커머스, POS
뱅킹 코어계정계, 수신/여신

⚙️ 성능 최적화

인덱스 (Index)

데이터 검색 속도 향상을 위한 자료구조임.

-- 인덱스 생성
CREATE INDEX idx_customer_name ON customers(name);
 
-- 복합 인덱스
CREATE INDEX idx_order_date_customer ON orders(order_date, customer_id);
인덱스 종류설명
B-Tree기본, 범위 검색에 적합
Hash동등 비교에 빠름
Bitmap카디널리티 낮은 컬럼
Full-text텍스트 검색

커넥션 풀 (Connection Pool)

DB 연결을 미리 만들어두고 재사용함.

flowchart LR
    App["Application"]
    Pool["Connection Pool<br/>[conn1][conn2]..."]
    DB["Database"]
    
    App --> Pool --> DB

파티셔닝 (Partitioning)

대용량 테이블을 물리적으로 분할함.

방식설명예시
Range범위 기준날짜별
List목록 기준지역별
Hash해시 기준균등 분산

🔄 OLTP → DW 연계

OLTP 데이터는 ETL을 통해 DW로 이동함.

flowchart LR
    subgraph OLTP["OLTP (운영계)"]
        O1["주문 DB"]
        O2["고객 DB"]
        O3["상품 DB"]
    end
    
    ETL["ETL<br/>추출 → 변환 → 적재"]
    
    subgraph DW["DW (분석계)"]
        D1["매출 분석"]
        D2["고객 분석"]
        D3["리포트"]
    end
    
    OLTP -->|실시간 처리<br/>INSERT/UPDATE| ETL -->|배치 분석<br/>SELECT/집계| DW

🔗 시리즈 네비게이션

시리즈 목차로 돌아가기