프로젝트도 생성했으니 이제 뭔가 해보자.
음.. 아무래도 Backend 이고 하니... DB가 있어야 겠다. 많이 쓰는 Mysql 로 해보자.
MySQL 을 사용하려면 MySQL용 Database connector 를 추가해야 한다.
package.swift 의 dependency로 추가 가능하다.
import PackageDescription let package = Package( name: "FirstPerfectProject", dependencies: [ .Package(url: "https://github.com/PerfectlySoft/Perfect-HTTPServer.git", majorVersion: 2, minor: 0), .Package(url:"https://github.com/PerfectlySoft/Perfect-MySQL.git", majorVersion: 2, minor: 0) ] )
Xcode에서 build를 해보자. (xcode에서 실행하는 방법은 이전 글에서 생략했다.... 실수로..)
왜.. 오류지?!
음.. 그럼.. 처음에 했던 swift build를 해보자.
$ swift build Cloning https://github.com/PerfectlySoft/Perfect-MySQL.git HEAD is now at 53ef1af Fixes ISS-269 - numRows always returns 0 Resolved version: 2.0.1 Cloning https://github.com/PerfectlySoft/Perfect-mysqlclient.git HEAD is now at 60a82d5 A little cleanup Resolved version: 2.0.0 Compile Swift Module 'MySQL' (1 sources) Compile Swift Module 'PerfectLib' (10 sources) Compile Swift Module 'PerfectHTTP' (9 sources) Compile CHTTPParser http_parser.c Linking CHTTPParser Compile Swift Module 'PerfectHTTPServer' (5 sources) Compile Swift Module 'FirstPerfectProject' (1 sources) Linking ./.build/debug/FirstPerfectProject
오!! 빌드했더니 Perfect-MySQL 을 다운로드 받는다~!
이제 run 할 수 있겠다. Xcode에서 실행해보자.
또 같은 오류!!!!!!
무엇이 문제일까? Xcode에서 실행하지 말고 터미널에서 실행해볼까?
$ swift build Compile Swift Module 'MySQL' (1 sources) Compile Swift Module 'PerfectLib' (10 sources) Compile Swift Module 'PerfectHTTP' (9 sources) Compile Swift Module 'PerfectHTTPServer' (5 sources) Compile Swift Module 'FirstPerfectProject' (1 sources) Linking ./.build/debug/FirstPerfectProject
오! MySQL이 빌드 되었다. (역시 내 잘못이 아니야... Xcode.. 망할)
MySQL 이 잘 되는지 확인하기 위해 기존 코드에서 MySQL 을 import 해보자.
import PerfectLib import PerfectHTTP import PerfectHTTPServer import MySQL // Create HTTP server. let server = HTTPServer() // Register your own routes and handlers var routes = Routes() routes.add(method: .get, uri: "/", handler: { request, response in response.setHeader(.contentType, value: "text/html") response.appendBody(string: "<html><title>Hello, world!<title><body>Hello, world!</body></html>") response.completed() } ) // Add the routes to the server. server.addRoutes(routes) // Set a listen port of 8181 server.serverPort = 8181 do { // Launch the HTTP server. try server.start() } catch PerfectError.networkError(let err, let msg) { print("Network error thrown: \(err) \(msg)") }
직접 사용하지는 않지만 import 했으니 오류 없이 잘 실행 되어야 겠지? MySQL이 제대로 연결 안 되었다면 오류가 뜰거야. (아마도..)
빌드 후 실행해 보자.
build/debug/FirstPerfectProject [INFO] Starting HTTP server on 0.0.0.0:8181 with document root ./webroot
오오오오... 성공!
이렇게 package.swift 에 dependency 를 추가하고 빌드만 하면 잘 된다.
그럼 xcode 에서는 왜 안 될까?
Xcode 프로젝트는 구성이 좀 까다롭다. project 파일을 지우지 말고 다시 생성해 보자.
$ swift package generate-xcodeproj generated: ./FirstPerfectProject.xcodeproj
많은 삽질 끝에 방법을 찾았다.
문서를 읽으면 한번 봤을 내용입니다. Xcode 프로젝트를 생성하고 target이 아닌 project 의 build setting 에 추가로 설정을 해줘야 한다.
Library Search Paths 에 $(PROJECT_DIR) recursive 로 설정한다.
이제 빌드하면 성공적으로 완료한다.
문제는 이게 dependency 를 추가하고 xcode project를 생성할 때마다 설정해줘야 한다는 것이다.
왜 저 설정을 default로 넣지 않는지 모르겠다..
잊지 말자 $(PROJECT_DIR)
dependency 설정 끝~
Getting Started From Scratch https://www.perfect.org/docs/gettingStartedFromScratch.html
Building with Swift Package Manager https://www.perfect.org/docs/buildingWithSPM.html
'Programming' 카테고리의 다른 글
무료 SSL 인증서 발급 적용 (0) | 2020.11.27 |
---|---|
GitHub Free vs Pro (0) | 2020.07.10 |
[Perfect] 프로젝트 생성하기 (1) | 2016.10.15 |
Firebase를 이용한 채팅 구현 (1) - 프로젝트 설정 (iOS) (0) | 2016.06.17 |
SpringBoot 시작하기 (0) | 2014.09.12 |