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

Go 언어에서 데이터베이스 작업 중에 트랜잭션을 처리하는 방법에 대해 알아보겠습니다. Go 언어에서는 database/sql 패키지를 사용하여 다양한 데이터베이스와 상호작용할 수 있습니다. 트랜잭션은 여러 데이터베이스 작업을 하나의 논리적 작업 단위로 묶는 데 사용됩니다. 이를 통해 모든 작업이 성공하거나 실패하는 것을 보장할 수 있습니다.

데이터베이스에 연결

우선, 데이터베이스에 연결하는 예제부터 살펴보겠습니다. 다음은 Go에서 MySQL 데이터베이스에 연결하는 방법입니다.

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

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

위의 코드에서 sql.Open 함수를 사용하여 MySQL 데이터베이스에 연결하고, 연결이 성공한 경우 db 변수에 데이터베이스 핸들을 저장합니다.

트랜잭션 시작과 종료

이제 실제로 트랜잭션을 시작하고 종료하는 방법을 살펴보겠습니다. 아래 예제는 트랜잭션을 시작하고 커밋 또는 롤백하는 방법을 보여줍니다.

func performTask(db *sql.DB) error {
    tx, err := db.Begin()
    if err != nil {
        return err
    }

    // 여기에 데이터베이스 작업 수행

    if err != nil {
        tx.Rollback()
        return err
    }
    
    err = tx.Commit()
    if err != nil {
        return err
    }

    return nil
}

위의 코드에서 db.Begin을 사용하여 트랜잭션을 시작하고, tx.Commit을 사용하여 트랜잭션을 커밋하며, 에러가 발생한 경우 tx.Rollback을 사용하여 롤백합니다.

예외 처리

트랜잭션 처리 중에 발생할 수 있는 예외 상황에 대비하여 적절한 예외 처리를 해주어야 합니다. 예를 들어, 데이터베이스 작업 실패, 트랜잭션 커밋 실패 등의 상황에 대한 예외 처리가 필요합니다.

마무리

이상으로 Go 언어에서 데이터베이스의 트랜잭션 처리에 대한 간단한 예제를 살펴보았습니다. 트랜잭션은 데이터베이스 작업을 안전하게 처리하기 위해 중요한 도구이므로, 실제 개발 시에는 신중히 다루어져야 합니다.

참고 문헌: