Programing/Vapor

💧Vapor💧 Heroku MySQL DB 사용하기

5주년 2020. 5. 11. 03:18

안녕하세요, 5anniversary 입니다!!

 

이번 시간에는 지난 시간에 이어서 heroku 서버에 MySQL DB를 만들어 사용하는 방법을 알아보는 시간을 가질 거예요.

 

그렇다면 바로 heroku 대시보드로 들어가야겠죠??

add-ons에서 저희가 사용할 서비스는

 

JawsDB입니다.

추가를 해주시고 난 이후에 

 

터미널에 heroku config를 작성해주시면

 

JAWSDB_URL: mysql://z2gsgk267lrbl4yf:j4rki5lrhxyu4gds@ijj1btjwrd3b7932.cbetxkdyhwsb.us-east-1.rds.amazonaws.com:3306/vclhtpt0ysupjjlf

와 같은 환경변수로 설정된 DB정보를 받을 수 있습니다.

 

JAWSDB_URL: mysql://<username>:<password>@<host>:<port>/<db_name>

와 같이 표현이 되기 때문에 해당하는 DB정보를 config.swift에 작성을 해주시면 되겠죠??

 

public func configure(_ config: inout Config,
                      _ env: inout Environment,
                      _ services: inout Services) throws {
	
    ...code...

    var databases = DatabasesConfig()
    let hostname : String = "ijj1btjwrd3b7932.cbetxkdyhwsb.us-east-1.rds.amazonaws.com"
    let username : String = "z2gsgk267lrbl4yf"
    let password : String = "j4rki5lrhxyu4gds"
    let databaseName: String = "vclhtpt0ysupjjlf"
    let databaseConfig = MySQLDatabaseConfig(
      hostname: hostname,
      port: 3306,
      username: username,
      password: password,
      database: databaseName)
      
   
   ...code...
   
}

 

그런데 이렇게 작성하게 되면 DB정보가 전부 노출이 되니 서버의 환경변수에 저장해주도록 하면 좋습니다.

heroku config:set DB_HOSTNAME=호스트이름
heroku config:set DB_USERNAME=유저이름
heroku config:set DB_PASSWORD=비밀번호
heroku config:set DB_DBNAME=디비이름
heroku config:set DB_PORT=포트번호

해당 코드로 환경변수에 설정을

public func configure(_ config: inout Config,
                      _ env: inout Environment,
                      _ services: inout Services) throws {
	
		...code...
        
	var databases = DatabasesConfig()
    let hostname = Environment.get("DB_HOSTNAME") ?? "로컬"
    let username = Environment.get("DB_USERNAME") ?? "로컬 DB 유저이름"
    let password = Environment.get("DB_PASSWORD") ?? "로컬 DB 비밀번호"
    let databaseName = Environment.get("DB_DBNAME") ?? "로컬 DB DB이름"
    let databaseConfig = MySQLDatabaseConfig(
      hostname: hostname,
      port: 3306,
      username: username,
      password: password,
      database: databaseName)

		...code...
        
}

config.swift에서 위와 같이 작성을 해주시면 로컬에서는 로컬의 디비를 사용,

 

서버에 올리게 되면 서버 DB를 사용하는 환경을 가지게 됩니다.

 

그리고 deploy를 해주시고

 

이전 포스팅에서 작성되어있던 /users을 작성해 보시면

출력은 되지 않지만 DB가 연결된 것을 확인할 수 있습니다.

 

다음 시간부터는 지금까지 설정했던 개발환경을 가지고 활용해보는 시간을 가지도록 하겠습니다~!