Swift
    • PDF

    Swift

    • PDF

    기사 요약

    Swift 형식의 액션을 생성하고 다양하게 활용하는 방법과 예제를 소개합니다.

    액션 생성

    Swift 액션을 생성하는 과정은 JavaScript 액션을 생성하는 과정과 유사합니다. Swift로 작성한 코드는 여러 개의 함수를 포함할 수 있지만 main 함수는 프로그램의 시작점으로써 반드시 선언되어야 합니다. 이 점을 고려하여 이름과 장소를 포함하여 "Hello World in Naver!"를 출력하는 Swift 형식의 간단한 예제 코드 'hello'는 다음과 같습니다.

    func main(args: [String:Any]) -> [String:Any] {
        let name: String = args["name"] as? String ?? "World"
        let place: String = args["place"] as? String ?? "Naver"
        return [ "payload" : "Hello \(name) in \(place)!" ]
    }
    

    위에서 작성한 코드를 사용하여 콘솔에서 'helloSwift'라는 이름의 액션을 생성하는 과정은 다음과 같습니다.

    compute-15-2-401.png

    실행 가능한 Swift 액션으로 패키징하여 액션 생성

    Cloud Functions에서 Swift 소스 코드 파일을 사용하여 액션을 생성할 때 액션이 실행되기 전에 바이너리로 컴파일되어야 합니다. 한번 컴파일된 이후에는 작업을 대기하는 컨테이너가 제거되기 전까지 발생하는 후속 액션 호출에 대해서는 빠르게 응답합니다.
    이처럼 컨테이너가 제거된 후에는 처음 액션 실행 시 응답 지연이 발생하는데, 이러한 응답 지연은 cold-start 지연으로 알려져 있습니다. 이러한 cold-start 지연을 피하기 위해서는 Swift 파일을 직접 바이너리로 컴파일하고, 생성된 ZIP 파일을 업로드하여 액션을 생성해야 합니다.
    바이너리를 생성하는 가장 쉬운 방법은 실행될 환경과 동일한 환경 내에서 빌드하는 것입니다. 간단한 예제를 통해 직접 바이너리를 생성하여 액션을 생성하는 순서를 확인하면 다음과 같습니다.

    1. 도커를 이용하여 Swift 액션 컨테이너를 실행해 주십시오.

      $ docker run --rm -it -v "$(pwd):/owexec" openwhisk/action-swift-v3.1.1 bash
      
      • 이 명령어를 통해 도커 컨테이너 안의 bash shell을 이용 가능
    2. 소스 코드를 복사하고 빌드를 준비해 주십시오.

      $ cp /owexec/hello.swift /swift3Action/spm-build/main.swift
      
      $ cat /swift3Action/epilogue.swift >> /swift3Action/spm-build/main.swift
      
      $ echo '_run_main(mainFunction:main)' >> /swift3Action/spm-build/main.swift
      
    3. 필요한 경우 Package.swift 파일을 만들고 의존 패키지들을 추가해 주십시오.

      import PackageDescription
      
      let package = Package(
      name: "Action",
          dependencies: [
              .Package(url: "https://github.com/apple/example-package-deckofplayingcards.git", majorVersion: 3),
              .Package(url: "https://github.com/IBM-Swift/CCurl.git", "0.2.3"),
              .Package(url: "https://github.com/IBM-Swift/Kitura-net.git", "1.7.10"),
              .Package(url: "https://github.com/IBM-Swift/SwiftyJSON.git", "15.0.1"),
              .Package(url: "https://github.com/watson-developer-cloud/swift-sdk.git", "0.16.0")
          ]
      )
      
      • example-package-deckofplayingcards 의존 패키지 추가
      • CCurl, Kitura-net, SwiftyJSON은 기본 Swift 액션에 포함되어 있으므로 Package.swift에 추가
    4. Package.swift를 spm-build 폴더에 복사해 주십시오.

      $ cp /owexec/Package.swift /swift3Action/spm-build/Package.swift
      
    5. spm-build 폴더로 이동하여 컴파일해 주십시오.

      $ cd /swift3Action/spm-build
      $ swift build -c release
      
    6. zip 파일을 생성하고 도커 컨테이너에서 빠져 나와 주십시오.

      $ zip /owexec/hello.zip .build/release/Action
      $ exit
      
      • hello.zip 파일은 hello.swift와 같은 폴더 내에 생성되어 있음
    7. 생성한 zip 파일을 업로드하여 helloSwifty라는 이름으로 새로운 액션을 생성해 주십시오.

      • 액션 실행 후 더 빨라진 속도 확인 가능

    이 문서가 도움이 되었습니까?

    What's Next
    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.