Go Academy · 강의

CRUD 작업

생성, 읽기, 수정, 삭제하기

레슨 2/413개 단계

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

GORM으로 CRUD 구현

GORM은 네 가지 기본 작업인 Create, Read, Update, Delete를 *gorm.DB의 메서드 호출로 바꿉니다. 구조체에 대한 포인터를 전달하면 GORM이 SQL을 생성합니다.

Create

Create는 레코드를 삽입합니다. 실행이 끝나면 GORM이 데이터베이스의 기본 키와 타임스탬프를 구조체에 채웁니다.

user := User{Name: "Ada", Email: "ada@example.com"}
result := db.Create(&user)
fmt.Println(user.ID, result.RowsAffected)

First로 조회하기

First는 기본 키순으로 정렬한 뒤 조건에 맞는 첫 번째 레코드를 가져옵니다. 결과를 받으려면 포인터를 전달하고, 조건은 추가 인수로 지정합니다.

var user User
db.First(&user, 1)               // by primary key
db.First(&user, "email = ?", "ada@example.com")

Find로 여러 건 조회하기

Find는 여러 행을 슬라이스에 불러옵니다. 조건이 없으면 모든 행을 반환하고, Where를 사용하면 필터링합니다.

var users []User
db.Where("age > ?", 18).Find(&users)

Update

Save는 레코드의 모든 필드를 수정합니다. Update와 Updates는 특정 열만 변경하므로 의도하지 않은 필드를 덮어쓰지 않습니다.

db.Model(&user).Update("name", "Ada L.")
db.Model(&user).Updates(User{Name: "Ada", Age: 36})

0 값의 함정

구조체로 수정할 때 GORM은 0 값 필드(0, false, "")를 무시합니다. 열을 0 값으로 수정하려면 구조체 대신 맵을 전달하십시오.

db.Model(&user).Updates(map[string]interface{}{"age": 0, "active": false})

Delete

Delete는 레코드를 제거합니다. 모델에 DeletedAt 필드가 있으면 행을 제거하는 대신 타임스탬프를 설정하는 논리 삭제가 수행됩니다.

db.Delete(&user, 1)

실행 가능한 CRUD 시뮬레이션

GORM에는 실제 데이터베이스가 필요하므로, 이 실행 가능한 예제는 메모리 내 슬라이스에서 생성, 조회, 수정, 삭제를 모델링하여 수명 주기를 보여 줍니다.

package main

import "fmt"

type User struct {
    ID   int
    Name string
}

func main() {
    var users []User
    next := 1
    // Create
    u := User{ID: next, Name: "Ada"}
    users = append(users, u)
    next++
    // Read
    fmt.Println("read:", users[0])
    // Update
    users[0].Name = "Ada L."
    fmt.Println("updated:", users[0])
    // Delete
    users = users[:0]
    fmt.Println("count after delete:", len(users))
}

오류 확인

모든 GORM 호출은 *gorm.DB를 반환하며, 그 Error 필드에 오류가 저장됩니다. 레코드를 찾지 못하면 First에서 gorm.ErrRecordNotFound가 반환됩니다.

if err := db.First(&user, 99).Error; err == gorm.ErrRecordNotFound {
    fmt.Println("no such user")
}

메서드 체이닝

GORM은 체이닝할 수 있는 빌더를 사용합니다: db.Where(...).Order(...).Limit(...).Find(&users). 각 메서드가 쿼리 범위를 좁히고, 마지막 메서드(Find, First)가 쿼리를 실행합니다.

일괄 삽입

Create에 슬라이스를 전달하면 하나의 문으로 여러 행을 삽입할 수 있습니다. CreateInBatches는 매우 큰 슬라이스를 청크로 나누어 제한을 초과하지 않도록 합니다.

db.Create(&[]User{{Name: "A"}, {Name: "B"}})

간단히 확인하기

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

복습

CRUD 작업을 배웠습니다:

  • Create는 삽입하고 기본 키를 다시 채웁니다
  • First와 Find는 각각 한 행과 여러 행을 조회합니다
  • Save, Update, Updates는 수정하며, 맵을 사용하면 0 값을 강제로 적용할 수 있습니다
  • DeletedAt이 있으면 Delete는 논리 삭제를 수행합니다
  • Error 필드를 확인하고, 복잡한 쿼리에는 메서드를 체이닝합니다
무료로 시작

AI 튜터와 함께 Go을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
51
레슨
203

자주 묻는 질문

“CRUD 작업” 강의는 무료인가요?

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

“CRUD 작업”에서 뭘 배우나요?

생성, 읽기, 수정, 삭제하기 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“CRUD 작업” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

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