반응형
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
👨💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.
Go 에서 MySQL / MariaDB 와 연동하려면, 어떤 모듈을 사용하는 것이 가장 효율적인지 간략히 알아보았습니다.

질문 >
Go 에서 MySQL / MariaDB 와 연동하려면, 어떤 모듈을 사용하는 것이 가장 효율적인가요?
답변 >
Go에서 MySQL 또는 MariaDB와 연동하려면, 효율적이고 널리 사용되는 라이브러리를 선택하는 것이 중요합니다. 아래는 가장 인기 있는 MySQL/MariaDB 클라이언트와 사용 방법입니다.
1. go-sql-driver/mysql
특징:
- Go에서 가장 널리 사용되는 MySQL 드라이버.
- 표준 database/sql 패키지와 호환.
- MySQL 및 MariaDB 지원.
설치:
go get -u github.com/go-sql-driver/mysql
사용 예제:
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
// MySQL 데이터베이스 연결 설정
dsn := "user:password@tcp(127.0.0.1:3306)/dbname"
db, err := sql.Open("mysql", dsn)
if err != nil {
panic(err)
}
defer db.Close()
// 연결 확인
if err := db.Ping(); err != nil {
panic(err)
}
fmt.Println("Connected to MySQL!")
// 데이터 조회 예제
rows, err := db.Query("SELECT id, name FROM users")
if err != nil {
panic(err)
}
defer rows.Close()
for rows.Next() {
var id int
var name string
if err := rows.Scan(&id, &name); err != nil {
panic(err)
}
fmt.Printf("ID: %d, Name: %s\\n", id, name)
}
}
2. gorm
특징:
- Go용 ORM(Object-Relational Mapping) 라이브러리.
- 코드 가독성과 생산성을 높이는 데 도움.
- MySQL/MariaDB뿐만 아니라 다양한 데이터베이스 지원 (PostgreSQL, SQLite, 등).
설치:
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
사용 예제:
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type User struct {
ID uint `gorm:"primaryKey"`
Name string `gorm:"size:100"`
}
func main() {
// MySQL 데이터베이스 연결 설정
dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
fmt.Println("Connected to MySQL with GORM!")
// 자동 마이그레이션
db.AutoMigrate(&User{})
// 데이터 생성
db.Create(&User{Name: "Alice"})
// 데이터 조회
var users []User
db.Find(&users)
for _, user := range users {
fmt.Printf("ID: %d, Name: %s\\n", user.ID, user.Name)
}
}
3. sqlx
특징:
- database/sql을 확장한 라이브러리.
- 더 간단한 API를 제공하며, 구조체 매핑 기능이 추가됨.
- 성능은 database/sql과 유사.
설치:
go get github.com/jmoiron/sqlx
사용 예제:
package main
import (
"fmt"
"github.com/jmoiron/sqlx"
_ "github.com/go-sql-driver/mysql"
)
type User struct {
ID int `db:"id"`
Name string `db:"name"`
}
func main() {
// MySQL 데이터베이스 연결 설정
dsn := "user:password@tcp(127.0.0.1:3306)/dbname"
db, err := sqlx.Connect("mysql", dsn)
if err != nil {
panic(err)
}
defer db.Close()
fmt.Println("Connected to MySQL with sqlx!")
// 데이터 조회
var users []User
err = db.Select(&users, "SELECT id, name FROM users")
if err != nil {
panic(err)
}
for _, user := range users {
fmt.Printf("ID: %d, Name: %s\\n", user.ID, user.Name)
}
}
4. ent
특징:
- 코드 생성 기반 ORM 라이브러리.
- 스키마 정의를 코드로 관리.
- 타입 안정성 높은 쿼리 지원.
설치:
go get entgo.io/ent/cmd/ent
사용:
- 스키마 생성:
go run entgo.io/ent/cmd/ent init User
- 사용자 스키마 정의:
package schema
import "entgo.io/ent/schema/field"
// User holds the schema definition for the User entity.
type User struct {
ent.Schema
}
// Fields of the User.
func (User) Fields() []ent.Field {
return []ent.Field{
field.String("name"),
}
}
- 코드 생성:
go generate ./...
- 사용:
package main
import (
"context"
"fmt"
"myproject/ent"
_ "github.com/go-sql-driver/mysql"
)
func main() {
client, err := ent.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname")
if err != nil {
panic(err)
}
defer client.Close()
ctx := context.Background()
// 데이터 생성
user, err := client.User.Create().SetName("Bob").Save(ctx)
if err != nil {
panic(err)
}
fmt.Printf("Created user: %v\\n", user)
}
5. 라이브러리 비교
라이브러리 | 주요 특징 | 적합한 경우 |
go-sql-driver/mysql | 기본 SQL 드라이버, 경량, 성능 최적화. | SQL 쿼리를 직접 작성하는 경우. |
gorm | 풍부한 기능의 ORM, 자동 마이그레이션, 구조체 중심 개발 지원. | 생산성을 중요하게 생각하고 ORM이 필요한 경우. |
sqlx | database/sql 확장, 구조체 매핑, 간결한 API 제공. | 성능과 간결성을 동시에 고려하는 경우. |
ent | 타입 안전성 높은 코드 생성 기반 ORM. | 스키마를 코드로 관리하고 싶을 때. |
6. 결론
- SQL을 직접 제어해야 한다면 go-sql-driver/mysql이나 sqlx를 사용하세요.
- ORM을 사용해 생산성을 높이고 싶다면 gorm 또는 ent를 추천합니다.
- MariaDB와 MySQL은 대부분의 라이브러리에서 동일하게 지원되므로, 데이터베이스 특성에 따라 적합한 클라이언트를 선택하세요.
🎬 유튜브 채널 🎬
위로그@WiLog
📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리(Willee) 입니다. 📢 위로그@WiLog 는 자기계발을 목적으로 하는 채널 입니다. 📢 오늘도 즐겁게~ 자신을 위한 계발을 함께 해보아요~ d^_^b 📌
www.youtube.com
🎬 치지직 채널 🎬
위로그 채널 - CHZZK
지금, 스트리밍이 시작됩니다. 치지직-
chzzk.naver.com
반응형