Golang에서 DSN을 사용하여 MySQL 데이터베이스에 연결하는 방법
Ethan Miller
Product Engineer · Leapcell

Go에서 MySQL 데이터베이스에 연결하려면 database/sql
패키지와 github.com/go-sql-driver/mysql
과 같은 MySQL 드라이버를 함께 사용해야 합니다. 이 연결을 설정하는 데 중요한 것은 필요한 연결 매개변수를 포함하는 데이터 소스 이름(DSN)을 올바르게 형식화하는 것입니다. 이 문서에서는 MySQL 연결을 위해 Go에서 DSN을 형식화하는 방법에 대한 포괄적인 가이드를 제공합니다.
Key Takeaways
- Go의 MySQL DSN 형식은 필수 연결 매개변수가 있는 구조화된 구문을 따릅니다.
mysql.Config
및FormatDSN
을 사용하면 가독성이 향상되고 DSN 구성에서 오류가 줄어듭니다.- 추가 DSN 매개변수는 시간 초과 및 문자 집합을 포함하여 연결 동작을 사용자 지정할 수 있습니다.
DSN 형식 이해
DSN은 데이터베이스에 대한 연결 매개변수를 지정하는 문자열입니다. Go에서 MySQL DSN의 일반적인 형식은 다음과 같습니다.
[username[:password]@][protocol[(address)]][/dbname][?param1=value1&...¶mN=valueN]
여기서:
username
: MySQL 사용자 이름입니다.password
: MySQL 사용자의 암호입니다.protocol
: 사용할 네트워크 프로토콜(예:tcp
또는unix
)입니다.address
: 네트워크 주소로, TCP 연결의 경우host[:port]
형식 또는 Unix 도메인 소켓의 경로일 수 있습니다.dbname
: 연결할 데이터베이스의 이름입니다.param
: 키-값 쌍 형식의 추가 연결 매개변수입니다.
DSN 예제
일반적인 DSN은 다음과 같을 수 있습니다.
user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local
이 예에서:
user
: MySQL 사용자 이름입니다.password
: MySQL 사용자의 암호입니다.tcp
: TCP 프로토콜을 사용하여 연결해야 함을 지정합니다.127.0.0.1:3306
: MySQL 서버가 포트3306
에서localhost
에서 호스팅됩니다.dbname
: 연결할 데이터베이스의 이름입니다.charset=utf8mb4
: 문자 집합을utf8mb4
로 설정합니다.parseTime=True
:time.Time
값의 구문 분석을 활성화합니다.loc=Local
: 시간대를 현지 시간대로 설정합니다.
Go에서 DSN 구성
DSN 문자열을 수동으로 구성하는 대신 mysql
드라이버에서 제공하는 Config
구조체를 사용하여 DSN을 프로그래밍 방식으로 빌드할 수 있습니다. 이 접근 방식은 코드 가독성을 향상시키고 오류 위험을 줄입니다.
다음은 수행 방법입니다.
package main import ( "database/sql" "log" "time" "github.com/go-sql-driver/mysql" ) func main() { // 연결 속성을 캡처합니다. cfg := mysql.Config{ User: "user", Passwd: "password", Net: "tcp", Addr: "127.0.0.1:3306", DBName: "dbname", AllowNativePasswords: true, ParseTime: true, Loc: time.Local, } // 데이터베이스 핸들을 가져옵니다. db, err := sql.Open("mysql", cfg.FormatDSN()) if err != nil { log.Fatal(err) } defer db.Close() // 데이터베이스를 핑하여 연결을 확인합니다. if err := db.Ping(); err != nil { log.Fatal(err) } log.Println("데이터베이스에 성공적으로 연결되었습니다!") }
이 코드에서:
mysql.Config
구조체를 사용하여 연결 속성을 정의합니다.
FormatDSN
메서드는 제공된 구성을 기반으로 DSN 문자열을 구성합니다.
sql.Open
을 사용하여 데이터베이스 핸들을 만들고 db.Ping()
을 사용하여 연결을 확인합니다.
추가 연결 매개변수
DSN에는 연결 동작을 사용자 지정하기 위한 다양한 매개변수가 포함될 수 있습니다. 일반적으로 사용되는 매개변수 중 일부는 다음과 같습니다.
charset
: 연결에 대한 문자 집합을 지정합니다.collation
: 연결에 대한 콜레이션을 설정합니다.timeout
: 새 연결에 대한 최대 대기 시간을 정의합니다.readTimeout
: I/O 읽기 시간 초과를 설정합니다.writeTimeout
: I/O 쓰기 시간 초과를 설정합니다.
지원되는 매개변수의 전체 목록은 Go-MySQL-Driver 설명서를 참조하세요.
FAQs
형식은 [username[:password]@][protocol[(address)]][/dbname][?param1=value1&...]
입니다.
mysql.Config
를 사용하고 cfg.FormatDSN()
을 호출하여 프로그래밍 방식으로 DSN을 구성합니다.
일반적인 매개변수에는 charset
, parseTime
, timeout
, readTimeout
및 writeTimeout
이 있습니다.
결론
DSN을 올바르게 형식화하는 것은 Go 애플리케이션과 MySQL 데이터베이스 간의 성공적인 연결을 설정하는 데 필수적입니다. mysql.Config
구조체와 해당 FormatDSN
메서드를 활용하여 명확하고 오류 없는 방식으로 DSN을 구성하여 강력하고 유지 관리 가능한 데이터베이스 연결 설정을 보장할 수 있습니다.
저희 Leapcell은 Go 프로젝트 호스팅을 위한 최고의 선택입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하세요.
무제한 프로젝트를 무료로 배포하세요
- 사용량에 대해서만 비용을 지불하며 요청이나 요금이 부과되지 않습니다.
탁월한 비용 효율성
- 유휴 요금 없이 사용한 만큼만 지불합니다.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
손쉬운 확장성 및 고성능
- 고도의 동시성을 쉽게 처리할 수 있도록 자동 크기 조정.
- 운영 오버헤드가 없으므로 빌드에만 집중하세요.
설명서에서 자세히 알아보세요!
X에서 팔로우하세요: @LeapcellHQ