PHpullh
학습 라이브러리/Go/database/sql 사용법

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 메타데이터를 가집니다.