ginとFirestoreの接続


なぜ2つ接続するのか


クローンプロジェクトが進むにつれて、バーダンはrestfulを使い、golangを使い、ginを使うことにしましたが、やはり多くの人がやっているので、dbで何をするか悩んでいました.
  • rdbmsはよく知っています.nosqlを試してみましょう.
  • は、複数人で共有しやすいdbではなく、
  • である.
    結論:Googleがサポートするfirebaseのうちfirestoreを使用!

    firestore DB


    Firebaseには複数のサービスがあり、firestoreはnosqlに基づいており、データの管理が容易です.
    最も重要なのはgolang支援がいいことです!同じ会社だからかな…

    れんどう


    realtimeDBの接続を始めたばかりの頃はfirstore関数を書こうとしたのですがダメでした結論はよくつながっている.
    メモを忘れないように~!
    1.Firebaseプロジェクトを作成し、admin sdkを入れて初期化する
    https://console.firebase.google.com/?hl=ko
    でアイテムを作成します.

    追加後、写真のクローンのようにアイテムが生成され、下部は프로젝트명-uid形式のprojectIdです.
    クリックするとconsoleが現れ、ここですべてが実現します.左側のメニューのfirstoreをクリックします.


    このようにプロジェクトを作成すればfirstoreを使用できます!
    今残っているのはginとの連動だけ!!!
    auth問題でやらなければならないことがあるので、おすすめの方法でadmin sdkに接続したほうがいいです.
    https://firebase.google.com/docs/admin/setup?hl=ko#go
    このサイトはA to Zを説明しており、バインドしやすい.
    まずgo getでfirebaseパッケージを追加します.

    次に、を発行して連動する必要がある

    「リンク」をクリックしてアクセスします.

    サービスキーを生成すればいい!これによりjsonファイルが受信され、jsonファイルのパスを指定してenvファイルに保存して管理することを推奨します.

    ここまで真似すれば、理由もなく認証を突破することができます.
    2.接続先
    環境変数を管理するために、パッケージをダウンロードしました.
    .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
    }
    
    クライアントを入手して、使えばいい!ワンスを使ってモノトーンを使いたかったのですが、deferも処理しなければならないということで、まだ完成していないコードが、これでまず接続できてよかった!!