이 퀵스타트에서는 Go에서 SQL Server 데이터베이스에 연결해 쿼리를 실행합니다. 표준 go-mssqldb 패키지와 함께 database/sql 드라이버를 사용합니다.
Prerequisites
이 글의 주요 샘플을 위해서는 다음과 같은 것이 필요합니다:
- 1.25 이상으로 가세요
- SQL Server 호환 엔드포인트에 대한 접근. 주요 샘플은 Windows의 로컬 SQL Server 인스턴스를 가정합니다.
-
AdventureWorks2025샘플 데이터베이스 다운로드 및 복원 방법은 AdventureWorks 샘플 데이터베이스를 참조하세요.
로컬 SQL Server 인스턴스 대신 Azure SQL에 연결한다면, Azure 특유 전제 조건과 설정에 go-mssqldb with Azure SQL Database를 사용하세요.
시작점 선택
이 글의 주요 샘플은 통합 인증이 적용된 Windows의 로컬 SQL Server 인스턴스를 사용합니다. Linux나 macOS를 사용 중이거나 Azure SQL에 연결한다면 이 글 후반부에서 SQL 인증 또는 Microsoft Entra ID 변형을 사용하세요.
- SQL Server에 대한 가장 작은 종단 투 엔드 샘플을 원한다면 이 글을 계속 읽으시면 로컬 테스트 데이터베이스를 만들 수 있습니다.
- Windows 인증 대신 SQL Server 로그인으로 접속한다면, 이 글을 계속 참고하시고 나중에 SQL 인증 변형을 사용하세요.
- Azure SQL Database, Azure SQL Managed Instance, 또는 Fabric에서 SQL 데이터베이스에 연결하고 있다면, 먼저 Azure SQL Database에서 go-mssqldb를 사용하세요. 그 기사는 Azure TLS 요구사항, 연결 제한, 비밀번호 없는 인증에 대해 다룹니다.
- Microsoft Entra ID를 사용 중이라면
github.com/microsoft/go-mssqldb/azuread를 가져와서azuresql드라이버 이름을 사용하세요. 자격 증명 흐름 세부 사항은 Microsoft Entra ID 인증을 참조하세요.
Go 프로젝트 만들기
새 디렉터리 생성 및 초기화:
mkdir go-sql-quickstart cd go-sql-quickstart go mod init go-sql-quickstart드라이버 설치:
go get github.com/microsoft/go-mssqldb
연결 및 쿼리
다음과 같은 Go 코드로 이름을 main.go 가진 파일을 생성합니다:
package main
import (
"context"
"database/sql"
"fmt"
"log"
_ "github.com/microsoft/go-mssqldb"
)
func main() {
// Build the connection string.
connString := "sqlserver://<server>?database=AdventureWorks2025&trusted_connection=yes"
// Open and verify the connection.
db, err := sql.Open("sqlserver", connString)
if err != nil {
log.Fatal("Error opening connection: ", err.Error())
}
defer db.Close()
if err = db.PingContext(context.Background()); err != nil {
log.Fatal("Error pinging database: ", err.Error())
}
fmt.Println("Connected to SQL Server.")
// Run a SELECT query.
rows, err := db.QueryContext(context.Background(),
"SELECT DepartmentID, Name, GroupName FROM HumanResources.Department")
if err != nil {
log.Fatal("Error running query: ", err.Error())
}
defer rows.Close()
// Iterate through the results.
fmt.Println("\nDepartments:")
for rows.Next() {
var id int
var name, groupName string
if err := rows.Scan(&id, &name, &groupName); err != nil {
log.Fatal("Error scanning row: ", err.Error())
}
fmt.Printf(" %d: %s (%s)\n", id, name, groupName)
}
if err = rows.Err(); err != nil {
log.Fatal("Error after row iteration: ", err.Error())
}
}
애플리케이션을 실행합니다.
go run main.go
예상 출력:
Connected to SQL Server.
Departments:
1: Engineering (Research and Development)
2: Tool Design (Research and Development)
3: Sales (Sales and Marketing)
4: Marketing (Sales and Marketing)
...
한 줄을 삽입하세요
다음 함수를 main.go에 추가하고 main()에서 호출합니다:
func insertDepartment(db *sql.DB, name, groupName string) (int64, error) {
ctx := context.Background()
result, err := db.ExecContext(ctx,
"INSERT INTO HumanResources.Department (Name, GroupName) VALUES (@p1, @p2)",
sql.Named("p1", name),
sql.Named("p2", groupName))
if err != nil {
return 0, err
}
return result.RowsAffected()
}
Important
드라이버는 go-mssqldb를 지원하지 않습니다. LastInsertId() 호출하면 오류가 발생합니다. 삽입된 IDENTITY 값을 가져오려면 OUTPUT 절 또는 별도의 SELECT SCOPE_IDENTITY() 쿼리를 사용하세요.
SQL 인증 사용
Windows 인증 대신 SQL Server 인증으로 연결하려면 연결 문자열을 변경하세요. 모든 연결 문자열 형식과 옵션에 대해서는 Connection strings를 참조하세요.
connString := "sqlserver://<user>:<password>@<server>:1433?database=AdventureWorks2025"
Microsoft Entra ID 사용
Azure SQL Database, Azure SQL Managed Instance, 또는 Fabric에서 SQL 데이터베이스에 연결하고 있다면, 먼저 Azure SQL Database에서 go-mssqldb를 사용하세요. 이 절의 예시는 에서 필요한 main.go최소 코드 변경만을 보여줍니다.
Microsoft Entra ID를 사용해 인증하려면 패키지를 azuread 가져오세요:
import (
_ "github.com/microsoft/go-mssqldb/azuread"
)
그런 다음 azuresql 드라이버 이름을 사용하고 연결 문자열에 fedauth을 추가하세요. 모든 Microsoft Entra 옵션에 대해서는 Microsoft Entra ID 인증을 참조하세요.
db, err := sql.Open("azuresql", "sqlserver://<server>.database.windows.net?database=AdventureWorks2025&fedauth=ActiveDirectoryDefault&encrypt=true&TrustServerCertificate=false")