Go에서 Mysql 연동하기

임태빈·2022년 1월 6일
0

go

목록 보기
6/13

안녕하세요.
이번 포스팅에서는 Go에서 데이터베이스를 사용하는 방법에 대해
작성해보려고 합니다.

Mysql을 사용할 예정입니다!!

코드 작성에 앞서 DB연동을 하려면 사용하려는 RDBMS의 드라이버를 설치해주어야 합니다. 저는 Mysql을 사용할 예정이기에 먼저 Mysql 드라이버를 다운받도록 하겠습니다.

go get github.com/go-sql-driver/mysql 

제가 찾아낸 DB를 연결하는 방법에 경우 두가지가 있습니다.
첫번째는 sql.Open을 사용하는 방법이고 두번째는 sql.OpenDB를 사용하는 것입니다.
두 방법의 차이점은 OpenDB에 경우 Connetor를 사용하지만 Open은 사용하지를 않습니다.
먼저 Connector를 사용하는 방법에 대해서 보겠습니다.

package main

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

func GetConnector() *sql.DB {
	cfg := mysql.Config{
		User:                 "유저 이름 입력",
		Passwd:               "비밀번호 입력",
		Net:                  "tcp",
		Addr:                 "<ip>:<포트>",
		Collation:            "utf8mb4_general_ci",
		Loc:                  time.UTC,
		MaxAllowedPacket:     4 << 20.,
		AllowNativePasswords: true,
		CheckConnLiveness:    true,
		DBName:               "DB명 입력",
	}
	connector, err := mysql.NewConnector(&cfg)
	if err != nil {
		panic(err)
	}
	db := sql.OpenDB(connector)
	return db
}

func main() {
	db := GetConnector()
	err := db.Ping()
	if err != nil {
		panic(err)
	}
	var name string
	err = db.QueryRow("SELECT name FROM test WHERE id = 1").Scan(&name)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(name)
	print("success")
}

GetConnector()함수를 보시면 mysql.Config를 통해 자신이 접속할 DB에 대한 정보를 작성해주시면 됩니다. 여기서 한글로 입력된 부부만 수정하시면 됩니다:) 그런 다음. mysql.NewConnector를 통해 connector를 생성하고 이를 OpenDB에 인자로 넣어주면 연결이 됩니다.
main함수에서는 이를 테스트하기 위한 코드를 실행하고 있습니다.

Connector를 사용하지 않는 방법에 대해서 알아보겠습니다.

package main

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

func main() {
	db, err := sql.Open("mysql", "root:pwd@tcp(127.0.0.1:3306)/testdb")
	defer db.Close()
	if err != nil {
		panic(err)
	}
	var name string
	err = db.QueryRow("SELECT name FROM test WHERE id = 1").Scan(&name)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(name)
	print("success")
}

sql.Open는 드라이버명과 사용할 주소에 대한 dsn(dataSourceName)을 입력해주시기만 하면 됩니다.
여기서 한가지 주목해야 하는 점은 sql.Open()은 실제 DB Connection을 Open하지 않는다는 점입니다. sql.DB는 사용자가 입력한 드라이버종류와 Connection 정보를 가지고는 있지만, 실제 DB를 연결하지 않습니다. 실제 DB Connection은 Query 등과 같이 실제 DB 연결이 필요한 싯점에 이루어지게 됩니다.

두개의 코드를 돌려보셨을 때 Console창에 Success가 나오면 잘 성공하신거라 생각하시면 됩니다:)
제 결과를 공유드리면 다음과 같이 나왔습니다

제가 준비한 내용은 이렇게 끝이며 부족한 부분 혹은 잘못된 내용이 있다면 댓글 부탁드립니다:)

profile
golang과 서버 개발을 하고 있는 개발자입니다.

0개의 댓글