[Vapor/Swift] 배포 서버의 PostgreSQL DB 구성하기

Ryan (Geonhee) Son·2021년 7월 6일
0

이번 내용은 배포와 관련된 이전 포스팅에서 다룬 적이 있으므로 사전 작업은 해당 포스팅의 Postgres 섹션을 참고해주세요. 자세하게 다룰 부분은 해당 포스팅의 데이터베이스 구성 파트입니다.

데이터베이스 구성

직전 포스팅인 로컬 환경과 달리 구성해주셔야 하는 부분은 configure.swift입니다. 아래와 같이 작성해주시면 됩니다.

import Vapor
import Fluent
import FluentPostgresDriver

public func configure(_ app: Application) throws {
    app.migrations.add(CreateProjectItem(), to: .psql)
    
    if let databaseURL = Environment.get("DATABASE_URL"), var postgresConfig = PostgresConfiguration(url: databaseURL) {
        var clientTLSConfiguration = TLSConfiguration.makeClientConfiguration()
        clientTLSConfiguration.certificateVerification = .none
        postgresConfig.tlsConfiguration = clientTLSConfiguration
        app.databases.use(.postgres(configuration: postgresConfig), as: .psql)
    } else {
        throw Abort(.internalServerError)
    }
    
    try routes(app)
}

TLSConfiguration의 인스턴스를 생성하는 방식이 Vapor Docs와 다릅니다. 이는 Vapor Docs에서 TLSConfiguration 인스턴스 생성에 사용한 TLSConfiguration.forClient(certificationVerification:) 메서드가 deprecated 되었기 때문입니다. 이제는 TLSConfiguration.makeClientConfiguration()을 통해 인스턴스를 생성할 수 있지만 certificationVerification을 초기화 시점에 바로 .none 값으로 할당해줄 수는 없게 되었습니다. 만들어준 인스턴스의 certificationVerification 프로퍼티를 .none으로 설정해주시고 postgresConfig.tlsConfiguration에 할당해줍니다. 이를 통해 Heroku Postgres에서 발생할 수 있는 SSL Certification 관련 에러(Handshake Error)를 방지할 수 있습니다.

Commit & Push

커밋하시고 서버에 푸시해주세요! CD로 인해 자동 배포됩니다.

git commit -m "feat: Configure heroku postgres database"
git push heroku master // 브랜치를 이용하고 있다면 git push heroku branchName:master

데이터베이스 마이그레이션

마이그레이션은 아래 명령을 통해 할 수 있습니다.
heroku run Run -- migrate --env production

데이터베이스 되돌리기

데이터베이스를 되돌리려면 아래 명령을 입력하세요.
heroku run Run -- migrate --revert --all --yes --env production

revert 작업에 실패하면 아래 명령어를 입력해보세요.
heroku run Run -- migrate --revert

profile
합리적인 해법 찾기를 좋아합니다.

0개의 댓글