S SmartDocs
시리즈: Go go 35 줄 · 업데이트 2026-04-18

postgres.go

Go/payment-gateway-challenge/internal/database/postgres.go

package database

import (
	"fmt"
	"log"

	"payment-gateway-challenge/internal/models"

	"gorm.io/driver/postgres"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

// Connect opens PostgreSQL via GORM and runs AutoMigrate for local bootstrap.
func Connect(dsn string) (*gorm.DB, error) {
	db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
		Logger: logger.Default.LogMode(logger.Warn),
	})
	if err != nil {
		return nil, fmt.Errorf("gorm open: %w", err)
	}

	sqlDB, err := db.DB()
	if err != nil {
		return nil, err
	}
	sqlDB.SetMaxOpenConns(20)
	sqlDB.SetMaxIdleConns(5)

	if err := db.AutoMigrate(&models.Payment{}); err != nil {
		return nil, fmt.Errorf("auto migrate: %w", err)
	}
	log.Println("database: connected and migrated payments table")
	return db, nil
}

관련 글