본문 바로가기
Server/Vapor - ServerSide

Vapor) Heroku와 Postgresql을 적용해보자

by 후르륵짭짭 2020. 10. 26.
728x90
반응형

안녕하세요! 후르륵짭짭입니다.

2020/10/26 - [Vapor - ServerSide] - Vapor) Heroku를 사용해서 웹 사이트를 만들어보자

 

Vapor) Heroku를 사용해서 웹 사이트를 만들어보자

안녕하세요! 후르륵짭짭 입니다. 그동안 Vapor를 사용해서 여러가지 작업을 했는데요. 이번에는 Heroku를 사용해서 언제 어디서든 웹 사이트에 접근 할 수 있도록 만들어볼려고 합니다. 생각 보다

hururuek-chapchap.tistory.com

저번에 Heoroku를 등록하는 것에 대해 배웠는데요!

이번에는 DB랑 Heroku를 연결 시키는 방법에 대해서 알아볼려고 합니다.

itnext.io/deploying-your-vapor-4-app-to-heroku-48b26f9f46cb

 

Deploying your Vapor 4 app to Heroku

You’re done building your awesome Vapor 4 app. But now it’s time for the world to appreciate your work. This means you’re in for the next…

itnext.io

일단 이 글을 통해서 많은 도움을 받을 수 있었습니다.

 

** 시작하기 **

일단 Heroku 사이트에 들어갑니다.

그리고 나서 

resources -> 검색에 Postgres를 찾아서 넣어줍니다.

그리고 이렇게 Provision을 눌러줘서 등록을 해줍니다!

 

이제 부터 본격적인 시작입니다.

heroku config

터미널에 위 명령어를 적어주시면 DATABASE_URL이 나오게 됩니다!

이것이 잘 나온다면 Heroku에 Postgresql이 설치가 잘 된 것입니다.

 

하지만 위의 내용을 잘라서 config.swift에 넣어주면 보안이 약해지기 때문에 config.swift에

//config.swift

extension Environment {
    
    static var databaseURL: URL {
        
        guard let urlString = Environment.get("DATABASE_URL"), let url = URL(string: urlString) else{
            fatalError("Database url no configured")
        }
        
        return url
    }
}

위와 같이 코드를 작성해주시기 바랍니다. 

이렇게 하면 DATABASE_URL에서 정보를 가져오고 자동으로 매핑 시켜줍니다.

//config.swift

try app.databases.use(.postgres(url: Environment.databaseURL), as: .psql)
    
    app.migrations.add(CreateTodo())

    if app.environment == .development{
        try app.autoMigrate().wait()
    }
    

그리고 config.swift 파일에 위에서 만든 databaseURL을 가져오고 DB 등록을 해줍니다. 

그리고 우리가 이전에 migration 했던거 처럼 동일하게 해줍니다.

그리고 개발 상태 일 때는 , migraion이 되지 않기 하기 위해 나머지 코드를 추가해줍니다.

 

이제 다 끝나갑니다.

이제 터미널에 vim Procfile을 수정 해줄것입니다.

-> vim Procfile

-> release: Run migrate - y
web : Run serve --env production --hostname 0.0.0.0 --port $PORT

이렇게 release를 추가로 적어줍니다.

 

그리고 나서 

git add .
git comment -m "내용"
vapor heraku push

를 해주시면 됩니다!!

그리고 나서 

  app.post("insert") { (req) -> EventLoopFuture<[Todo]> in
        
        if let title = try? req.content.decode(Todo.self){
            
            let save = title.save(on: req.db)
            let temp =  save.and(Todo.query(on: req.db).all()).map { (save, read) -> ([Todo]) in
                return read
            }
            
            return temp
            
        }
        
        return Todo.query(on: req.db).all()
        
    }

이렇게 post를 만들어주시고 postman으로 내용을 전송하시면 

정상적으로 내용이 보내진 것을 확인 할 수 있습니다!!

728x90
반응형

댓글