일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- graphql with reactnative
- 운정 소바동
- useMutation error
- graphql react native
- 지보싶 신촌점
- graphql
- 비동기배열처리방법
- 화이트해커를 위한 웹 해킹의 기술
- promise처리
- 도그존
- apolloclient
- 앙버터마카롱
- 잠실새내 도그존
- 화이트 해커를 위한 웹 해킹의 기술
- typescript
- 예쁜술집 예술
- 고르드
- 토라비
- 잠실새내
- graphql 400
- 신촌 소문난집
- apollo react native
- 홍대 예술
- graphql mutation error
- graphql with RN
- promise메서드
- 홍대 토라비
- 비동기배열
- 홍대 카페 장쌤
- 금별맥주
- Today
- Total
yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆
DB 연결 (feat. env/v11) 본문
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 과 관련해서 고민이 많다. 이것도 나중에 정리 예정~
'개발 > Golang' 카테고리의 다른 글
[golang] 기본 문법 및 함수 (1) | 2023.11.19 |
---|---|
[golang] logger 추가하기, custom logger 생성하기 (1) | 2023.11.02 |
[golang] http response unmarshal (with type struct) (0) | 2023.10.31 |