pgx: 고성능 PostgreSQL 드라이버
pgxpool, Copy 프로토콜 및 일괄 쿼리
pgx: 고성능 PostgreSQL 드라이버은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
pgx란 무엇입니까?
github.com/jackc/pgx/v5는 PostgreSQL 전용 Go 드라이버입니다. database/sql에서 사용할 수 없는 고급 PostgreSQL 기능인 COPY 프로토콜, 알림, 준비된 문 캐싱 등을 지원하는 네이티브 API를 제공합니다.
pgx로 연결하기
pgx의 네이티브 풀 또는 database/sql 호환성 계층을 사용합니다:
// Native pgx pool
pool, err := pgxpool.New(ctx, "postgres://user:pass@localhost/mydb")
if err != nil { log.Fatal(err) }
defer pool.Close()pgxpool
pgxpool.New는 관리되는 연결 풀을 생성합니다. 구성 분석을 사용해 설정합니다:
config, _ := pgxpool.ParseConfig("postgres://...")
config.MaxConns = 10
pool, _ := pgxpool.NewWithConfig(ctx, config)pgx로 조회하기
pgx는 pool.Query와 pgx.CollectRows 도우미 함수를 사용합니다:
rows, _ := pool.Query(ctx, "SELECT id, name FROM users WHERE active=$1", true)
users, err := pgx.CollectRows(rows, pgx.RowToStructByName[User])RowToStructByName
pgx.RowToStructByName은 sqlx Select와 비슷하게 소문자 필드 이름이나 db 태그를 사용해 열 이름을 구조체 필드에 매핑합니다.
단일 행 스캔
단일 행 조회에는 pool.QueryRow를 사용합니다:
var name string
err := pool.QueryRow(ctx, "SELECT name FROM users WHERE id=$1", id).Scan(&name)일괄 조회
pgx는 pool.SendBatch를 사용해 하나의 네트워크 왕복으로 여러 조회를 전송할 수 있습니다:
batch := &pgx.Batch{}
batch.Queue("SELECT name FROM users WHERE id=$1", 1)
batch.Queue("SELECT name FROM users WHERE id=$1", 2)
results := pool.SendBatch(ctx, batch)
defer results.Close()COPY 프로토콜
대량 삽입의 경우 pgx는 PostgreSQL의 바이너리 COPY 프로토콜을 지원하며, 이는 개별 INSERT 문보다 훨씬 빠릅니다:
conn, _ := pool.Acquire(ctx)
defer conn.Release()
conn.Conn().CopyFrom(ctx, pgx.Identifier{"users"}, []string{"name","email"}, pgx.CopyFromRows(rows))Listen/Notify
pgx는 DB 내부에서 실시간 게시/구독을 구현하기 위한 PostgreSQL의 LISTEN/NOTIFY를 지원합니다:
conn, _ := pool.Acquire(ctx)
conn.Exec(ctx, "LISTEN events")
notification, _ := conn.Conn().WaitForNotification(ctx)
fmt.Println(notification.Payload)database/sql과 함께 pgx 사용하기
기존 sql 기반 코드와 호환하려면 pgx를 database/sql 드라이버로 사용합니다:
import pgxstdlib "github.com/jackc/pgx/v5/stdlib"
db := sql.OpenDB(pgxstdlib.OpenDBFromPool(pool))저수준 연결을 위한 pgconn
pgconn은 원시 PostgreSQL 유선 프로토콜을 노출하는 pgx의 저수준 연결 라이브러리입니다. 사용자 지정 프로토콜 작업이나 관리 도구에 사용합니다.
빠른 확인
pgx의 COPY 프로토콜이 여러 INSERT 문보다 빠른 이유는 무엇입니까?
복습: pgx
핵심 내용:
- 관리되는 연결 풀에는 pgxpool을 사용하고 MaxConns로 구성합니다
- 편리한 스캔에는 CollectRows + RowToStructByName을 사용합니다
- 하나의 네트워크 왕복으로 여러 조회를 처리하려면 SendBatch를 사용합니다
- 처리량이 높은 대량 삽입에는 CopyFrom을 사용합니다
자주 묻는 질문
“pgx: 고성능 PostgreSQL 드라이버” 강의는 무료인가요?
네 — “pgx: 고성능 PostgreSQL 드라이버” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“pgx: 고성능 PostgreSQL 드라이버”에서 뭘 배우나요?
pgxpool, Copy 프로토콜 및 일괄 쿼리 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Go Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“pgx: 고성능 PostgreSQL 드라이버” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- database/sql과 드라이버
- sqlx: 구조체 스캔과 명명된 쿼리
- pgx: 고성능 PostgreSQL 드라이버
- 트랜잭션과 마이그레이션