[go] 구조체(struct)를 데이터베이스에 저장하는 방법

구조체는 데이터를 논리적으로 묶을 수 있는 자료형입니다. 이러한 구조체를 데이터베이스에 저장하려면 몇 가지 절차를 따라야 합니다. 이 기사에서는 Go 언어에서 구조체를 데이터베이스에 저장하는 방법에 대해 알아보겠습니다.

1. 데이터베이스 연결 설정

구조체를 데이터베이스에 저장하기 전에 먼저 데이터베이스에 연결해야 합니다. Go 언어에서 데이터베이스에 연결하기 위해서는 해당 데이터베이스에 대한 드라이버를 가져와야 합니다. 예를 들어 MySQL 데이터베이스를 사용한다면 github.com/go-sql-driver/mysql 패키지를 가져와야 합니다. 그리고 database/sql 패키지를 사용하여 데이터베이스와 연결을 설정합니다.

2. 구조체와 테이블 매핑

Go 언어에서 구조체를 데이터베이스에 저장하려면 구조체의 필드와 데이터베이스 테이블의 열을 매핑해야 합니다. 이를 위해 Go 언어에서는 태그(tag)를 사용합니다. 태그는 구조체 필드에 메타데이터를 추가하는 방법으로 사용됩니다. 각 필드의 태그에는 데이터베이스 열의 이름과 속성을 지정할 수 있습니다.

예를 들어, 다음과 같은 구조체를 가정해 봅시다:

type User struct {
	ID   int    `db:"id"`
	Name string `db:"name"`
	Age  int    `db:"age"`
}

위의 예제에서는 db 태그를 사용하여 구조체 필드를 데이터베이스 열과 매핑합니다.

3. 데이터베이스에 구조체 저장

구조체와 테이블 사이의 매핑을 설정한 후, 실제로 데이터베이스에 구조체를 저장해야 합니다. 이를 위해서는 SQL 쿼리를 사용하여 데이터베이스에 데이터를 삽입해야 합니다.

func (u *User) Save(db *sql.DB) error {
    stmt, err := db.Prepare("INSERT INTO users (id, name, age) VALUES (?, ?, ?)")
    if err != nil {
        return err
    }
    defer stmt.Close()

    _, err = stmt.Exec(u.ID, u.Name, u.Age)
    if err != nil {
        return err
    }

    return nil
}

위의 예제에서는 Prepare 함수를 사용하여 SQL 쿼리를 준비하고, Exec 함수를 사용하여 쿼리를 실행하여 데이터를 데이터베이스에 저장합니다.

4. 데이터베이스에서 구조체 로드

위의 단계에서 저장한 데이터를이 사용하기 위해서는 데이터베이스에서 구조체로 로드해야 합니다. 이를 위해서는 SQL 쿼리를 사용하여 데이터베이스에서 데이터를 가져와야 합니다.

func LoadUser(id int, db *sql.DB) (User, error) {
    var user User

    err := db.QueryRow("SELECT id, name, age FROM users WHERE id = ?", id).Scan(&user.ID, &user.Name, &user.Age)
    if err != nil {
        return User{}, err
    }

    return user, nil
}

위의 예제에서는 QueryRow 함수를 사용하여 데이터베이스에서 데이터를 조회하고, Scan 함수를 사용하여 결과를 구조체 필드에 대입합니다.

요약

구조체를 데이터베이스에 저장하는 방법에 대해 알아보았습니다. 데이터베이스 연결 설정, 구조체와 테이블 매핑, 데이터베이스에 구조체 저장 및 데이터베이스에서 구조체 로드하는 과정을 설명했습니다. 이제 구조체를 데이터베이스에 저장하고 로드하는 작업에 대한 이해를 가지고 있을 것입니다.