[go] Go 언어에서 데이터베이스 연동 시 트랜잭션 처리 예제

Go 언어를 사용하여 데이터베이스를 연동하고 트랜잭션을 처리하는 방법에 대해 알아봅시다.

필요한 패키지

먼저 필요한 패키지를 import 해야 합니다. Go 언어에서 데이터베이스와의 연동을 위해서는 database/sql과 원하는 데이터베이스에 맞는 드라이버 패키지가 필요합니다.

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

위 예제에서는 MySQL 데이터베이스를 사용하는 예제입니다. 다른 데이터베이스를 사용할 경우 해당 데이터베이스에 맞는 드라이버를 import 해주어야 합니다.

트랜잭션 처리 예제

아래는 Go 언어에서 MySQL 데이터베이스와 연동하여 트랜잭션을 처리하는 예제입니다.

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    db, err := sql.Open("mysql", "user:password@/dbname")
    if err != nil {
        panic(err.Error())
    }
    defer db.Close()

    // 트랜잭션 시작
    tx, err := db.Begin()
    if err != nil {
        panic(err.Error())
    }

    // 예제를 위한 쿼리 실행
    _, err = tx.Exec("INSERT INTO users (name, email) VALUES (?, ?)", "John Doe", "john@example.com")
    if err != nil {
        // 롤백
        tx.Rollback()
        panic(err.Error())
    }

    // 예제를 위한 쿼리 실행
    _, err = tx.Exec("UPDATE products SET stock = stock - 1 WHERE id = ?", 123)
    if err != nil {
        // 롤백
        tx.Rollback()
        panic(err.Error())
    }

    // 커밋
    err = tx.Commit()
    if err != nil {
        panic(err.Error())
    }

    fmt.Println("트랜잭션 처리 완료")
}

위 예제에서는 sql.Open을 통해 MySQL 데이터베이스에 연결하고, db.Begin을 통해 트랜잭션을 시작합니다. 이후 tx.Exec를 사용하여 쿼리를 실행하고, 모든 작업이 정상적으로 완료되면 tx.Commit으로 트랜잭션을 커밋합니다. 만약 에러가 발생한다면 tx.Rollback으로 롤백 처리를 합니다.

결론

이렇게 Go 언어에서 데이터베이스와의 연동 및 트랜잭션 처리를 진행할 수 있습니다. 트랜잭션을 사용하여 여러 쿼리를 한 묶음으로 처리할 때 유용하게 활용할 수 있습니다.

해당 예제에서는 MySQL 데이터베이스를 사용하였지만, 다른 데이터베이스를 사용하는 경우에도 해당 데이터베이스에 맞는 드라이버를 import하여 연동할 수 있습니다.

참고 자료