開発・プログラミング・データベース
基本SQLからインデックスチューニング・トランザクション・pgvectorまで
一つのPostgreSQLで扱う講座
この講座は、PostgreSQLを基本のSQLからインデックスチューニング、トランザクション、JSONB、pgvectorまで実習を通して学ぶ入門者向けのPostgreSQL講座です。ログが溜まればストレージを追加し、検索機能が必要になればエンジンをもう一つ追加し、AI機能にはベクトルDBをさらに追加するといった流れを、一つのデータベースの中で完結させます。
- 難易度 入門
- 実習中心
- Docker 環境
- 受講期間無制限
- 基礎 → 分散関係型の概念から分散環境までを一貫した流れで
- 基礎から分散まで基本SQLから始まり、シャーディング・スケジューリングで終わります
- pgvector · JSONB外部依存なしに一つのDBで
2,000億件以上の規模のデータを扱ってきたシリコンバレーのAIスタートアップ現役サーバー開発者が共に構成したカリキュラム
実習環境はmacOS(Apple M3)・Docker一つあれば十分です
PostgreSQL · オブジェクト関係データベースCREATE TABLE · 制約条件INSERT / SELECT / UPDATE / DELETEUPSERT クエリパターンソート · 集計 · JOIN 設計B-Tree · GIN · GiST インデックストランザクション · MVCC · 隔離レベルスナップショットJSONB 非定型データpgvector エンベディング類似度検索Search Extension トークナイザーcron · 分散シャーディング総合実習Docker 実習
PostgreSQL · オブジェクト関係データベースCREATE TABLE · 制約条件INSERT / SELECT / UPDATE / DELETEUPSERT クエリパターンソート · 集計 · JOIN 設計B-Tree · GIN · GiST インデックストランザクション · MVCC · 隔離レベルスナップショットJSONB 非定型データpgvector エンベディング類似度検索Search Extension トークナイザーcron · 分散シャーディング総合実習Docker 実習
この講義が始まった理由
シリコンバレーのエンジニアが先に提案しました
以下は実際の会話内容です。合流していたシリコンバレーの開発者が、自ら扱いたいテーマとしてPostgreSQLを挙げました。
シリコンバレー出身の開発者もしもし…私が合流していろいろ拝見してから少し時間が経ちましたが、扱いたいテーマがありまして…。大丈夫でしょうか??
Toss 開発者僕は兄さんならいつでもOKだけど(笑) Hong、仕事しよう
Kakao 面接官おぉ!!私もどんなテーマで扱われるのか期待していました!!どのようなテーマで扱う予定ですか??
シリコンバレー出身のエンジニア私、DB関連でいうと PostgreSQLを扱ってみようと思っています! pgvectorを提供しているので、AI時代に大きな依存関係なく活用できるので
Kakao 面接官おー、私もそれは話に聞いただけで使ったことはないのですが… 私も一度決済してみることにしますね(笑)
Tossの開発者wwww とりあえず信じてついていけばいいんだよ。あの人、本当に開発ができるし、視点もすごく広いから
Hongあぁ…また私にこのような試練を与えられるのですね…私は兄さんたちだけを信じてついていくので(笑)一度まとめて送っていただければ、一緒に検討して進めてみましょう!!
そうしてこの講義が作られました。シリコンバレーでPostgreSQLを実際に使っている開発者が「これは必ず扱うべきだ」と先に提案した内容です。
今直面していること
機能を作るのではなく、システムを保守・運用しています
最初は単純に始まります。MySQL一つで十分ですし、CRUDさえうまく回れば問題ありません。ところが、サービスが少しでも大きくなると状況が変わります。
- ログを蓄積し始めると、別のストレージを検討するようになり、
- 検索機能が追加されてElasticsearchを導入し、
- リアルタイム処理のためにRedisを追加し、
- AI機能を付けようとすると、またVector DBを付けなければなりません
"私は今、機能を作っているのではなく、システムを保守しているんだな"
AI時代のデータベース
AI時代にPostgreSQLがなぜ脚光を浴びているのですか
これまでのデータベースは、主に定型データの保存と照会という役割に重点を置いていました。今は違います。AIサービスの登場により、単なるテーブルデータだけを扱うわけではなくなりました。
- JSON形式の非定型データ
- たまり続けるログデータ
- 埋め込みベースのベクトルデータ
これら3つを同時に扱わなければならない環境がすでに整っています。PostgreSQLはJSONBによって柔軟なスキーマを構成し、インデックス作成によって大規模なデータセットでもパフォーマンスを維持し、pgvectorのような拡張機能によってAIベースの類似性検索まで処理します。追加の依存関係なしに、PostgreSQL一つで完結します。
複数のシステムを個別に用意しなくても、一つのPostgreSQLでAI時代に必要なデータ処理の要件に対応できます。
インデックスマップ
PostgreSQL インデックスはいつ何を使いますか
PostgreSQLが多様な種類のインデックスを提供している理由は、データの形式がそれぞれ異なるためです。セクション6「インデックスおよび性能の最適化」では、この選択基準を実習で扱います。
B-Tree
PostgreSQL의 기본 인덱스입니다. 등호와 부등호 비교, 범위 조회, 정렬처럼 값의 순서를 따지는 조건에 씁니다. 대부분의 컬럼에는 이것으로 충분합니다.
GIN
하나의 값 안에 여러 요소가 들어 있는 컬럼에 씁니다. JSONB의 키·값 검색이나 배열, 전문 검색처럼 "안에 무엇이 들어 있는가"를 묻는 조건에 맞습니다.
GiST
기하 데이터나 범위 타입처럼 값이 겹치는지, 포함하는지를 따져야 하는 조건에 씁니다. 위치 기반 데이터를 다룰 때 자주 등장합니다.
実際の講義内容のプレビュー
このようなシーンを扱います
説明よりも画面を見る方が早いです。実際の講義の一部をそのまま切り取ってきました。
付け足す代わりに、一つを深く使う選択
基本的なSQLから始まり、分散環境まで順番に続きます。
지금 시작하기
Why PostgreSQL
PostgreSQLはどのような特徴を持っていますか
PostgreSQLはMySQL、Oracleと共に広く使われているリレーショナルデータベース管理システム(DBMS/RDBMS)です。同じリレーショナルデータベースですが、以下の特徴がPostgreSQLを選ぶ理由になります。
ACID
PostgreSQL은 ACID 트랜잭션을 지원해 데이터 정합성을 보장합니다. 금융·결제처럼 정확성이 중요한 시스템에서도 안정적으로 씁니다.
MVCC
PostgreSQL의 MVCC(다중 버전 동시성 제어)는 읽기와 쓰기가 서로를 막지 않게 해 높은 동시성과 성능을 확보합니다.
インデックス
PostgreSQL은 B-Tree, GIN, GiST 등 다양한 인덱스를 지원해 복잡한 쿼리도 효율적으로 처리합니다. JSONB 같은 비정형 컬럼에는 GIN 인덱스를 걸어 키·값 검색을 빠르게 만들 수 있습니다.
拡張性
PostgreSQL은 사용자 정의 함수·타입·확장 모듈을 통해 데이터베이스 자체를 유연하게 확장할 수 있습니다.
標準SQL
PostgreSQL은 표준 SQL에 충실하면서도 실무에서 필요한 기능을 폭넓게 제공합니다.
JSONB · GIS
PostgreSQL은 관계형 데이터를 넘어 JSONB 같은 반정형 데이터와 위치 기반(GIS) 데이터까지 하나의 데이터베이스로 처리합니다.
エコシステム
PostgreSQL은 pgvector, PostGIS 같은 확장을 상황에 맞게 얹어 쓰는 확장 생태계를 갖추고 있습니다.
公式ドキュメントでは、PostgreSQLをこのように説明しています。
PostgreSQLは、強力なオープンソースのオブジェクト関係データベースシステムであり、高い信頼性、豊富な機能、そして優れたパフォーマンスで定評があります。
PostgreSQLは強力なオープンソースのオブジェクト関係型データベースシステムであり、高い信頼性、豊富な機能、そして優れたパフォーマンスで広く知られています。
同じテーブルであっても、どのようなインデックスを貼るかによってクエリの応答が分かれ、隔離レベルの一行によって他のセッションが見るデータが変わります。機能を知っていることと、今の状況で何を選ぶべきかを知っていることは別物です。
この講義が特別な理由
なぜこのPostgreSQL講座なのですか?
シリコンバレー現役開発者の視点で構成しました
シリコンバレーでAI関連の開発を行っている13年目のサーバー開発者と共に作った講義です。PostgreSQLを実際に使いながら積み上げてきた見解や判断基準をそのまま込めました。
講義の大部分が実習とクエリで構成されています
すべての講義で実際のPostgreSQLクエリが提供され、概念の説明が実習と結びついています。ほとんどの講義が直接クエリを実行しながら進められます。
単なるストレージではなく、システムの中心として扱います
基本的なSQLで終わりません。インデックスとパフォーマンス、トランザクションと並行性、分散環境とスケジューリングまで続き、データベースをサービス設計の中心コンポーネントとして捉えるようになります。
AI時代におけるPostgreSQLの役割を直接確認します
pgvectorで埋め込みベクトル検索クエリを直接実行してみます。別途ベクトルDBを用意することなく、PostgreSQL内で類似度検索が動作することを直接確認できます。
このような方におすすめです
このPostgreSQL講座は誰のための講座ですか?
- PostgreSQLの基礎からしっかり固めたい初・中級開発者単純なCRUDを超えて、INSERT・UPDATE・DELETEの様々なパターン、SELECTチューニング、インデックス活用を構造的に学びたい方
- PostgreSQLをどのように活用するのか気になるバックエンド開発者DDL・DMLのような基本概念から実務にすぐ適用できる観点まで、一度に整理したい方
- 面接対策が必要なバックエンド就活生・ジュニア開発者トランザクション・整合性・インデックス・FKのように頻出するトピックを実務基準で整理したい方
- PostgreSQLをシステムの核心構造として捉えたいシニア志向のエンジニア単なるストレージではなく、サービス設計の中心コンポーネントとして理解し、スキーマリファクタリングや進化するDB構造に関心がある方
- AI時代にデータベースが果たす役割が気になる開発者pgvectorで埋め込みベクトル検索クエリを直接実行してみたい方
逆に、JSONBの設計とインデックスの選択、隔離レベルの違いを今すぐ説明できるのであれば、この講義は必要ありません。
カリキュラム
PostgreSQL 講座カリキュラム
PostgreSQLを初めて学ぶ開発者のための順序で構成されています。データベースの基礎から始まり、基本SQL、クエリ設計、インデックスとパフォーマンス、トランザクション、Extension、分散まで順番に続きます。前のセクションが後ろのセクションの前提となるように構成しました。
セクション 1. 講義紹介
- AI時代に最も注目されているDatabase PostgreSQL!!
- Hongと一緒に楽しむKakaoTalkコミュニティ!
セクション 2. データベースの基礎と PostgreSQL の紹介
- データベースとリレーショナル概念
- PostgreSQLの特徴およびDocker環境の構築
- DB接続設定
セクション 3. テーブルの関係と基本 SQL
- データ型
- テーブルの作成と制約条件
- INSERTとSELECT
- UPDATEとDELETE
- WHERE 演算子
- UPSERT クエリパターン
セクション 4. 並べ替え・集計・JOIN 設計
- ソートと集計、複数のテーブルを紐付けるJOIN設計を扱います。
セクション 5. 高度な SQL クエリパターン
- 基本文法を超えた高度なクエリパターンを実習で習得します。
セクション 6. インデックスおよび性能最適化
- B-Tree・GIN・GiSTインデックスと性能最適化の観点を扱います。
セクション 7. トランザクション・同時実行性・拡張性
- トランザクションと分離レベル、MVCCベースの同時実行性と拡張性を扱います。
セクション 8. Extension 機能
- pgvector・検索拡張など、PostgreSQLエコシステムの拡張機能を扱います。
セクション 9. Distributed 環境と Scheduling
- 分散環境の構成とcronベースのスケジューリングを総合実習で締めくくります。
扱う技術・実習環境
何で実習しますか?
- PostgreSQL
- JSONB
- B-Tree · GIN · GiST
- MVCC · 分離レベル
- pgvector
- Search Extension
- cron · 分散シャーディング
- Docker
- macOS (Apple M3)
- DBMS/RDBMS
- データベース
Apple M3 Air環境で進行し、軽量化と閉鎖的な環境構築のためにDockerを活用します。ローカルでコンテナを一つ立ち上げれば、すぐに進めることができます。
誰が作ったのですか
この講義を共に準備したシリコンバレーの開発者
シリコンバレー・AIスタートアップ サーバー開発者
Waddy
13年目のバックエンドサーバー開発者として国内の様々な企業で開発に携わり、最近シリコンバレーへ転職してAI関連の開発を行っています。Tossの開発者の友人との縁で合流することになり、持っている知識を最大限わかりやすく、気軽にお伝えしたいと思っています。
- [現] シリコンバレー AI スタートアップ サーバー開発者
- [前] カカオ本社 サーバー開発者
- [前] 国内スタートアップ2〜3社 サーバー開発者
- [前] 海外コンピュータ工学専攻
よくある質問
PostgreSQL 講座よくある質問
PostgreSQLはどのようなデータベースですか?
PostgreSQLはオープンソースのオブジェクト関係型データベースです。関係型テーブルを扱いながらも、ACIDトランザクションやMVCCによる同時実行制御、B-Tree・GIN・GiSTインデックス、ユーザー定義関数・型・拡張モジュールを標準で備えており、定型データとJSON・ベクトルなどの非定型データを一つのデータベースで共に扱うことができます。この講義では、それらの機能を「基礎SQL → インデックス → トランザクション → Extension」の順に実習を通して習得します。
AI時代にPostgreSQLがなぜ注目されているのですか?
扱うべきデータが定型テーブルだけではなくなったからです。JSON形式の非定型データ、蓄積され続けるログ、埋め込みベースのベクトルデータを共に処理する必要がありますが、PostgreSQLはJSONBによる柔軟なスキーマ、インデックスによる大規模データセットの性能、pgvector拡張による類似度検索を一つの場所で処理します。システムを複数繋ぎ合わせる必要がないという点が核心です。
pgvectorとは何ですか?
pgvectorは、PostgreSQLにベクトル型と類似度距離演算子を追加する拡張機能(Extension)です。埋め込み(Embedding)をカラムに保存しておけば、通常のSELECT文のソート条件だけで最も類似した項目を探すことができるため、別途ベクトルDBを用意しなくてもAI機能を組み込むことができます。セクション8のExtension機能で、このクエリを実際に実行してみます。
PostgreSQL의 JSONBカラムにもインデックスを貼ることはできますか?
はい。JSONBカラムにはGINインデックスを貼ることで、特定のキーや値で検索する際もフルスキャンせずに照会できます。非定型データを入れておきながら、関係型テーブルのように素早く検索できるという意味です。セクション6「インデックスおよびパフォーマンスの最適化」でB-Tree・GIN・GiSTインデックスを扱います。
PostgreSQLとMySQL・Oracleのような他のRDBMSは何が違うのですか?
3つともリレーショナルDBMS(RDBMS)なので、テーブル・SQL・トランザクションという骨組みは同じです。PostgreSQLが異なる点は、インデックスと拡張構造です。PostgreSQLはB-Tree以外にGIN・GiSTインデックスを標準で提供しており、JSONBや配列のような非定型カラムにもインデックスを貼ることができ、pgvectorのような拡張をインストールしてベクトル検索をデータベース内で直接追加することも可能です。そのため、サービスが大きくなる際にログストレージ・検索エンジン・ベクトルDBを一つずつ付け足していく手間を減らすことができます。この講義では、その選択基準と限界についてセクション6・8で共に扱います。
PostgreSQL(ポストグレスキューエル)の初心者でもついていけますか?
はい。難易度入門の講義として、データベースとリレーショナル概念から始まり、データ型・制約条件・基本SQLの順に進んでいきます。基本的なSQLの使用経験があれば十分ですし、後半のインデックス・トランザクション・分散環境は実務経験者にとっても新しい内容となっています。
PostgreSQLのトランザクション隔離レベルはどのように扱いますか?
PostgreSQLはRead Committed・Repeatable Read・Serializableの隔離レベルをサポートしており、デフォルト値はRead Committedです。セクション7「トランザクション・同時実行性・拡張性」でセッションを分け、隔離レベルを変更しながら、同じ時点で各セッションが見るスナップショットがどのように変化するかを直接確認します。
実習環境はどのように構成しますか?
Apple M3 Air環境で進行し、軽量化と閉鎖的な環境構築のためにDockerを使用します。セクション2でPostgreSQLの特徴とともにDocker環境の構築、DB接続設定を扱いますので、そのまま進めていただければ大丈夫です。
どのようなExtensionを扱いますか?
セクション8のExtension機能では、pgvectorを活用した埋め込みベクトル検索と、Search Extensionを活用したトークナイザーを扱います。続くセクション9では、cronと分散シャーディングを組み合わせた総合実習で締めくくります。
すでに実務でPostgreSQLを使っていますが、受講する理由はありますか?
PostgreSQLはRead Committed・Repeatable Read・Serializableの分離レベルをサポートしており、デフォルト値はRead Committedです。分離レベルによって、他のセッションがコミットした変更が自分のトランザクションで見えるタイミングが変わります。クエリを書くことと、この違いを説明することは別物です。セクション7ではセッションを分けて分離レベル別のスナップショットが実際にどのように変わるかを実習で確認し、セクション6はインデックスの選択基準を、セクション9は分散環境でクエリが動作する仕組みを扱います。
公式文書で独学してもいいのではないでしょうか?
公式文書は各機能が何であるかを正確に説明しています。ただ、今このテーブルにどのインデックスを貼るべきか、隔離レベルを変えると自分のサービスで何が変わるのかまでは、文書が代わりに判断してはくれません。この講義は、その判断をクエリを直接実行して確認することに時間を費やします。
難易度は入門ですが、扱う範囲はどこまでですか?
始まりはデータベースとリレーショナル概念ですが、終わりはインデックスと性能最適化(セクション6)、トランザクション・同時実行(セクション7)、Extension(セクション8)、分散環境とスケジューリング(セクション9)です。全体がこの流れで構成されており、受講期間は無制限なので、必要なセクションだけを後で見返すこともできます。
PostgreSQL講義のカリキュラムはどのような順序ですか?
データベースと関係モデルの概念、Docker環境の構築から始まり、データ型と制約条件、基本SQL、ソート・集計・JOIN設計、高度なクエリパターン、インデックスと性能最適化、トランザクション・同時実行性・拡張性、Extension、分散環境とスケジューリングの順で進みます。受講期間は無制限です。
なぜそのインデックスを選ぶのか、隔離レベルを変えると何が変わるのか
基本SQLから始まり、インデックスと性能、トランザクション、pgvectorベクトル検索まで、すべて実習で確認します。
강의 시작하기
一緒に成長しましょう
開発者オープンチャットルーム
キャリアや現場の状況、技術を共有する開発者オープンチャットを運営しています。講義を聞きながら気になった点や実務の悩みなど、お気軽に共有してください。
オープンチャットに参加するInstagramを見る