💧Vapor💧 MySQL DB에 연결하기
안녕하세요 5anniversary에요~!
이번 시간에는 저번 시간에 이어서 Vapor를 이용해 서버를 구축하기 위해서 MySQL DB에 연결해 볼 거예요~!
우선 MySQL을 사용하기 위해서 필요한 패키지를 받아줘야겠죠??
저희가 사용할 패키지는 fluent-mysql-driver 를 사용해 줄 거예요 Fluent에 대해서 알아보자면
Fluent (vapor/fluent) is a type-safe, fast, and easy-to-use ORM framework built for Swift. It takes advantage of Swift's strong type system to provide an elegant foundation for building database integrations.
Fluent는 Swift를 위한 type-safe가 지원되고, 빠르고, 사용하기 쉬운 객체 관계 매핑을 지원해주는 프레임워크입니다. - 출처
라고 설명이 되어있네요!!
사용할 패키지를 알아봤으면 이제 한 번 패키지를 받아보도록 할까요??
import Vapor
let package = Package(
name: "Hello", // 프로젝트 이름
dependencies: [
/// Any other dependencies ...
.package(url: "https://github.com/vapor/fluent-mysql-driver.git",
from: "3.0.0"), // git 그리고 버전
],
targets: [
.target(name: "App", dependencies: ["FluentMySQL", ...]),
.target(name: "Run", dependencies: ["App"]),
.testTarget(name: "AppTests", dependencies: ["App"]),
]
)
Package.swift
이렇게 Package.swift 파일에 작성해준 이후
터미널로 돌아가
vapor xcode -y
를 해주시면 바로 패키지를 받아온 프로젝트가 펼쳐지게 됩니다.
우선 간단한 유저 모델을 작성해주겠습니다.
import Vapor
import FluentMySQL
struct User {
var id: Int?
var name: String?
}
extension User: Content {}
extension User: Migration {}
extension User: MySQLModel {
typealias Database = MySQLDatabase
}
User.swift
MySQL의 모델을 가지고 있으려면 id값은 기본 pk로 설정되어있어 건드리지 않는 편이 좋습니다.
또한, Content는 request를 다뤄줄 때 사용, Migration은 모델링을 해두면 해당 모델을 가지고 DB에 migration을 통해 자동 모델링을 해줄 때 사용되기 때문에 상속받아야 합니다.
그다음 MySQL과 연결을 해줄 건데요
import FluentMySQL
import Vapor
public func configure(_ config: inout Config, _ env: inout Environment, _ services: inout Services) throws {
// Register providers first
try services.register(FluentMySQLProvider())
...code...
var databases = DatabasesConfig()
let hostname = "localhost"
let username = "디비 사용자 명"
let password = "디비 비밀번호"
let databaseName = "접속 디비 이름"
let databaseConfig = MySQLDatabaseConfig(
hostname: hostname,
port: 3306, // 기본 디비 포트가 3306 일거입니다.
username: username,
password: password,
database: databaseName)
let database = MySQLDatabase(config: databaseConfig)
databases.add(database: database, as: .mysql)
services.register(databases)
var migrations = MigrationConfig()
migrations.add(model: User.self, database: DatabaseIdentifier<MySQLDatabase>.mysql)
services.register(migrations)
}
configure.swift
configure.swift를 통해 DB설정을 해줍니다.
이다음 실행을 해주시면

원하는 모델대로 테이블이 생성된 것을 볼 수 있습니다.
테이블에

유저를 추가시켜준 다음
import Vapor
public func routes(_ router: Router) throws {
// ...code...
router.get("users") { req in
return User.query(on: req).all()
}
}
routes.swift
라우터를 추가시켜준다음 실행시켜주시면

와 같은 결과를 얻어볼 수 있습니다.
git link 에서 여기까지 해놓은 코드의 링크를 첨부 합니다.
그리고, 다음 시간에는 오늘 결과로 좀 더 나아가 heroku에 배포도 진행해보도록 하겠습니다.