0Pricing
Go Academy · 강의

database/sql과 드라이버

DB 설정, QueryRow, Scan 및 연결 풀

database/sql과 드라이버은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

database/sql 개요

database/sql은 Go의 표준 데이터베이스 추상화 계층입니다. 연결 풀을 관리하며 드라이버 플러그인을 통해 모든 데이터베이스와 함께 사용할 수 있습니다.

드라이버 등록

부수 효과(드라이버 등록)를 위해 드라이버 패키지를 가져옵니다. 그런 다음 연결을 엽니다:

import _ "github.com/lib/pq" // PostgreSQL driver

db, err := sql.Open("postgres", "postgres://user:pass@localhost/mydb?sslmode=disable")
if err != nil { log.Fatal(err) }
defer db.Close()

sql.Open과 db.Ping

sql.Open은 연결하지 않고 DSN을 검증합니다. 연결이 정상인지 확인하려면 db.Ping() 또는 db.PingContext(ctx)를 호출합니다.

if err := db.Ping(); err != nil { log.Fatal(err) }

행 조회

db.QueryContext를 사용해 SELECT를 실행하고 행을 스캔합니다:

rows, err := db.QueryContext(ctx, "SELECT id, name FROM users WHERE active = $1", true)
if err != nil { return err }
defer rows.Close()
for rows.Next() {
    var id int; var name string
    rows.Scan(&id, &name)
}

단일 행 조회

db.QueryRowContext는 결과가 최대 하나일 것으로 예상되는 조회에 사용할 *Row를 반환합니다:

var name string
err := db.QueryRowContext(ctx, "SELECT name FROM users WHERE id = $1", id).Scan(&name)
if errors.Is(err, sql.ErrNoRows) { /* not found */ }

변경 작업 실행

INSERT, UPDATE, DELETE에는 db.ExecContext를 사용합니다. 영향받은 행 수와 마지막 삽입 ID가 포함된 Result를 반환합니다.

result, err := db.ExecContext(ctx, "INSERT INTO users(name) VALUES($1)", name)
if err != nil { return err }
id, _ := result.LastInsertId()

준비된 문

문을 한 번 준비한 후 효율적으로 여러 번 실행합니다:

stmt, err := db.PrepareContext(ctx, "SELECT id FROM users WHERE email = $1")
defer stmt.Close()
for _, email := range emails {
    row := stmt.QueryRowContext(ctx, email)
}

연결 풀 설정

프로덕션 환경에 맞게 풀을 구성합니다:

db.SetMaxOpenConns(25)
db.SetMaxIdleConns(25)
db.SetConnMaxLifetime(5 * time.Minute)

rows.Err() 확인

행 반복문이 끝난 후에는 항상 rows.Err()를 확인합니다. 네트워크 오류로 인해 반복문이 일찍 종료되었을 수 있습니다.

if err := rows.Err(); err != nil { return err }

NULL 값

sql.NullString, sql.NullInt64 등을 사용해 데이터베이스의 NULL 값을 처리합니다. 그렇지 않으면 포인터가 아닌 Go 형식으로 스캔할 때 패닉이 발생할 수 있습니다.

var bio sql.NullString
rows.Scan(&bio)
if bio.Valid { fmt.Println(bio.String) }

드라이버 목록

널리 사용되는 드라이버: github.com/lib/pq(PostgreSQL), github.com/go-sql-driver/mysql(MySQL), modernc.org/sqlite(SQLite, 순수 Go)입니다.

빠른 확인

조회 후에 항상 rows.Close()를 호출하고 rows.Err()를 확인해야 하는 이유는 무엇입니까?

복습: database/sql

핵심 내용:

  • 부수 효과를 위해 _를 사용해 드라이버를 가져오고, sql.Open + Ping을 사용합니다
  • QueryContext → rows.Next + Scan + rows.Close + rows.Err
  • 변경 작업에는 ExecContext, 단일 행에는 QueryRowContext를 사용합니다
  • 풀에는 SetMaxOpenConns, SetMaxIdleConns, SetConnMaxLifetime을 사용합니다

자주 묻는 질문

“database/sql과 드라이버” 강의는 무료인가요?

네 — “database/sql과 드라이버” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“database/sql과 드라이버”에서 뭘 배우나요?

DB 설정, QueryRow, Scan 및 연결 풀 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Go Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“database/sql과 드라이버” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. database/sql과 드라이버
  2. sqlx: 구조체 스캔과 명명된 쿼리
  3. pgx: 고성능 PostgreSQL 드라이버
  4. 트랜잭션과 마이그레이션
← Go Academy(으)로 돌아가기