이번 포스팅은 Go에서 MySQL DB 연결 시 사용하는
MySQL-Driver의 github 내용을 번역한 포스팅입니다.
MySQL-Driver 깃허브
github.com/go-sql-driver/mysql
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 )
'Tutorial' 카테고리의 다른 글
[git / Sourcetree] Mac에서 git과 Sourcetree 사용하기 (0) | 2020.11.20 |
---|---|
[VM virtualBox] 윈도우에서 테스트서버 환경 세팅 (0) | 2020.11.17 |
[Redis] redis 외부 접속 허용 (0) | 2020.10.18 |
[ Trouble Shooting ] 서비스 중 발견한 문제 발생 및 해결 (0) | 2020.09.21 |
[인증서] Let's Encrypt 를 사용하여 인증서 연결 + nginx (0) | 2020.07.08 |