'serverside'에 해당되는 글 1건

  1. 2016.10.15 [Perfect] 프로젝트 생성하기
Programming/Backend2016.10.15 21:12

Swift 서버 프레임워크가 몇가지 있는데 그중에 가장 먼저 접하게 된 것이 Perfect(https://www.perfect.org) 이다. 처음에는 문서도 부족해서 자세히 알아 볼 기회가 없었다. 오늘 새로운 서버 기능을 추가하기 위해 어떤 프레임워크를 써볼까 하다 갑자기 Perfect가 떠올라 문서를 읽어 보기로 했다.


새로 프로젝트를 시작하는 것은 어려운 일이 아니다. 알고 보니 정말 간단하다. 그 간단한것을 다시 한번  정리해 본다.


Swift3 에 맞춰 Perfect 2가 출시되었다. 이 내용도 Swift3, Perfect2 에 맞춰 작성한다.


새로운 프로젝트를 생성하는 방법에는 크게 2가지가 있다.

두가지 방법도 해보았지만 그래도 역시 처음은 새로 작성하는 것이 좋다고 생각한다. 그래서 그 방법에 따라 작성한다.

프로젝트 폴더를 생성한다. 

$ mkdir FirstPerfectProject
$ cd FirstPerfectProject


Package.swift 파일을 생성한다.

$ vi Package.swift

다음 코드를 붙여 넣는다.

import PackageDescription
 
let package = Package(
    name: "FirstPerfectProject",
    dependencies: [
        .Package(url: "https://github.com/PerfectlySoft/Perfect-HTTPServer.git", majorVersion: 2, minor: 0)
    ]
)

name 은 프로젝트 이름이며 빌드 후 생성되는 실행파일 명이다.


dependencies 는 다른 라이브러리를 추가하는 부분이다. 아직 예제에 나온 라이브러리들만 추가해 봤음. gradle, cocoapods 를 사용해봤다면 낯설지 않은 부분이다.


이제 소스 파일을 작성할 폴더를 만들고 간단한 코드를 작성해 보자.

$ mkdir Sources
$ echo 'print("Well hi there!")' >> Sources/main.swift

이제 실행 가능한 조건은 모두 충족되었다. 이제 실행을 해보자.

$ swift build
$ .build/debug/MyAwesomeProject

swift build 를 통해서 프로젝트를 빌드한다. 빌드를 하게 되면 .build 폴더가 생기며 실행 파일은 package 의 name으로 생성된다.

빌드를 하면 dependecies 에 설정된 git에서 소스 파일들을 다운로드 받아서 빌드를 하게 된다. 빌드가성공하면 실행해 보자.

$ .build/debug/FirstPerfectProject
Well hi there!

실행이 되었다. 그런데 이건 REST 가 아니네? 물론 테스트를 위한 코드입니다.

이제 REST 를 테스트해보자.  main.swift를 다시 수정하자.

$ vi Sources/main.swift

기존 코드는 지우고 다음 코드를 붙여넣는다. 

import PerfectLib
import PerfectHTTP
import PerfectHTTPServer
 
// 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: "Hello, world!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)")
}

1초만에 코드를 다 작성했으니 이제 빌드를 해보자.

$ swift build
$ .build/debug/FirstPerfectProject
[INFO] Starting HTTP server on 0.0.0.0:8181 with document root ./webroot

오..! 서버가 실행됐다! localhost:8181 로 접속해 보자.



오.... 코드에 나와 있는 대로 uri 가 / 일때  Hello, world! 가 출력됐다.



이제 문서를 더 읽고 제대로 만들어 보자!!


https://www.perfect.org/docs/handlingRequests.html


https://github.com/PerfectlySoft/Perfect


문서 내용을 다 읽는데 많은 시간이 걸리지 않는다. 2~3시간이면 모든 내용을 읽을 수 있다.


아직 초기 단계라 아쉬운 부분이 많이 있다. ORM, auth 라든지 여러 부분이 아직 지원되지 않는다.


하지만 없다고 사용 못할 수준은 아니다. 마이크로 프레임워크라고 생각하고 사용하자.


실제 프로젝트에 적용할 수 있을지 없을지... 제가 한번 해보겠습니다.


후후....



오늘 내용이 많이 도움이 되었나요? 

더 자세한 내용은...


당신의 몫



신고
Posted by 초프(초보 프로그래머)