[코멘토 실무PT 후기 챌린지_ Golang 강의 3주차 후기]

Joshua_s·2023년 1월 5일
0
post-thumbnail

3주차 교육내용

  • CORS 개념
  • Gin 설정
  • DB docker로 실행하기
  • Client 로 확인하기
  • DB 연동(Gorm)
  • Front-end 개발 산출물을 이용한 Back-end 개발

CORS

Cross-origin resource sharing의 약자로 Origin이 다른 웹 애플리케이션 간 리소스를 공유할 수 있도록 브라우저에게 알려주는 체제입니다.
브라우저가 보안상의 이유로 Origin이 다른 웹 서버에 리소스를 요청하는 것을 막는다.

# gin-gonic에서의 cors
import "github.com/gin-contrib/cors

func main() {
  router := gin.Default()
  config := cors.DefaultConfig()
  config.AllowOrigins = []string{"http://localhost:3000"}
  router.Use(cors.New(config))
  router.Run()
}

DB docker로 실행하기

  • Docker란 : 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다.
#도커 설치
sudo apt-get update
sudo apt-get install \
	openssh-server \
    vim \
    tree \
    ca-certificates \
    curl \
    gnupg \
    lsb-release -y
    
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

도커를 설치한 후 아래와 같은 코드를 입력해 DB를 Docker로 실행하면 mariaDB가 생성된다.

docker run -d -p (내부 포트번호):(외부 포트번호) --name (컨테이너 이름) --env MARIADB_USER=(유저이름) --env MARIADB_PASSWORD=(패스워드) --env MARIADB_ROOT_PASSWORD=(root 패스워드) --env MARIADB_DATABASE=(DB 이름) mariadb:latest

내부로 진입하여 확인

docker exec -i -t (컨테이너이름) /bin/bash

혹은

#클라이언트 설치
sudo apt-get install mariadb-client

#client를 이용하여 로그인
mysql -h (host ip) --port (포트번호) -u (유저이름) -p 

GORM으로 DB 연동

# GORM 설치
go get -u gorm.io/gorm
package main

import (
	"fmt"

	"github.com/pkg/errors"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

type Board struct {
	ID       uint   `gorm:"primarykey;autoIncrement" json:"id"`
	Email    string `json:"email"`
	First    string `json:"first"`
	Hobby    string `json:"hobby"`
	Last     string `json:"last"`
	Location string `json:"location"`
	Phone    string `json:"phone"`
}

type DBHandler struct {
	gDB *gorm.DB
}

func main() {

	dbHandler, err := NewAndConnectGorm("(MariaDBusername):(Password)@tcp((ip))/(dbname)?charset=utf8mb4&parseTime=True&loc=Local&tls=true")
	if err != nil {
		fmt.Printf("%+v\n", err)
	}
	a, _ := dbHandler.GetBoradList()
	fmt.Println(a)
}

func NewAndConnectGorm(dsn string) (*DBHandler, error) {
	gormDB, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	gormDB.AutoMigrate(Board{})
	dbHandler := &DBHandler{
		gDB: gormDB,
	}

	return dbHandler, err
}

func (h *DBHandler) GetBoradList() ([]Board, error) {
	boardList := []Board{}
	result := h.gDB.Find(&boardList)

	return boardList, errors.Wrap(result.Error, "db handler error2")
}

해당 DB로부터 값을 가져와서 출력해주는 코드입니다.

오픈소스 프론트엔드 게시판을 이용하여 게시판 개발

이번 과제는 오픈 소스 프론트 엔드 게시판을 이용하여 게시판이 동작하도록 백엔드 부분을 개발하는 내용이였습니다.
많은 문제가 있었고 react를 처음으로 접하여 조금 어려움이 있었지만 개발에는 성공하였습니다!

후기

devops로 성장하고 싶은 생각에 golang을 공부하기로 마음을 먹었지만 어떤 부분을 공부해야할지 감이 전혀 안잡혔는데 이번 과제들을 통하여 어느정도 프로젝트에 대한 감이 잡히는 것 같았습니다. 다음 주차가 마지막 이지만 지금까지도 많은 내용을 배운 느낌을 받았습니다.

코멘토 : https://bit.ly/3D9XCOz

profile
devops engineer가 되기 위해

0개의 댓글