0Pricing
Go Academy · 강의

모델과 AutoMigrate

스키마 정의하고 마이그레이션하기

모델과 AutoMigrate은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

GORM이란 무엇인가

GORM은 Go에서 가장 널리 사용되는 ORM입니다. Go 구조체를 데이터베이스 테이블에 매핑하므로 원시 SQL 대신 객체로 작업할 수 있습니다. PostgreSQL, MySQL, SQLite 등을 지원합니다.

  • 구조체와 테이블 간 매핑
  • 자동 마이그레이션
  • 연관 관계와 훅

모델 정의

모델은 Go 구조체입니다. 외부에 공개된 각 필드는 열이 됩니다. gorm.Model을 임베드하면 ID, CreatedAt, UpdatedAt, DeletedAt 필드가 추가됩니다.

type User struct {
    gorm.Model
    Name  string
    Email string
    Age   int
}

필드 태그

구조체 태그로 열을 사용자 지정할 수 있습니다. gorm 태그를 사용하여 크기, 고유성, 인덱스, 기본값을 설정할 수 있습니다. 태그는 필드 형식 뒤의 백틱 안에 작성합니다. 예를 들면 gorm:"uniqueIndex;size:255"와 같습니다.

type User struct {
    // ID    uint    tag: gorm:"primaryKey"
    // Email string  tag: gorm:"uniqueIndex;size:255"
    // Name  string  tag: gorm:"not null"
    ID    uint
    Email string
    Name  string
}

이름 지정 규칙

GORM은 기본적으로 이름을 복수형으로 만들고 스네이크 케이스로 변환합니다. 예를 들어 User 구조체는 users 테이블에 매핑되고, CreatedAt 필드는 created_at에 매핑됩니다. 이 규칙은 재정의할 수 있습니다.

GORM으로 열기

gorm.Open은 데이터베이스용 다이얼렉터를 받아 *gorm.DB를 반환합니다. 이 핸들은 연결 풀을 감쌉니다.

db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
if err != nil {
    log.Fatal(err)
}

AutoMigrate

AutoMigrate는 구조체에 맞춰 테이블, 누락된 열, 인덱스를 생성합니다. 추가만 수행하므로 열을 삭제하거나 형식을 파괴적으로 변경하지 않습니다.

db.AutoMigrate(&User{}, &Product{})

AutoMigrate가 하지 않는 작업

AutoMigrate는 데이터 손실을 방지하기 위해 사용하지 않는 열을 삭제하거나 형식을 축소하지 않습니다. 이름 변경, 삭제 또는 형식 변경에는 명시적인 마이그레이션 도구가 필요합니다.

실행 가능한 모델 매핑 시뮬레이션

GORM에는 실제 데이터베이스 드라이버가 필요하므로, 이 실행 가능한 예제는 AutoMigrate가 수행하는 스네이크 케이스 테이블 및 열 매핑을 시뮬레이션합니다.

package main

import (
    "fmt"
    "strings"
)

func toSnake(s string) string {
    var b strings.Builder
    for i, r := range s {
        if i > 0 && r >= 65 && r <= 90 {
            b.WriteByte(95)
        }
        if r >= 65 && r <= 90 {
            r = r + 32
        }
        b.WriteRune(r)
    }
    return b.String()
}

func main() {
    model := "User"
    fields := []string{"ID", "Name", "CreatedAt"}
    fmt.Println("table:", toSnake(model)+"s")
    for _, f := range fields {
        fmt.Println("column:", toSnake(f))
    }
}

DeletedAt 필드

모델에 gorm.Model을 임베드했거나 gorm.DeletedAt 필드가 있으면 GORM이 논리 삭제를 활성화합니다. 삭제된 행에는 타임스탬프가 기록되고 실제로 제거되는 대신 쿼리 결과에서 숨겨집니다.

사용자 지정 테이블 이름

모델에 TableName 메서드를 구현하여 기본 이름을 재정의할 수 있습니다. 데이터베이스 스키마에서 GORM 규칙과 일치하지 않는 이름을 사용할 때 유용합니다.

func (User) TableName() string {
    return "app_users"
}

외부 패키지 참고

GORM과 그 다이얼렉터는 표준 라이브러리 외부에 있으므로 go get gorm.io/gorm과 gorm.io/driver/postgres 같은 드라이버가 필요합니다. 여기의 GORM 코드는 설명을 위한 예시입니다.

간단히 확인하기

모델에 대한 이해도를 확인해 보십시오.

복습

모델과 AutoMigrate를 배웠습니다:

  • 구조체는 테이블에 매핑되고, gorm.Model은 ID와 타임스탬프를 추가합니다
  • 태그로 기본 키, 인덱스, 제약 조건을 설정합니다
  • 기본 이름 지정 방식은 복수형 스네이크 케이스입니다
  • AutoMigrate는 추가만 수행하며 절대 파괴적인 작업을 하지 않습니다
  • DeletedAt은 논리 삭제를 활성화합니다

자주 묻는 질문

“모델과 AutoMigrate” 강의는 무료인가요?

네 — “모델과 AutoMigrate” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“모델과 AutoMigrate”에서 뭘 배우나요?

스키마 정의하고 마이그레이션하기 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Go Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“모델과 AutoMigrate” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 모델과 AutoMigrate
  2. CRUD 작업
  3. 연결 관계
  4. 훅과 스코프
← Go Academy(으)로 돌아가기