🔴 Oracle 학습 홈
기업 시장을 30년 넘게 지켜온 상용 RDBMS의 대명사, Oracle Database. SGA·PGA·백그라운드 프로세스부터 Undo/Redo, 옵티마이저까지 — 아키텍처를 그림과 애니메이션으로 꿰뚫습니다.
한눈에 보는 Oracle — SELECT 한 번의 여정
Oracle 아키텍처의 전체 그림을 애니메이션 하나로 먼저 느껴보세요. SELECT 한 문장이 클라이언트를 떠나 결과로 돌아오기까지의 여정입니다. 여기 등장하는 리스너, 서버 프로세스, SGA, 데이터파일이 앞으로 12개 챕터의 주인공들입니다.
클라이언트가 TCP 1521 포트로 접속을 요청합니다. 요청을 받는 것은 리스너(Listener) — 접속만 중개하고 쿼리는 처리하지 않는 "안내 데스크"입니다.
리스너가 이 세션을 전담할 dedicated 서버 프로세스를 만들어 연결을 넘겨줍니다. 이후 클라이언트는 이 프로세스와 직접 대화합니다.
SELECT 문장이 서버 프로세스에 도착해 파싱과 실행 계획 수립을 거칩니다(공유 풀의 커서 공유는 2장에서!).
서버 프로세스는 필요한 블록을 먼저 SGA의 Database Buffer Cache에서 찾습니다. 이번엔 캐시 미스!
캐시에 없으면 데이터파일에서 DB block을 읽어 버퍼 캐시에 올립니다. 다음번 같은 블록 요청은 메모리에서 바로 히트하겠죠.
블록에서 조건에 맞는 행을 골라 클라이언트에 돌려주면 여정 끝! 이 한 번의 왕복에 리스너(1장)·SGA(2장)·서버 프로세스(3장)의 개념이 모두 들어 있습니다.
"당장 느린 쿼리부터 잡아야 한다"면 ⚡ 쿼리 튜닝 팁 모음부터 펼쳐보세요. 인덱스 설계, 실행계획 읽기, 바인드 변수, 힌트 사용법 등 실무에서 바로 쓰는 체크리스트를 한 페이지에 모았습니다. 원리가 궁금해지면 그때 해당 챕터로 돌아오면 됩니다.
챕터 한눈에 보기
🧱 아키텍처 기초 — Oracle의 뼈대
01. Oracle 개요 — Instance와 Database
Instance(메모리+프로세스)와 Database(파일)의 구분, 리스너와 접속 여정, CDB/PDB 멀티테넌트.
02. SGA — 공유 메모리 구조
Buffer Cache의 LRU, Shared Pool의 커서 공유, 하드 파싱 vs 소프트 파싱, Redo Log Buffer.
03. PGA와 서버 프로세스
프로세스의 사적 메모리 PGA, 정렬·해시 작업 공간, temp spill, PGA_AGGREGATE_TARGET.
04. 백그라운드 프로세스
DBWn·LGWR·CKPT·SMON·PMON — "커밋 시 디스크에 쓰는 것은 데이터가 아니라 redo다."
05. 저장 구조 — 테이블스페이스와 블록
테이블스페이스 → 세그먼트 → 익스텐트 → 블록의 계층, 블록 내부 해부.
🔄 트랜잭션과 복구 — 데이터를 지키는 원리
06. Undo와 읽기 일관성
과거 버전을 복원하는 undo 세그먼트, 읽기 일관성(CR), ORA-01555의 정체.
07. Redo · 커밋 · 인스턴스 복구
redo 로그의 순환 구조, 커밋의 실제 비용, 크래시 후 roll forward/rollback.
08. 트랜잭션과 락
행 락(TX)과 테이블 락(TM), 블로킹과 데드락, 격리 수준.
🔍 쿼리 성능 — 빠른 SQL의 조건
09. 인덱스 구조와 활용
B-tree 인덱스의 내부, 복합 인덱스 설계, 인덱스가 무시되는 순간들.
10. 옵티마이저와 실행계획
비용 기반 옵티마이저(CBO), 통계, 실행계획 읽는 법, 힌트.
11. 파티셔닝과 병렬 처리
Range/List/Hash 파티션, 파티션 pruning, 병렬 쿼리의 동작.
12. AWR과 대기 이벤트 — 모니터링
AWR 스냅샷·리포트 읽기, 주요 대기 이벤트 해석, 성능 문제의 진단 순서.
⚡ 빠른 참조
⚡ 쿼리 튜닝 팁 모음
실무에서 바로 쓰는 튜닝 체크리스트 — 인덱스, 실행계획, 바인드 변수, 힌트, 통계 관리 요약.
PostgreSQL 개념 대응표
PostgreSQL 파트를 먼저 공부했다면 이 표가 최고의 지름길입니다. 두 DB는 용어만 다를 뿐 같은 문제(캐싱, 다중 버전, 장애 복구)를 풀고 있어서, 대응 관계를 알면 학습 속도가 두 배가 됩니다.
| Oracle | PostgreSQL | 공통 아이디어 | PG 챕터 |
|---|---|---|---|
| SGA Database Buffer Cache | shared buffers | 디스크 블록을 공유 메모리에 캐싱 | pg 2장 |
| Dedicated 서버 프로세스 | backend 프로세스 | 세션 1개 = 전담 프로세스 1개 | pg 2장 |
| Undo (undo 세그먼트) | dead tuple + VACUUM | 과거 버전 보관으로 MVCC 구현 — Oracle은 별도 공간, PG는 테이블 안에 | pg 3장 · pg 8장 |
| Redo (redo log) | WAL | 변경 이력을 먼저 기록해 커밋 내구성 보장 | pg 9장 |
| DBWn / CKPT | background writer / checkpointer | dirty 페이지를 뒤에서 천천히 디스크로 | pg 9장 |
| 옵티마이저(CBO) + 힌트 | 쿼리 플래너 (힌트 없음) | 통계 기반 비용 계산으로 실행계획 선택 | pg 6장 |
| 파티셔닝 (Range/List/Hash) | 선언적 파티셔닝 | 큰 테이블을 조각내고 pruning으로 스캔 축소 | pg 12장 |
| Data Guard | Streaming Replication | 변경 로그(redo/WAL) 전송으로 대기 서버 유지 | pg 10장 |
| RMAN 백업 + 아카이브 로그 | pg_basebackup + WAL 아카이브 (PITR) | 물리 백업 + 로그 재생으로 시점 복구 | pg 11장 |
| AWR / v$ 뷰 | pg_stat_statements / pg_stat_* 뷰 | 실행 통계 축적으로 병목 진단 | pg 14장 |
PostgreSQL은 옛 버전을 테이블 안에 남기고(dead tuple → VACUUM이 청소), Oracle은 옛 버전을 undo라는 별도 공간에 복사해 둡니다. 그래서 PG에는 Bloat/VACUUM 고민이, Oracle에는 undo 크기/ORA-01555 고민이 생깁니다. 같은 MVCC, 다른 청구서입니다.
추천 학습 경로
목적에 따라 골라 읽어도 좋습니다. 화살표 순서대로 읽으면 앞 장의 개념이 뒷 장의 발판이 됩니다.
🌱 처음 시작 (아키텍처 완주)
Instance/Database → SGA → PGA → 백그라운드 프로세스 → 저장 구조. Oracle의 몸을 완성하는 순서입니다.
🔄 트랜잭션 이해가 급할 때
Undo → Redo → 락. "커밋하면 무슨 일이 일어나는가"에 답할 수 있게 됩니다. (2·4장을 먼저 읽으면 더 쉽습니다.)
각 챕터 하단의 "이 장 완료로 표시" 버튼을 누르면 사이드바에 ✓ 표시가 남습니다(브라우저 로컬 저장). 부담 없이 하루 한 챕터씩 진행해 보세요.