CRUD

왱구·2024년 12월 4일

go

목록 보기
7/7

유저를 관리하는 간단한 CRUD를 구현했다.


1. 요구사항

User 테이블의 요소는 ID, Name, Email
DB는 MySQL을 사용


2. 코드

package main

import (
	"github.com/gin-gonic/gin"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

// Model
type User struct {
	ID    int    `gorm:"primaryKey"` // pk
	Name  string `json:"name"`       
	Email string `json:"email"`      
}

// db변수
var db *gorm.DB

// MySQL연결
func initDB() {
	dsn := "username:password@tcp(127.0.0.1:3306)/testdb?charset=utf8mb4&parseTime=True&loc=Local"
	db, _ = gorm.Open(mysql.Open(dsn), &gorm.Config{})

	// AutoMigrate
	db.AutoMigrate(&User{})
}

func main() {
	// db초기화
	initDB()

	// Gin 라우터 생성
	r := gin.Default()

	// Create
	r.POST("/users", func(c *gin.Context) {
		var user User
        // 요청 본문에서 JSON 데이터 파싱
		c.BindJSON(&user)
        // db에 저장
		db.Create(&user)
        // 반환
		c.JSON(200, user)
	})

	// Read(전체)
	r.GET("/users", func(c *gin.Context) {
		var users []User
        // db에서 모든 사용자 조회
		db.Find(&users)
        // 반환
		c.JSON(200, users)
	})

	// Read(단일)
	r.GET("/users/:id", func(c *gin.Context) {
		id := c.Param("id")
		var user User
        // db에서 ID로 사용자 조회
		db.First(&user, id)
        // 반환
		c.JSON(200, user)
	})

	// Update
	r.PUT("/users/:id", func(c *gin.Context) {
		id := c.Param("id")
		var user User
        // 기존 사용자 조회
		db.First(&user, id)
        // 요청 본문에서 수정할 데이터 파싱
		c.BindJSON(&user)
        // db에 저장
		db.Save(&user)
        // 반환
		c.JSON(200, user)
	})

	// Delete
	r.DELETE("/users/:id", func(c *gin.Context) {
		id := c.Param("id")
        // db에서 ID로 사용자 삭제
		db.Delete(&User{}, id)
        // 반환
		c.Status(204)
	})

	// 서버 실행
	r.Run(":8080")
}

3. 정리

언어 : go
웹프레임워크 : Gin
ORM : gorm
DB : MySQL


profile
늦깎이 애아빠 개발지망생

0개의 댓글