yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆

DB 연결 (feat. env/v11) 본문

개발/Golang

DB 연결 (feat. env/v11)

yehey 2024. 5. 31. 18:07

Background

프로젝트를 갈아 엎었다. 원래는 스프링 공부할 목적으로 스프링 프로젝트를 하고 있었으나... 모종의 이유로 golang 공부가 시급해져서 기존에 하던 프로젝트를 spring -> golang 으로 스택 전환을 할 생각이다.
참고로 기존에 만들어놓은건 열심히 쓰고 있다. 고칠게 많기도 하고 직접 써보니 부족한게 정말정말 많다.
그런 의미에서 새로운 go 프로젝트에 DB 를 연결해보겠다. 지난 프로젝트는 application.yml 파일에서 관리했는데, 이번엔 그냥 빌드 시점에 환경변수에 넣고 초기화 과정을 추가했다.

Contents

우선 DB가 있어야함. database 생성은 다루지 않을 예정. 난 이미 있으니까!
바로 RDS 로 연결을 할 까 생각했지만 그러면 인바운드 규칙을 수정해야하는 귀찮음이 있다. 그래서 현재 지원하는 기능을 구현할 때 까지는 로컬만 사용할 예정이기 때문에 우선 로컬 DB 를 연결했다.
나는 지금 goland IDE 를 사용하고 있기 때문에 이거 기준으로 설명할 예정

goland 오른쪽 상단에 보면 아래 그림처럼 되어있다.

여기서 Edit Configurations 를 눌러서 새로운 build config 를 만들면 된다.

Run Kind 는 directory 로 바꿔주고, directory 는 main.go 가 있는 dir 로, working directory 는 go.mod 가 있는 dir로 수정해준다.

나는 두개가 다른 디렉토리에 있어서 수정해줬다. (수정 안하면 build 에러메시지 나옴요)

그리고 environment 옆에 달러 표시를 누르면 환경변수 key value 를 넣을 수 있는 창이 뜬다.

여기에 key value 를 원하는 값으로 넣는다. 나는 연결할 DB 정보를 넣었다.

보통 user:password@tcp(ip 혹은 dns:port)/db명 정도로 넣는 듯

환경변수도 넣었다면 ok 누르고 config 를 적용 및 저장 해준다.

그럼 요로코롬 내가 설정한 config 가 뜨면서 옆에 build, debug 를 누르면 현재 config 설정으로 돌아간다.

 

이제 코드에서 환경변수를 사용해서 연결하면 된다.

 

사용 패키지: 

github.com/gin-gonic/gin v1.10.0
github.com/sirupsen/logrus v1.9.3
gorm.io/driver/mysql v1.5.6
gorm.io/gorm v1.25.10
github.com/caarlos0/env/v11 v11.0.1
// init project

func Init() {
    envInit()
}

func envInit() {
    _ = env.Parse(&config.DBConfigInfo)
}

func Run() {

    db := setting.SetUpDB()
    fmt.Printf("db setup finished at %s\n", time.Now().UTC().Format(time.RFC3339))

}

기본 init 코드는 위와 같음

package config

var DBConfigInfo DBConfig

type DBConfig struct {
    DBSource string `env:"DATA_SOURCE" envDefault:""`
    DBLogLevel   int    `env:"DB_LOG_LEVEL" envDefault:""`
}

DB config 를 저장할 type 과 변수를 선언해주고

package setting

func SetUpDB() *gorm.DB {
    var db *gorm.DB
    var err error

    db, err = gorm.Open(mysql.Open(config.DBConfigInfo.DataSource), &gorm.Config{Logger: logger.Default.LogMode(logger.LogLevel(config.DBConfigInfo.DBLogLevel))})
    if err != nil {
        logrus.Panicf("fail to open MYSQL DB Config [%s]", err.Error())
    }

    return db
}

DB 연결하는 코드를 추가해준다.

 

이제 설정했던 config로 빌드해보면

연결 잘 됐다는 log 가 찍히며 종료된다. (당연함 gin 서버 돌리는 코드는 없음)

 

DB 연결 끝~~

귀찮은 일 하나 끝났다...ㅎ.ㅎ..ㅎ... 그치만 앞으로 더 귀찮은 세팅들이 남음 (으아아악)

 

기존에 사용했던 gorm 사용할 예정인데, orm 과 관련해서 고민이 많다. 이것도 나중에 정리 예정~

Comments