본문 바로가기

Tutorial

[Golang] MySQL-Driver GitHub 번역 및 사용

반응형

이번 포스팅은 Go에서 MySQL DB 연결 시 사용하는 

MySQL-Driver의 github 내용을 번역한 포스팅입니다.

 

 

 

 

 

 

 

 

MySQL-Driver 깃허브

github.com/go-sql-driver/mysql

 

go-sql-driver/mysql

Go MySQL Driver is a MySQL driver for Go's (golang) database/sql package - go-sql-driver/mysql

github.com

Go의 database/sql 패키지를 위한 MySQL-Driver

 

Feature / 특징

- 가볍고 빠르다.

- C언어와의 바인딩 없이 순수한 Go로 구현

- TCP / IPv4, TCP / IPv6, Unix 도메인 소켓 또는 사용자 정의 프로토콜을 통한 연결

- 끊어진 연결에 대한 자동 처리

- database/sql 패키지를 사용한 자동 연결 풀링

- 16MB보다 큰 쿼리의 지원

- sql/RawBytes 지원

- 준비된 명령문에서 지능적인 큰 데이터 처리

- 파일 허용 목록 및 io.Reader 지원으로 안전하게 LOAD DATA LOCAL INFILE 지원

 

Requirements / 요구사항

- Go 1.10 또는 더 높은 버전

- MySQL (4.1+), MariaDB, Percona Server, Google CloudSQL, Sphinx (2.2.3+)

 

Installation / 설치

shell에서 go tool을 사용하여 가장 간편하게 설치하는 방법은 아래와 같다.

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

 

Usage / 사용

MySQL Driver는 Go의 data/sql/driver 인터페이스를 구현한 것이다. database/sql의 전체 API를 사용하기 위해서는 MySQL Driver를 import 해야 한다.

 

sql.Open의 첫 번째 인자인 driverName은 mysql로 작성하고, 유효한 DSN을 dataSourceName에 작성한다.

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

db, err := sql.Open("mysql", "user:password@/dbname")
if err != nil {
	panic(err)
}
// See "Important settings" section.
db.SetConnMaxLifetime(time.Minute * 3)
db.SetMaxOpenConns(10)
db.SetMaxIdleConns(10)

 

Important Setting / 중요 설정

> db.SetConnMaxLifetime()

: MySQL 서버, OS 또는 기타 미들웨어에 의해 연결이 종료되기 전에 안전하게 드라이버로 연결을 종료했는지 확인하는 데 필요합니다. 일부 미들웨어는 대기 연결 시간이 5분까지로 설정되어있기 때문에, 5분 미만으로 timeout을 설정하는 걸 권장합니다. 이 설정은 부하 분산 및 시스템 변수 변경에도 도움이 됩니다.

 

> db.SetMaxOpenConns()

: 애플리케이션으로 인한 연결의 제한을 거는 것을 추천한다. 애플리케이션과 MySQL 서버에 따라 다르기 때문에 연결 제한 수를 제안하지는 않습니다.

 

> db.SetMaxIdleConns()

: 위 설정은 db.SetMaxOpenConns()에서 설정한 숫자보다 크거나 같게 설정하는 것이 좋다.

: db.SetMaxOpenConns() 보다 작게 설정한 경우에는, 네가 예상하는 것보다 자주 연결이 수립되고 끊길 것이다.

 

> db.SetConnMaxLifetime()에 의해 대기 연결 상태는 종료될 것이다. 만약 대기 연결을 빠르게 종료하기 위해서는 db.SetConnMaxIdleTime()를 사용하면 된다.

 

DSN (Data Source Name)

Data Source Name은 일반적인 포맷을 가진다.

 

전체 기본 형태는 아래와 같다

username:password@protocol(address)/dbname?param=value

 

만약 데이터베이스를 미리 지정하고 싶지 않다면, 아래와 같이 dbname을 공백으로 두면 된다.

username:password@protocol(address)/

 

Connection pool and timeouts

커넥션 풀은 Go의 database/sql 패키지에 의해 관리된다. 커넥션 풀의 사이즈와 얼마나 오랫동안 pool안에서 연결이 지속될 것 인지를 설정하는 것은 database/sql 문서의 DB.SetMaxOpenConns, *DB.SetMaxIdleConns, 그리고 *DB.SetConnMaxLifetime를 참고하면 된다.

 

각각의 개별 연결에 대한 읽고, 쓰고, 연결하는 타임아웃은 DSN 파라미터로 설정할 수 있다.

> readTimeout, writeTimeout, timeout

 

Testing / Development 테스트/개발 환경

드라이버 테스트를 실행하기 위해서는 설정 파일을 조정해야 한다. 

자세한 내용을 확인하고 싶으면 다음 페이지를 참고 ( github.com/go-sql-driver/mysql/wiki/Testing )

 

 

 

반응형