gin과 firestore 연동하기
왜 두개를 연결하게 되었나요
클론 프로젝트를 진행하게 되면서 백단은 golang
을 이용한 gin
으로 restful을 활용하기로 정했는데, 역시 여러명이 하는거다보니 db를 무엇으로할지 고민이 되었다
- rdbms는 익숙하니까
nosql
로 해볼까- 여러명이 쉽게 공유할수있는 db없나
결론 : google에서 지원하는 firebase
의 firestore
사용해보자!
firestore DB
firebase에는 여러 서비스가 있는데, 그중 firestore는 nosql기반으로 비교적 쉽게 데이터를 관리할 수 있다.
무엇보다 golang
지원이 잘된다! 같은 회사라 그런걸까..
연동
처음엔 realtimeDB연결하다가 firestore 함수쓰려니까 안돼서 이게뭐냐 했었지만.. 결론은 잘 연결했다.
잊지않기위해 기록을 해본다~!
1. firebase 프로젝트 생성 후 admin sdk 넣고 초기화하기
https://console.firebase.google.com/?hl=ko
에서 프로젝트를 생성한다.
추가를 하고나면, 사진의 clone처럼 프로젝트가 생기고, 하단에 프로젝트명-uid
식으로 된 게 projectId
이다.
클릭해서 들어가게 되면 console이 나오는데, 여기서 모든 게 이루어진다. 좌측 메뉴 중 firestore를 클릭한다.
이런식으로 프로젝트를 만들기만 하면, firestore를 사용할 수 있다!
이제 남은 건 gin과의 연동뿐!!!!
auth 문제때문에 꼭 해줘야하는 게 있는데, 권장하는 방법인 admin sdk
를 통해 연결하는 게 낫다.
https://firebase.google.com/docs/admin/setup?hl=ko#go
이 사이트에서 A to Z를 설명해줘서 연동이 쉬웠다.
우선, go get을 통해 firebase 패키지를 추가한다.
그다음, 연동을 위한 키
를 발급받아야한다
링크를 클릭해서 들어가면,
서비스키를 생성하면된다! 그러면 json
파일을 받을 수 있는데, 안내서에서는 json파일의 경로를 지정해서 그 경로를 env파일에 넣어 관리하는 식으로 권장되고 있다.
여기까지 따라했다면 인증을 무리없이 뚫을 수 있다.
2. firestore 연결
환경변수 관리를 위해 패키지를 다운받았다.
.env
파일에 환경변수를 선언한다.
그리고나서.. 문제가 있었다.. 예제대로했더니 firebase를 연결해서 쓰고있자니 firestore 관련 예제가 자꾸 함수가 없다고 뜨는것이다!!!
그래서.. 결국 firestore 패키지를 다시 다운받았다(....)
https://pkg.go.dev/cloud.google.com/go/firestore#section-documentation
연동방법은 비슷하다. newApp을 하지 않고 바로 newClient한다는 점 정도..
ctx := context.Background()
client, err := firestore.NewClient(ctx, "projectID")
if err != nil {
// TODO: Handle error.
}
projectID
부분에 자신의 것을 넣어주면,,, 연동끝이다,.,,
정말 쉽다...
package config
import (
"cloud.google.com/go/firestore"
"context"
"fmt"
"log"
"os"
"sync"
)
type FirestoreDB struct {
client *firestore.Client
url string
}
var dbInstance *FirestoreDB
var once sync.Once
func DBClient() *firestore.Client {
once.Do(func() {
fmt.Println("DB 연결 시작 --- FIREBASE ---")
dbInstance = new(FirestoreDB)
makeDBClient(dbInstance)
fmt.Println("DB 연결 완료 --- FIREBASE ---")
})
return dbInstance.client
}
// makeDBClient Client 주입
func makeDBClient(rtb *FirestoreDB) {
fmt.Println("dbstore name : " + os.Getenv("FIREBASE_FIRESTORE_DATABASE_PRODUCT_ID"))
ctx := context.Background()
client, err := firestore.NewClient(ctx, os.Getenv("FIREBASE_FIRESTORE_DATABASE_PRODUCT_ID"))
if err != nil {
log.Fatal(err)
}
rtb.client = client
}
클라이언트를 얻어서,, 사용하면된다 ! Once를 사용해서 싱글톤을 사용하고자했는데 defer
처리도 해줘야한다고해서 아직 미완성인 코드지만 이렇게하면 우선 연결은 잘된다!!!
Author And Source
이 문제에 관하여(gin과 firestore 연동하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@artelee/gin과-firestore-연동하기-dhz4kft3저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)