[Vapor/Swift] Vapor를 이용하여 서버 구성하기

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

이번에는 Swift로 작성된 웹 프레임워크인 Vapor를 이용하여 서버를 구성하고 Heroku를 통해 배포하는 과정을 다루어 보겠습니다. 본 포스팅은 macOS를 기준으로 작성되었습니다.

Vapor 설치

Vapor를 이용하기 위해서는 다음과 같은 요구사항이 만족되어야 합니다.

  • Xcode 11.4 이상
  • Swift 5.2 이상

Xcode 버전 확인

Xcode가 설치되어 있지 않으시다면 App Store를 통해 설치하시면 되고, 이미 설치되어 있으신 경우에는 Xcode를 실행하신 후 화면 상단의 메뉴바에서 Xcode → About Xcode를 선택하셔서 버전을 확인하실 수 있습니다.

Swift의 버전 확인

Swift 버전은 터미널에서 swift --version 명령을 통해 확인하실 수 있습니다.

// 출력 결과
Apple Swift version 5.4.2 (swiftlang-1205.0.28.2 clang-1205.0.19.57)
Target: x86_64-apple-darwin20.5.0

Vapor Toolbox 설치

Toolbox는 Homebrew를 통해 배포되고 있습니다. Homebrew 설치는 잘 알려져 있으니 생략하고 brew 명령을 통해 Toolbox를 설치해보겠습니다.

brew install vapor

설치 완료 후 잘 설치되었는지 확인하기 위해 아래 명령어를 입력해보세요.

vapor --help

시작하기

Hello, world

이 섹션은 Vapor Toolbox를 이용해 새 Vapor 프로젝트를 만들고, 빌드하고 서버를 실행하는 내용을 다룹니다.

New Project

vapor --help 명령을 통해 살펴보았던 vapor new 명령을 통해 새 프로젝트를 생성하실 수 있습니다.

vapor new hello -n   // 모든 설정을 no로 설정하고 새 프로젝트를 생성
vapor new hello      // 설정사항을 사용자에게 질문하며 새 프로젝트를 생성

-n 플래그를 붙이지 않고 프로젝트를 생성하면 아래와 같은 사항들을 질문합니다.

  • Would you like to use Fluent? (--fluent/--no-fluent)
  • Would you like to use Leaf? (--leaf/--no-leaf)

모든 옵션을 no로 선택하고 프로젝트를 생성하면 아래와 내용이 나타나며 프로젝트 생성이 완료됩니다.

Generating project files
+ Package.swift
+ main.swift
+ configure.swift
+ routes.swift
+ .gitkeep
+ AppTests.swift
+ Dockerfile
+ docker-compose.yml
+ .gitignore
+ .dockerignore
Creating git repository
Adding first commit

빌드 및 실행

Xcode를 통해 프로젝트 생성 시 만들어진 Package.swift 파일을 실행합니다. 실행 후 의존성 관리도구인 Swift Package Manager (SPM)을 통해 의존하고 있는 도구들 (의존성, dependencies)을 다운로드하기 시작할 것입니다. 작업이 완료되면 Build and runStop 버튼 우측에 있는 Set the activate scheme 버튼을 My mac으로 설정하고 실행합니다.

실행이 완료되면 Xcode 하단부 콘솔에 아래와 같은 내용이 출력될 것입니다.

[ NOTICE ] Server starting on http://127.0.0.1:8080

Localhost 방문

아래 Localhost 페이지들을 방문해보시면 지정된 문구가 페이지에 출력될 것입니다.

폴더 구조

Vapor의 폴더 구조는 SPM의 폴더 구조에 기반하여 아래와 같이 구성되어 있습니다.

.
├── Public
├── Sources
│   ├── App
│   │   ├── Controllers
│   │   ├── Migrations
│   │   ├── Models
│   │   ├── configure.swift
│   │   └── routes.swift
│   └── Run
│       └── main.swift
├── Tests
│   └── AppTests
└── Package.swift

Public

이 폴더는 FileMiddleware가 활성화된 경우 앱에서 제공하는 Images, style sheets, browser scripts와 같은 공용 파일을 가지고 있습니다. Vapor가 공용 파일을 서비스하려면 먼저 configure.swift 파일에서 FileMiddleware를 활성화해야 합니다.

// Serves files from `Public/` directory
let fileMiddleware = FileMiddleware(
    publicDirectory: app.directory.publicDirectory
)
app.middleware.use(fileMiddleware)

Sources

프로젝트의 Swift 소스 파일을 가지고 있는 폴더입니다. 최상단 폴더에는 SPM menifest로 선언되어 패키지 모듈을 반영하는 AppRun 폴더가 위치해 있습니다.

App

애플리케이션 로직이 들어가는 곳입니다.

Controllers

컨트롤러에는 애플리케이션 로직을 그룹화하여 위치시키는 것이 좋습니다. 예를 들어, 요청을 수신하고 의도한 응답을 반환하는 기능을 가질 수 있습니다.

Migrations

Fluent를 사용할 경우 데이터베이스 마이그레이션이 위치하는 곳입니다.

Models

Content 구조 또는 Fluent Model들을 저장하기 좋은 장소입니다.

configure.swift

새롭게 생성된 Application을 구성하기 위해 main.swift가 호출하는 configure(_:) 메서드를 가진 파일입니다. routes, databases, providers 등과 같은 서비스를 등록하는 곳입니다.

routes.swift

Application에 routes를 등록하기 위해 configure(_:) 말미 부근에서 호출되는 routes(_:) 메서드를 가진 파일입니다.

Run

애플리케이션을 시작하고 실행하는 데 필요한 코드만 포함하고 있는 폴더입니다. 주요 실행 대상인 main.swift가 위치하고 있습니다.

main.swift

사용자가 구성한대로 Vapor Application의 인스턴스를 생성하고 실행해주는 파일입니다.

Tests

Run과 같은 실행 대상이 아닌 Source 폴더에 대응되는 폴더입니다. 패키지를 테스트할 수 있도록 XCTest 모듈을 가지고 있습니다.

AppTests

App 모듈에 대한 유닛 테스트 코드를 가진 폴더입니다.

Package.swift

SPM의 package manifest입니다.

SPM

Package.swift의 내용과 구조를 설명하고 있습니다.

Xcode

Xcode에서 프로젝트 실행 시 나타나는 Custom Working Directory 에러를 해결하는 방법을 설명하고 있습니다. 프로젝트의 root folder를 scheme의 run - options - Working Directory 옵션을 통해 custom working directory를 입력함으로써 에러를 해결할 수 있음을 소개하고 있습니다. 터미널에서 pwd (print working directory) 명령을 통해서도 프로젝트의 root 위치를 얻을 수 있습니다.

에러 없이 깔끔해진 콘솔을 확인하실 수 있습니다.

참고자료

  1. Server-Side Swift with Vapor - yagom.net
  2. Vapor - GitHub Repository
  3. Vapor Docs - docs.vapor.codes
profile
합리적인 해법 찾기를 좋아합니다.

0개의 댓글