개발/Go

[Fiber] Go로 DB Connect하기(MariaDB)

devhooney 2022. 8. 13. 01:43
728x90

전 회사에서 쓰던 Golang framework Fiber를 공부하려고 한다.

 

- 내가 전 회사에서 개발했던 부분은 여러 DB에 접속하고, 접속이 잘 되었는지 확인하는 부분이었다.

- 이번에 다시 해보니 정말 금방 개발할 수 있는 양이었는데, 왜 이렇게 헤맸던 건지 모르겠다.

 

- 예전에 DB에 접속하기 위해서

https://github.com/go-sql-driver/mysq

 

GitHub - go-sql-driver/mysql: Go MySQL Driver is a MySQL driver for Go's (golang) database/sql package

Go MySQL Driver is a MySQL driver for Go's (golang) database/sql package - GitHub - go-sql-driver/mysql: Go MySQL Driver is a MySQL driver for Go's (golang) database/sql package

github.com

를 썼었는데, 이번엔 GORM으로 접속해보려고 한다.

 

- 먼저 아래의 두 개를 설치한다.

"gorm.io/driver/mysql"   
"gorm.io/gorm"

 

- 지난번 포스팅과 변경된 점은 폴더 구조인데, 하단 캡처를 참고하면 된다.

- main.go

package main

import (
	"fiber/src/database"
	"fiber/src/routes"
	"log"
)

func main() {
	app := routes.Router()
	database.Init()
	log.Fatal(app.Listen(":3000"))
}

 

- router.go

package routes

import (
	"fiber/src/controllers"

	"github.com/gofiber/fiber/v2"
	"github.com/gofiber/template/html"
)

func Router() *fiber.App {
	// Create a new engine
	engine := html.New("./views", ".html")

	// Pass the engine to the Views
	app := fiber.New(fiber.Config{
		Views: engine,
	})

	// Route 설정
	app.Get("/", controllers.Index)
	return app
}

 

- database.go

package database

import (
	"log"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

var (
	DBConn *gorm.DB
)

func Init() {
	// err := godotenv.Load("../../.env")
	// if err != nil {
	// 	log.Fatal("Error loading .env file")
	// }

	var err error
	dsn := "[dbuser]:[password]@tcp(127.0.0.1:3306)/[dbname]?charset=utf8mb4&parseTime=True&loc=Local"
	DBConn, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		log.Fatal("failed to connect database")
	}
}

- 나는 mariaDB로 진행했는데, mysql과 동일하다. 

- local db를 생성하면 포트는 기본 3306이다.

 

- controller.go

package controllers

import (
	"fiber/src/database"
	"fmt"

	"github.com/gofiber/fiber/v2"
)

/* func Index(c *fiber.Ctx) error {
	type Admin struct {
		Admin_Seq int
		Admin_Id  string
		Admin_Nm  string
	}
	var admins []Admin

	db := database.DBConn
	db.Raw("SELECT admin_seq, admin_id, admin_nm FROM admin_member").Scan(&admins)

	data := fiber.Map{"admin": admins}
	fmt.Println(data)
	return c.Render("index", data)
} */

func Index(c *fiber.Ctx) error {
	type admin_members struct {
		gorm.Model
		Admin_Seq int    `gorm:"column:admin_seq"`
		Admin_Id  string `gorm:"column:admin_id"`
		Admin_Nm  string `gorm:"column:admin_nm"`
	}
	var admin_member []admin_members

	db := database.DBConn
	// db.Raw("SELECT admin_seq, admin_id, admin_nm FROM admin_member").Scan(&admins)
	db.Find(&admin_member)

	data := fiber.Map{"admin": admin_member}
	fmt.Println(data)
	return c.Render("index", data)
}

- 이렇게 코드를 넣으면 원하는 DB에 접속할 수 있고, 데이터도 조회할 수 있다.

 

 

2022.11.01 코드변경

728x90

'개발 > Go' 카테고리의 다른 글

[Fiber] Fiber 설정 및 에러  (0) 2022.11.05
[Fiber] Fiber 기본  (0) 2022.11.04
[Fiber] Go로 Backend 시작하기  (2) 2022.08.10
[Go] 기초 - 채널  (0) 2022.08.04
[Go] 기초 - 루틴(goroutine)  (0) 2022.08.02