ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 💧Vapor💧 MySQL DB에 연결하기
    Programing/Vapor 2020. 5. 8. 03:14

    안녕하세요 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에 배포도 진행해보도록 하겠습니다. 

    댓글

Designed by Tistory.