SQL을 넘어 데이터베이스 학습: Oracle 테이블과 함께한 첫 날

발행: (2026년 1월 17일 오전 08:12 GMT+9)
6 min read
원문: Dev.to

Source: Dev.to

Cover image for Learning Databases Beyond SQL: My First Day with Oracle Tables

오늘은 제가 예상했던 대로 진행되지 않았습니다. 평소에 하던 PostgreSQL + SQL 연습을 계속하려고 했지만, 대신 무료 Oracle 개발자 과정을 시작하게 되었습니다. 첫 번째 모듈만 마쳤지만, 이전에 크게 생각해 보지 않았던 개념을 소개받았습니다:

테이블은 단순히 테이블이 아니다. 같은 단어지만 동작은 매우 다릅니다.

이 글에서는 Oracle에서 배운 테이블 유형, 즉시 이해가 된 부분과 다소 고급이지만 흥미로운 부분을 정리합니다.

테이블은 항상 “행을 저장하는 장소”만은 아니다

오늘 이전까지 저는 테이블에 대한 모델을 단순하게 생각했습니다:

  1. 테이블 생성 →
  2. 행 삽입 →
  3. 조회

Oracle은 테이블이 물리적으로 데이터를 저장하는 방식이 매우 중요하며, 여러 옵션을 제공한다는 것을 보여주었습니다.

힙 테이블 (Heap Tables)

가장 기본적이고 익숙한 유형. 행은 빈 공간이 있는 곳 어디든 저장되며, 순서는 보장되지 않습니다.

create table toys_heap (
  toy_name varchar2(100)
) organization heap;

인덱스‑조직 테이블 (IOT, Index‑Organized Tables)

행이 기본 키에 따라 물리적으로 정렬되어, 별도의 인덱스와 테이블을 오가며 찾는 비용 없이 빠르게 조회할 수 있습니다.

create table toys_iot (
  toy_id   integer primary key,
  toy_name varchar2(100)
) organization index;

항상 기본 키로 검색할 때 유용합니다.

외부 테이블 (External Tables)

파일(CSV 등)을 테이블처럼 취급하여, 데이터를 가져오지 않고도 그대로 조회합니다.

create table toys_ext (
  toy_name varchar2(100)
) organization external (
  default directory tmp
  location ('toys.csv')
);
  • 파일은 데이터베이스 서버에 존재합니다.
  • 데이터를 로드하는 것이 아니라 직접 읽는 것입니다.

임시 테이블 (Temporary Tables)

글로벌 임시 테이블 (Global Temporary Tables)

테이블 정의는 영구적이지만, 행은 세션별로 존재합니다.

create global temporary table toys_gtt (
  toy_name varchar2(100)
);

모든 세션이 테이블을 볼 수 있지만, 각 세션은 자신의 행만 볼 수 있습니다. 세션이 종료되면 데이터가 사라집니다.

프라이빗 임시 테이블 (Private Temporary Tables)

테이블과 행 모두 생성한 세션에만 존재하며 데이터 사전에 저장되지 않습니다.

create private temporary table ora$ptt_toys (
  toy_name varchar2(100)
);

파티션 테이블 (Partitioned Tables)

키를 기준으로 큰 테이블을 작은 조각으로 나누어, 규모가 커질수록 쿼리 성능을 향상시킵니다.

지원되는 방법:

  • Range (예: 날짜)
  • List (특정 값)
  • Hash (고른 분배)

예시 (해시 파티셔닝):

create table books_hash (
  toy_name varchar2(100)
) partition by hash (toy_name) partitions 4;

쿼리는 관련 파티션만 스캔합니다.

테이블 클러스터 (Table Clusters)

키를 공유하는 서로 다른 테이블의 행을 물리적으로 함께 저장합니다.

create cluster toy_cluster (
  toy_name varchar2(100)
);
create table toys_cluster_tab (
  toy_name varchar2(100)
) cluster toy_cluster (toy_name);

오늘 세션에서 얻은 교훈

핵심은 복잡한 쿼리를 작성하는 것이 아니라 저장 구조 개념을 이해하는 것이었습니다. 데이터베이스는 데이터가 어떻게 저장되는지에 크게 신경 쓰며, 테이블 설계는 단순히 문법이 아니라 중요한 결정 사항입니다. 익숙한 아이디어도 있었고, 다소 위압적인 아이디어도 있었지만 모두 유용했습니다.

다음 단계

Oracle for developers 모듈을 계속 진행하면서 각 개념을 목적에 맞게 정리하고, 궁극적으로 PostgreSQL 및 보다 넓은 데이터 엔지니어링 주제와 연결할 예정입니다. 아직은 초보자이지만, 이런 날들은 데이터베이스 세계가 더 크고 흥미롭게 느껴지게 합니다. 여러분도 데이터베이스를 배우면서 “너무 많다”는 느낌을 받는다면, 혼자가 아니라는 걸 기억하세요—한 번에 하나씩 모듈을 진행하면 됩니다.

Back to Blog

관련 글

더 보기 »

데이터베이스 & SQL 기초: 첫날 배운 것

데이터베이스란 무엇인가? 데이터베이스는 전자적으로 저장된 관련 데이터의 구조화된 컬렉션이며, 쉽게 접근하고, 관리하고, 업데이트할 수 있도록 조직되어 있다.