GO · 파일/IO
database/sql 사용법
database/sql로 데이터베이스에 연결하고 CRUD를 수행합니다. 커넥션 풀링과 트랜잭션을 다룹니다.
파일/IO고급databasesqltransactionconnection-pool
핵심 설명
database/sql로 데이터베이스에 연결하고 CRUD를 수행합니다. 커넥션 풀링과 트랜잭션을 다룹니다.
Go code
package main
import (
"context"
"database/sql"
"fmt"
"time"
// _ "github.com/lib/pq" // PostgreSQL 드라이버
)
func example(db *sql.DB) {
ctx := context.Background()
// 커넥션 풀 설정
db.SetMaxOpenConns(25)
db.SetMaxIdleConns(5)
db.SetConnMaxLifetime(5 * time.Minute)
// 단일 행 조회
var name string
err := db.QueryRowContext(ctx,
"SELECT name FROM users WHERE id = $1", 1).Scan(&name)
if err == sql.ErrNoRows {
fmt.Println("사용자 없음")
} else if err != nil {
fmt.Println("에러:", err)
}
// 여러 행 조회
rows, _ := db.QueryContext(ctx, "SELECT id, name FROM users")
defer rows.Close()
for rows.Next() {
var id int
var n string
rows.Scan(&id, &n)
fmt.Printf("ID: %d, Name: %s\n", id, n)
}
// 트랜잭션
tx, _ := db.BeginTx(ctx, nil)
defer tx.Rollback() // 커밋 안 되면 자동 롤백
tx.ExecContext(ctx, "INSERT INTO users(name) VALUES($1)", "Gopher")
tx.Commit()
}
func main() {
// db, _ := sql.Open("postgres", "postgres://localhost/mydb?sslmode=disable")
// defer db.Close()
// example(db)
fmt.Println("database/sql 패턴: 커넥션 풀, 쿼리, 트랜잭션")
}학습 팁
항상 Context 버전 메서드(QueryContext, ExecContext)를 사용하여 타임아웃과 취소를 지원하세요.
주의할 점
rows.Close()를 호출하지 않으면 커넥션이 풀에 반환되지 않아 커넥션 고갈이 발생합니다.
자주 묻는 질문
database/sql 사용법란 무엇인가요?
database/sql 로 데이터베이스에 연결하고 CRUD를 수행합니다. 커넥션 풀링과 트랜잭션을 다룹니다.
database/sql 사용법 학습 시 주의할 점은 무엇인가요?
rows.Close() 를 호출하지 않으면 커넥션이 풀에 반환되지 않아 커넥션 고갈이 발생합니다.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.