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



