[Vapor] Swift, But on Server

Valse·2022년 12월 11일
0

Vapor

목록 보기
1/3

왜 그런 선택을..


  • 곧 진행할 프로젝트에서의 서버-DB-배포를 아우르는 선택지는 google firebaseAWS, 그리고 처음부터 모든 걸 해야 하는 Vapor가 있었다.
  • 이 글을 쓰는 필자는 좀 이상한 놈이기도 하고, 남들이 하지 않는 걸 굳이굳이 찾아서 하는 놈이기도 하다.
  • 그래서... Vapor 로 고작 로그인 정도 구현해 본 이 필자라는 놈은 Vapor를 활용해서 서버-DB-배포까지 이어지는 프로세스를 모두 해보겠다고 까불기 시작했고, 결국 iOS 앱을 위한 Vapor 서버를 담당하게 된다.
  • 대체 왜 그런 선택을....?

Do's


  • 배경 : 만들어야 하는 프로젝트 앱은 쇼핑몰 앱이다. 사용자용 앱, 관리자용 앱, 제품제공자용 앱 이렇게 3가지가 준비되어야 한다.
  • 빠르게 먼저 해야 하는 것들 :
    • Vapor에 적합한 DB와 배포 도구 조사
      • PostgreSQL은 거의 확정
    • 안전한 사용자 인증을 위한 JWT 활용법 조사
    • 토이 수준으로 먼저 구현해보는 연습해보기

WIP


  • vapor new {projectName} 명령어로 템플릿 생성

  • 필자는 PostgreSQLFluent ORM Framework를 쓸거라서 위와 같이 템플릿 생성

  • 원래 다른 의존성 패키지를 추가하지 않았을 때는 Todo가 없었던 것 같은데 DB랑 ORM 패키지 추가로 뭔가가 생겼다.

  • 템플릿으로 만들어진 파일이 제공해주는 Todo 예시 파일에 모델 구조가 어떻게 되어 있는지 엿볼 수 있다.

  • Fluent가 의존성 추가되어 있는 덕분에 아래의 모델 데이터를 바탕으로 편하게 PostgreSQL과 소통할 수 있다.

import Fluent
import Vapor

// Model 프로토콜을 채택해서 새로운 모델을 만들 수 있다.
final class Todo: Model, Content {

	// 정적상수 스키마로 테이블과 콜렉션을 지정해 줄 수 있다.
    // 대체로 snake_case로 작성한다.
    static let schema = "todos"
    
    @ID(key: .id)
    var id: UUID?

    @Field(key: "title")
    var title: String

    init() { }

    init(id: UUID? = nil, title: String) {
        self.id = id
        self.title = title
    }
}

PostgreSQL과의 사투

  • 백엔드 지식이 전무하지만? 어쨌든 db를 만들긴 해야 하니까 PostgreSQL을 찾아봤다.
  • brewPostgreSQL@14를 설치하고 나서 연결하려 하니 이상한 에러가 나왔다.
  • 조사해보니 로컬 서버가 제대로 돌고 있지 않아서 그랬는데, 내 경우엔 brew 설치만 하고 서버 가동을 안시켜서 그런 것으로 추정된다.

  • 뭔가 되기 시작해서 다급하게 ctrl C 로 종료하려 했는데, 사실 여기서부터 또 뭘 어떻게 해야할지 모르겠다. 공식 문서를 읽고 있긴 한데, 이게 맥북 path를 가정하고 하는지 윈도우 path를 가정하고 하는 건지 확인해 봐야겠다.

~ 221211

profile
🦶🏻🦉(발새 아님)

0개의 댓글