Go에서 PostgreSQL 사용: 종합 가이드
Daniel Hayes
Full-Stack Engineer · Leapcell

Key Takeaways
- Go는
database/sql
및lib/pq
를 사용하여 PostgreSQL에 효율적으로 연결하고 상호 작용할 수 있습니다. - 기본적인 CRUD 작업 (생성, 읽기, 업데이트, 삭제)을 Go에서 원활하게 수행할 수 있습니다.
- 안정적인 데이터베이스 연결을 유지하려면 적절한 오류 처리가 필수적입니다.
PostgreSQL은 강력한 오픈 소스 객체-관계형 데이터베이스 시스템으로, 견고성과 표준 준수로 잘 알려져 있습니다. Go (Golang)는 정적 타입의 컴파일 언어로, 단순성과 효율성을 위해 설계되었으며, 이와 결합하면 개발자는 효율적인 데이터 관리 기능을 갖춘 고성능 애플리케이션을 구축할 수 있습니다. 이 기사에서는 PostgreSQL과 Go를 통합하는 방법에 대한 단계별 가이드를 제공하며, 설정, 연결 및 기본 CRUD (생성, 읽기, 업데이트, 삭제) 작업을 다룹니다.
전제 조건
코드로 들어가기 전에 다음이 설치되어 있는지 확인하십시오.
-
Go 환경: 공식 웹사이트에서 Go를 다운로드하여 설치합니다.
-
PostgreSQL: 공식 PostgreSQL 웹사이트에서 운영 체제에 적합한 PostgreSQL을 설치합니다.
-
데이터베이스 드라이버: Go의
database/sql
패키지는 PostgreSQL과 통신하기 위한 드라이버가 필요합니다.github.com/lib/pq
패키지는 널리 사용되는 선택 사항입니다. 다음을 사용하여 설치합니다.go get github.com/lib/pq
PostgreSQL 설정
-
PostgreSQL 서비스 시작: PostgreSQL 서비스가 실행 중인지 확인합니다.
-
데이터베이스 생성: PostgreSQL 프롬프트에 액세스하여 새 데이터베이스를 생성합니다.
CREATE DATABASE mydatabase;
-
테이블 생성: 데이터베이스 내에서
users
테이블을 생성합니다.CREATE TABLE users ( id SERIAL PRIMARY KEY, username VARCHAR(100) NOT NULL, email VARCHAR(100) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
Go에서 PostgreSQL에 연결
PostgreSQL과 상호 작용하려면 Go의 database/sql
패키지와 pq
드라이버를 사용하여 연결을 설정합니다.
-
패키지 가져오기: Go 파일에 필요한 패키지를 포함합니다.
import ( "database/sql" "fmt" _ "github.com/lib/pq" )
-
연결 매개변수 정의: PostgreSQL 자격 증명을 지정합니다.
const ( host = "localhost" port = 5432 user = "your_username" password = "your_password" dbname = "mydatabase" )
-
연결 설정:
sql.Open
함수를 사용하여 연결합니다.func main() { psqlInfo := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", host, port, user, password, dbname) db, err := sql.Open("postgres", psqlInfo) if err != nil { panic(err) } defer db.Close() // 연결 확인 err = db.Ping() if err != nil { panic(err) } fmt.Println("Successfully connected!") }
CRUD 작업
생성
새 레코드를 users
테이블에 삽입합니다.
sqlStatement := ` INSERT INTO users (username, email) VALUES ($1, $2) RETURNING id` id := 0 err := db.QueryRow(sqlStatement, "johndoe", "[email protected]").Scan(&id) if err != nil { panic(err) } fmt.Printf("New record ID is: %d\n", id)
읽기
users
테이블에서 레코드를 검색합니다.
rows, err := db.Query("SELECT id, username, email, created_at FROM users") if err != nil { panic(err) } defer rows.Close() for rows.Next() { var id int var username, email string var createdAt time.Time err = rows.Scan(&id, &username, &email, &createdAt) if err != nil { panic(err) } fmt.Printf("%d: %s (%s) - %s\n", id, username, email, createdAt) }
업데이트
기존 레코드를 수정합니다.
sqlStatement := ` UPDATE users SET email = $2 WHERE id = $1;` res, err := db.Exec(sqlStatement, id, "[email protected]") if err != nil { panic(err) } count, err := res.RowsAffected() if err != nil { panic(err) } fmt.Printf("%d records updated\n", count)
삭제
테이블에서 레코드를 제거합니다.
sqlStatement := ` DELETE FROM users WHERE id = $1;` res, err := db.Exec(sqlStatement, id) if err != nil { panic(err) } count, err := res.RowsAffected() if err != nil { panic(err) } fmt.Printf("%d records deleted\n", count)
오류 처리
강력한 오류 처리가 중요합니다. 헬퍼 함수를 구현합니다.
func checkErr(err error) { if err != nil { log.Fatal(err) } }
작업 후 checkErr(err)
를 사용하여 오류를 정상적으로 처리합니다.
결론
PostgreSQL과 Go를 통합하면 개발자가 효율적이고 안정적인 애플리케이션을 구축할 수 있습니다. 이 가이드에 따라 PostgreSQL 데이터베이스를 설정하고, Go를 사용하여 연결하고, 기본 CRUD 작업을 수행할 수 있습니다. 더 고급 기능에 대해서는 복잡한 쿼리를 단순화하고 생산성을 향상시킬 수 있는 GORM 또는 SQL 빌더와 같은 ORM을 살펴보는 것이 좋습니다.
FAQs
go get github.com/lib/pq
를 사용하여 PostgreSQL 드라이버를 설치합니다.
sql.Open()
을 호출한 후 db.Ping()
을 사용하여 연결을 확인합니다.
checkErr(err)
와 같은 헬퍼 함수를 구현하고 디버깅을 위해 log.Fatal(err)
를 사용합니다.
Leapcell은 Go 프로젝트 호스팅을 위한 최고의 선택입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하십시오.
무료로 무제한 프로젝트 배포
- 사용량에 대해서만 지불하십시오. 요청이나 요금이 없습니다.
탁월한 비용 효율성
- 유휴 요금 없이 사용한 만큼 지불하십시오.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
손쉬운 확장성 및 고성능
- 쉬운 동시성 처리를 위한 자동 확장.
- 운영 오버헤드가 전혀 없습니다. 구축에만 집중하십시오.
설명서에서 자세히 알아보십시오!
X에서 저희를 팔로우하십시오: @LeapcellHQ