0Pricing
Swift Academy · 강의

Fluent ORM과 모델

Vapor의 Fluent ORM으로 데이터를 저장합니다.

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

Fluent란 무엇인가요

Fluent는 Vapor의 객체 관계 매핑 도구입니다. Swift 클래스를 데이터베이스 행에 매핑하며, 단일 API를 통해 PostgreSQL, MySQL, SQLite, MongoDB를 지원합니다. Swift로 작성하면 Fluent가 SQL을 작성합니다.

import Fluent
import Vapor

모델 정의하기

Fluent 모델은 Model을 준수하는 final class이며, 일반적으로 Content도 준수합니다. schema(테이블 이름)와 기본 키를 위한 @ID 속성을 선언합니다.

final class Planet: Model, Content {
    static let schema = "planets"

    @ID(key: .id)
    var id: UUID?

    init() {}
}

@Field 속성 래퍼

저장할 열을 @Field로 매핑하십시오. 키는 데이터베이스 열 이름입니다. 저장하려는 각 열마다 속성을 하나씩 추가하십시오.

@Field(key: "name")
var name: String

@Field(key: "diameter_km")
var diameterKm: Int

완전한 모델

모델에는 코드에서 인스턴스를 생성할 수 있도록 필수적인 빈 init() 외에 멤버별 초기화 구문도 필요합니다.

final class Planet: Model, Content {
    static let schema = "planets"
    @ID(key: .id) var id: UUID?
    @Field(key: "name") var name: String
    init() {}
    init(id: UUID? = nil, name: String) {
        self.id = id
        self.name = name
    }
}

마이그레이션

마이그레이션은 데이터베이스 스키마를 생성하거나 변경합니다. AsyncMigration을 준수하고 prepare(적용)와 revert(되돌리기)를 구현합니다.

struct CreatePlanet: AsyncMigration {
    func prepare(on db: Database) async throws {
        try await db.schema("planets")
            .id()
            .field("name", .string, .required)
            .create()
    }
    func revert(on db: Database) async throws {
        try await db.schema("planets").delete()
    }
}

마이그레이션 등록하기

구성에서 마이그레이션을 app.migrations에 추가한 다음 app.autoMigrate() 또는 migrate 명령으로 실행하십시오.

app.migrations.add(CreatePlanet())
try await app.autoMigrate()

레코드 저장하기

모델 인스턴스를 생성하고 요청의 데이터베이스와 함께 save(on:)를 호출하십시오. Fluent는 INSERT를 실행하고 생성된 식별자를 채웁니다.

app.post("planets") { req async throws -> Planet in
    let planet = try req.content.decode(Planet.self)
    try await planet.save(on: req.db)
    return planet
}

레코드 조회하기

Model.query(on:)을 사용해 유창한 방식으로 쿼리를 구성하십시오. .all()은 모든 행을 반환하며, 필요에 따라 filter와 정렬 조건을 연결할 수 있습니다.

app.get("planets") { req async throws -> [Planet] in
    try await Planet.query(on: req.db).all()
}

ID로 필터링하고 찾기

find(_:on:)은 기본 키로 가져오며 선택적 값을 반환합니다. filter는 열 값으로 결과를 좁힙니다.

let earth = try await Planet.query(on: req.db)
    .filter(\.$name == "Earth")
    .first()

let byId = try await Planet.find(someUUID, on: req.db)

업데이트 및 삭제하기

가져온 모델의 속성을 변경하고 update(on:)을 호출하거나, delete(on:)으로 모델을 삭제하십시오. 두 작업 모두 데이터베이스에 대해 비동기적으로 실행됩니다.

if let planet = try await Planet.find(id, on: req.db) {
    planet.name = "Renamed"
    try await planet.update(on: req.db)
    // or: try await planet.delete(on: req.db)
}

관계

Fluent는 속성 래퍼로 모델 관계를 표현합니다. @Parent와 @Child는 일대일 및 일대다 관계에, @Siblings는 다대다 관계에 사용됩니다. 이들은 외래 키를 정의하고 .with(...)를 사용한 사전 로드를 지원합니다.

@Parent(key: "star_id")
var star: Star

// query eagerly loading the parent
Planet.query(on: req.db).with(\.$star).all()

빠른 확인: Fluent

객체 관계 매핑 이해도를 확인해 보십시오.

복습: Fluent 객체 관계 매핑과 모델

이제 Fluent로 데이터를 영구 저장할 수 있습니다:

  • @ID 및 @Field 속성 래퍼와 schema를 사용해 final class Model을 정의합니다.
  • AsyncMigration으로 테이블을 생성하고 autoMigrate()로 실행합니다.
  • save, query(on:), find, update, delete로 생성·조회·수정·삭제 작업을 수행합니다.
  • @Parent, @Child, @Siblings로 모델 관계를 구성하고 .with로 사전 로드합니다.

자주 묻는 질문

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

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

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

Vapor의 Fluent ORM으로 데이터를 저장합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

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

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

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

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

이 강의의 모든 강의

  1. 라우팅과 요청 처리
  2. 콘텐츠와 JSON 인코딩
  3. Fluent ORM과 모델
  4. 미들웨어와 인증
← Swift Academy(으)로 돌아가기