Gi-Log

[#6] 기본 코드 구조 구상 및 mongodb access 본문

Golang 게시판 제작

[#6] 기본 코드 구조 구상 및 mongodb access

돌잔 2022. 3. 20. 15:21

현재 go-board-api의 디렉토리 구조는 위와 같다.

 

향후 개발을 지속하며 변경 사항이 생길 수 있겠지만,

  • router directory - 게시판 REST API Endpoint에 대한 경로 설정
  • mongodb directory - mongodb access를 관리하는 package 위치
  • handler directory - 게시판 REST API Endpoint 별 요청을 처리하는 함수들 위치

현재는 간단하게 위와 같이 생각 중이다.

 

개발을 하는 과정에서 디렉토리나 패키지를 분리하고 싶어지더라도, 최대한 위 구조에서 개발을 진행하고 기능 개발이 마무리되면 코드를 정리해볼 생각이다.

 

mongodb access와 관련된 코드는 다음과 같다. 다음 장에서는 REST API를 하나씩 설계해볼 예정이다.

package mongodb

import (
	"context"
	"fmt"
	"log"

	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
)

var (
	Client     *mongo.Client
	Collection *mongo.Collection
)

func Init(url, dbName, collectionName string) {
	MongoConnect(url, dbName, collectionName)
	GetArticles(Client, Collection)
}

func MongoConnect(url, dbName, collectionName string) {
	clientOptions := options.Client().ApplyURI(url)
	client, err := mongo.Connect(context.TODO(), clientOptions)
	if err != nil {
		log.Fatal(err)
	}
	Client = client

	fmt.Println("connected...")

	Collection = client.Database(dbName).Collection(collectionName)
}

func GetArticles(client *mongo.Client, collection *mongo.Collection) {
	cursor, _ := collection.Find(context.TODO(), bson.D{{}})

	for cursor.Next(context.TODO()) {
		var elem bson.M
		cursor.Decode(&elem)
		fmt.Println(elem)
	}

	MongoDisconnect(client)
}

func MongoDisconnect(client *mongo.Client) {
	err := client.Disconnect(context.TODO())
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("disconnected...")
}

 

Comments