iOS 개발자를 희망하는 내가 서버를 구현을 도전하게 된 이유
토이 프로젝트를 진행하면서 DB와 서버를 사용해야 했다. 저번에 BabySitter 앱을 구현할 때는 FireBase로 DB와 서버를 모두 사용했는데, 이번 프로젝트에서는 서버 사이드 개발을 경험해보고 싶어서 서버 개발을 도전하게 되었다.
왜 Vapor?
예전에 웹 공부를 할 때 Node.js를 이용하여 서버를 구현한 경험이 있다. 기억이 잘 나지 않기도 하고 iOS 개발자를 꿈꾸는 나에겐 JavaScript는 더이상 필요 없다. 굳이 사용하지 않는 JavaScript를 처음부터 공부해야한다는 것이 쉽지 않았다.
조금 찾아보니까 Swift로 서버를 개발할 수 있는 방법이 있다는 것을 알게 되었고, Swift 언어로 서버를 개발할 수 있다는 점에서 Vapor를 선택했다. Perfect, Kitura, Zewo 등 다른 서버 사이드 프레임워크가 있지만 Vapor가 사용법을 익히기 쉽고 라우터 개발이 쉬워서 선택했다.
Vapor 시작하기
1️⃣ vapor 설치
Vapor 4는 Swift 5.6 이상을 필요로 한다.
brew install vapor
터미널에 위의 명령어를 입력하여 vapor를 설치한다.
2️⃣ Vapor 프로젝트 생성하기
vapor new vaporStudy
// vapor new 프로젝트명
터미널에 위의 명령어를 입력하여 vapor 프로젝트를 생성한다.
❗️프로젝트 생성 명령어를 입력하면 다음과 같은 질문이 나오는데,
1. Would you like to use Fluent? - Fluent를 사용할 것인지?
2. Would you like to use Leaf? - Leaf를 사용할 것인지?
나 같은 경우 Fluent를 사용하기 위해 1번 항목은 y, Leaf는 사용하지 않기에 2번 항목은 n을 입력하였다.
위와 같은 질문을 무시하고 기본 템플릿을 사용하려면,
vapor new vaporStudy -n
위와 같이 명령어 끝에 -n 플래그를 사용한다.
3️⃣ 생성 된 vapor 프로젝트 파일 내부로 이동
cd vaporStudy
cd 명령어를 이용해서 vapor 프로젝트 파일 내부로 이동한다.
4️⃣ Xcode로 vapor 실행
vapor xcode
Xcode에서 vapor를 관리하기 위해 위의 명령어를 입력하여 vapor을 xcode로 실행한다.
❗️ Xcode가 실행되면 자동으로 SPM 의존성을 다운로드 한다.
정상적으로 실행되면 하단의 콘솔창에 [ NOTICE ] Server starting on http://127.0.0.1:8080 이 출력된다.
Vapor 폴더구조
1️⃣ Package.swift
SPM이 가장 먼저 찾는 파일로, 패키지의 의존성과 타겟 등을 정의한다.
✅ 항상 루트 디렉터리에 위치해야하며, 파일 이름은 무조건 Package.swift이어야 한다.
2️⃣ Source
프로젝트의 모든 Swift 소스 파일을 포함한다.
3️⃣ App
앱을 구성하는 데 필요한 코드를 포함한다.
4️⃣ Controllers
로직을 그룹화 하는 컨트롤러가 위치한다.
5️⃣ Migrations
DB 마이그레이션을 정의하는 타입이 위치한다.
6️⃣ Models
DB의 데이터 구조를 나타내는 모델이 위치한다.
7️⃣ Configure.swift
앱을 구성하는 configure(_:) 함수를 포함한다.
✅ main.swift에 의해 호출되고, 이 함수에 라우트, DB 등의 서비스를 등록해야한다.
8️⃣ route.swift
앱에 라우트를 등록하는 route(_:) 함수를 포함한다.
✅ configure(_:) 함수에 의해 호출된다.
9️⃣ Run
앱을 실행하는데 필요한 코드만 포함한다.
🔟 Test
XCTVapor 모듈을 사용하는 단위 테스트를 포함한다.
'iOS > Vapor' 카테고리의 다른 글
[Vapor/Databse] CRUD 기능 구현하기 (1) | 2023.10.21 |
---|---|
[Vapor/Database] Fluent Migration (0) | 2023.10.20 |
[Vapor/DataBase] Fluent 모델 (0) | 2023.10.19 |
[Vapor/Database] PostgreSQL 시작하기 (1) | 2023.10.18 |
[Vapor/Server] Fluent란? (0) | 2023.10.18 |