[swift] 아폴로 서버와 데이터베이스의 연동 방법

아폴로(Apollo)는 GraphQL을 사용하여 서버와 클라이언트 간의 데이터 통신을 가능하게 해주는 도구입니다. 아폴로를 사용하면 효율적이고 유연한 데이터 요청과 응답이 가능해집니다. 이 글에서는 아폴로 서버와 데이터베이스를 연동하는 방법을 알아보겠습니다.

1. 아폴로 서버 설정

먼저, 아폴로 서버를 설정해야 합니다. 서버를 구성하는 방법은 프레임워크 또는 라이브러리에 따라 다를 수 있습니다. 이 예시에서는 Swift 언어로 개발된 Vapor 프레임워크를 기준으로 설명하겠습니다.

import Vapor
import GraphQL

let graphql = GraphQL(schema: YourGraphQLSchema)

let app = Application()

app.get("graphql") { req in
    try req.make(Responder.self).respond(to: req)
}

let server = try EngineServer(transport: HTTPServer(hostname: "localhost", port: 8080), schema: graphql)

try server.start()

위의 예시 코드는 기본적인 Vapor 프레임워크에서의 아폴로 서버 설정 방법입니다. YourGraphQLSchema 부분에는 본인이 정의한 GraphQL 스키마 객체를 넣어주어야 합니다.

2. 데이터베이스 연동

데이터베이스와의 연동은 아폴로 서버 내에서 이루어집니다. 일반적으로 ORM(Object-Relational Mapping) 도구를 사용하여 쉽게 데이터베이스와 연결할 수 있습니다. 예를 들어, Vapor 프레임워크에서는 Fluent라는 ORM 도구를 제공합니다.

Fluent를 사용하여 데이터베이스와 연동하는 예시를 살펴보겠습니다.

import Vapor
import Fluent

final class User: Model, Content {
    static let schema = "users"

    @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
    }
}

// 데이터베이스 설정
app.databases.use(.sqlite(.file("db.sqlite")), as: .sqlite)

// 마이그레이션
app.migrations.add(CreateUserTable())

// 아폴로 서버와 데이터베이스 연동
app.apollo.register(
    schema: YourGraphQLSchema,
    context: YourGraphQLContext,
    configure: { builder in
        builder.use(YourGraphQLQueryMiddleware())
        builder.use(YourGraphQLMutationMiddleware())
        builder.use(YourGraphQLSubscriptionMiddleware())
    }
)

위의 예시 코드에서 User라는 모델로 SQLite 데이터베이스와 연동하는 방법을 보여주고 있습니다. 이를 위해 Fluent 패키지를 import하고 User 모델을 정의합니다. 그리고 데이터베이스 설정과 마이그레이션, 아폴로 서버와의 연동을 진행합니다.

3. 쿼리 및 뮤테이션 작성

아폴로 서버와 데이터베이스가 연동되면 GraphQL 쿼리와 뮤테이션을 작성하여 데이터를 요청하거나 수정할 수 있습니다.

예를 들어, 아래는 이름과 이메일을 받아 새로운 사용자를 생성하는 뮤테이션의 예시입니다.

mutation CreateUser($name: String!, $email: String!) {
  createUser(name: $name, email: $email) {
    id
    name
    email
  }
}

위의 뮤테이션은 CreateUser라는 이름을 가지며, nameemail이라는 변수를 입력으로 받습니다. 새로운 사용자를 생성하고 생성된 사용자의 id, name, email을 반환합니다.

결론

이렇게하면 아폴로 서버와 데이터베이스를 연동하여 효율적이고 유연한 데이터 요청 및 응답이 가능하게 됩니다. 서버 설정, 데이터베이스 연동 및 쿼리/뮤테이션 작성 과정을 참고하여 원하는 기능을 구현해보세요.

참고 자료: