앱 개발

앱 개발부터 시작

여기에서는 앱 개발과 Shotgun Pipeline Toolkit이 새 도구 개발 시 일을 어떻게 좀 더 쉽게 만들어 주는지 간단히 소개합니다.

소개

Shotgun Pipeline Toolkit은 Shotgun 소프트웨어가 관리하는 앱과 엔진의 모음일 뿐 아니라 커스텀 파이프라인 도구를 빠르고 쉽게 빌드할 수 있도록 해 주는 프레임워크이자 개발 플랫폼이기도 합니다! 이 문서에서는 이 두 경우의 워크플로우를 알아보고, 앱 개발과 관련한 몇 가지 기본 사항에 대해 설명합니다.

Shotgun 소프트웨어를 통해 관리 및 릴리즈되는 모든 앱과 엔진은 오픈 소스이며, github(https://github.com/shotgunsoftware)에서 찾아볼 수 있습니다.

초보자 앱 템플릿

새 앱을 시작할 때에는 https://github.com/shotgunsoftware/tk-multi-starterapp을 방문해 초보자 앱을 살펴보는 것이 좋습니다! 초보자 앱은 새 앱 빌드 시 시작점으로 활용할 수 있는 "빈" 앱입니다. 이 앱을 사용하면 본인에게 맞게 설정된 모든 표준 툴킷 보일러플레이트 코드를 가져올 수 있습니다.

기존 앱을 활용한 개발

모든 Shotgun 툴킷 앱은 오픈 소스이기 때문에 이 소스 코드를 보다 발전된 앱 개발을 위한 기반으로 사용해도 됩니다. 아주 중요한 기능이 누락되어 있는 기본 앱을 발견하면 github에서 이를 복제해 자체적으로 개발을 진행해볼 수 있습니다! 저희는 풀 리퀘스트(pull request)를 환영합니다. 다른 사람에게도 도움이 될 만한 변경 사항이 있다면 주저하지 말고 풀 리퀘스트로 알려 주십시오. 그러면 앱의 메인 버전에 적용할 수 있습니다.

누락되었다고 생각하는 기능이 전반적으로 유용한 기능이라고 생각한다면 support@shotgunsoftware.com 주소로 알려 주시기 바랍니다. 물론 그 수정 사항이 이미 계획하고 있던 것이거나 다른 고객이 처리한 것이거나 아니면 같은 동작을 수행하는 다른 방법이 있을 수도 있습니다! 저희는 고객 여러분이 앱의 현재 버전에서 누락되었다고 느끼는 것이 무엇인지 그 의견을 듣고 싶습니다.

새 앱을 처음부터 생성

이 섹션에서는 초보자 템플릿을 사용하여 새 앱을 생성하는 방법을 살펴봅니다. 여러분이 이미 github 및 git 워크플로우에 익숙하다고 가정하기는 하지만 git을 소스 관리 솔루션으로 사용하고 있지 않더라도 툴킷 개발은 얼마든지 진행할 수 있습니다.

개발 샌드박스 생성

시작하기 전에 프로젝트 구성을 복제하여 개발 샌드박스를 설정하는 것이 좋습니다. 이렇게 하면 프로덕션에 포함된 다른 누구에게도 영향을 미치지 않고 개발 및 변경 사항 적용(및 파기!)을 수행할 수 있는 별도의 구성이 만들어집니다. 구성 복제에 관한 자세한 정보는 다음 문서에서 확인할 수 있습니다.

초보자 앱 리포지토리 분기(fork) 또는 다운로드

시작하는 가장 쉬운 방법은 초보자 앱을 분기(fork)하는 것입니다. 위치: https://github.com/shotgunsoftware/tk-multi-starterapp

아직 git 소스 제어를 사용하고 싶지 않다면 github에서 zip 파일을 다운로드해서 디스크에 압축을 풀면 됩니다. 나중에 다시 git(또는 다른 소스 제어 패키지)에 추가하는 것은 쉽습니다. git 리포지토리가 필요하다는 것을 이미 알고 있다면 초보자 앱 리포지토리를 자신의 git 서버로 분기(fork)한 다음, 로컬 개발 영역으로 컨텐츠를 체크아웃할 수도 있습니다. 어느 방식을 사용하든 로컬 개발 영역에 초보자 앱 코드를 가져와 개발을 시작할 수 있도록 하는 것이 목표입니다.

매개변수 및 프레임워크 추가

이 단계에서 프레임워크 사용법을 알고 있거나 필요한 특정 매니페스트 매개변수가 있다면 바로 지금 설정하면 됩니다! 앱을 환경에 설치하는 다음 단계에서는 시스템이 자동으로 모든 구성을 처리하기 때문입니다.

예를 들어, 위젯 및 Shotgun 유틸리티 프레임워크를 앱에 사용하기로 한다면 다음을 info.yml 매니페스트에 추가하십시오.

# the frameworks required to run this app
frameworks:
    - {"name": "tk-framework-shotgunutils", "version": "v2.x.x"}
    - {"name": "tk-framework-qtwidgets", "version": "v1.x.x"}

최소한으로 필요한 프레임워크 버전

최소한으로 필요한 프레임워크 버전이 있다면 minimum_version 설정을 info.yml 매니페스트에서 사용할 수 있습니다.

# the frameworks required to run this app
frameworks:
    - {"name": "tk-framework-shotgunutils", "version": "v2.x.x"}
    - {"name": "tk-framework-qtwidgets", "version": "v1.x.x", "minimum_version": "v1.5.0"}

위 내용은 tk-framework-qtwidgetsv1.5.0을 앱에 사용할 수 있도록 해줍니다. 그렇지 않으면 앱이 시작 시 로드되지 않고, 콘솔에 오류가 표시됩니다. tank updates를 사용하여 앱을 업데이트하면 구성되어 있는 프레임워크 중 최소한으로 필요한 버전을 충족하지 않는 프레임워크는 자동으로 앱과 함께 업데이트됩니다.

프레임워크와 그 유용성에 대한 자세한 정보는 다음 링크에서 확인하십시오.

새 리포지토리를 환경에 추가

이제 이 앱을 툴킷 내에서 시작하고 실행해 보겠습니다!

개발 샌드박스에는 이 특정 구성을 처리하는 데 사용할 수 있는 특정 tank 또는 tank.bat 바이너리가 있습니다. 터미널을 열고 개발 샌드박스로 이동합니다. 로컬 tank 명령을 사용하면서 install_app 명령을 실행합니다. 앱을 설치할 때에는 이를 설치할 환경과 엔진을 선택해야 합니다. 엔진은 tk-maya, tk-nuke 등 실행하게 될 응용프로그램입니다. 환경은 특정 작업 영역을 위해 실행하려는 도구의 모음입니다. 기본 구성에서는 샷 작업을 하는 경우 환경을 shot_step이라 부르고, 에셋 작업을 하는 경우 환경을 asset_step이라고 부릅니다.

예를 들어, 새 앱 코드를 /Users/manne/dev/tk-multi-mynewapp에 배치하는 경우에는 이를 설치하기 위해 다음을 실행하게 됩니다.

> cd /your/development/sandbox
> ./tank install_app shot_step tk-maya /Users/manne/dev/tk-multi-mynewapp

앱이 필요로 하는 모든 프레임워크는 설치 명령을 통해 자동으로 설치됩니다. 이제 막 설치한 환경에 대해 Maya를 시작하면 메뉴에 초보자 앱이 나타나야 합니다!

템플릿 초보자 앱의 해부 구조

https://github.com/shotgunsoftware/tk-multi-starterapp에서 찾을 수 있는 템플릿 초보자 앱에는 다음 기본 구조가 포함되어 있습니다.

  • 앱 진입점 및 메뉴 등록은 app.py 파일에서 찾을 수 있습니다. 이 파일에서 보통 클래스를 설정하고, 항목을 초기화하고, 메뉴 항목을 등록합니다.
  • 매니페스트는 이 앱이 설치될 때 필요한 다양한 모든 설정을 정의합니다. 대개 설정은 재사용 가능한 앱을 원하고, 앱 자체에서는 어떠한 값도 하드 코딩하고 싶지 않은 경우 유용합니다.
  • dialog.py에는 메인 앱 창을 생성하는 로직 및 이벤트 콜백 등이 포함되어 있습니다.
  • dialog.py는 UI 폴더에 상주하는 자동 생성된 위젯 파일에 로드됩니다. 이 파일에는 대화상자 UI의 기본 레이아웃 및 특성이 모두 포함되어 있습니다.
  • 리소스 폴더에 있는 dialog.ui 파일은 사용자가 열어서 앱의 모양을 빠르게 디자인하고 정의하는 데 사용할 수 있는 QT Designer 파일입니다. 변경 사항을 처리하고 나면 빌드 스크립트를 실행하여 UI 파일을 Python 코드로 변환해야 합니다.

개발 진행

이제 개발 준비가 모두 끝났습니다! 편리하게도 구성에 하나 이상의 개발 항목이 준비되는 즉시 툴킷이 자동으로 Reload 및 Restart 옵션을 Maya, Nuke 등의 내부 메뉴에 추가합니다. 이 옵션을 클릭하면 구성과 코드가 다시 로드되고, 엔진이 다시 시작됩니다. 즉, Maya를 일단 시작하고, 시도해 보려는 코드나 구성 변경을 적용할 때마다 다시 로드 및 다시 시작 버튼을 누르기만 하면 변경 사항을 끌어오는 과정을 빠르게 반복할 수 있습니다. 화면에 활성 상태인 UI가 있는 경우 이 UI는 자동으로 업데이트되지 않으며, 메뉴에서 해당 UI로 이동하여 다시 실행해 주어야 합니다.

테스트 진행

코드를 테스트하려면 간단히 다른 사용자들을 Shotgun의 파이프라인 구성 항목에 추가하여 여러분의 개발 샌드박스로 초대하면 됩니다. 추가된 사용자들은 곧바로 Shotgun 내부 메뉴에서 새 항목을 볼 수 있습니다.

그러면 한 예로 개발 샌드박스에 연결되어 있는 Maya 실행 메뉴 항목을 클릭할 수 있습니다. Maya가 시작되면 사용자들은 이를 여러분의 구성에서 실행하게 되고, 여러분이 진행 중인 작업을 여러분이 보는 방식과 동일하게 확인할 수 있습니다. 참고: 사용자들이 앱 코드에도 액세스하여 볼 수 있도록 해야 합니다. 그렇지 않으면 앱이 로드되지 않습니다.

첫 번째 릴리즈 준비

첫 번째 릴리즈를 진행할 준비가 되었다면 소스 제어를 사용하여 변경 사항이 트래킹되도록 하는 것이 좋습니다(이미 그렇게 한 것이 아니라면). 툴킷은 처음부터 git(http://git-scm.com/)을 지원하기 때문에 이를 사용하는 것이 좋습니다. 이 문서의 나머지 부분에서는 git 사용에 익숙하며 컴퓨터에 설정되어 있다고 가정합니다.

이제 앱에 대한 git 리포지토리가 설정되어 있을 것입니다. 그렇지 않으면 지금 생성하고 첫 번째 커밋을 푸시하십시오. 툴킷 git 리포지토리에는 단일 앱만 포함되어야 합니다. 기본적으로 git 리포지토리는 원본 코드를 가져온 초보자 앱 리포지토리와 구조가 같아야 합니다.

개발을 진행할 때에는 툴킷이 환경 파일 내에 다음과 같은 형식의 개발 위치를 사용합니다.

location: {path: /Users/manne/dev/tk-multi-mynewapp, type: dev}

이렇게 하면 코드를 변경하고 싶은 경우에는 언제든지, 툴킷이 개발에 용이한 지정된 위치의 디스크에서 직접 앱 코드를 로드하게 됩니다.

릴리즈한 소프트웨어의 경우 항목들이 안전하고 쉽게 업그레이드될 수 있도록 버전이 지정되었는지 확인해야 합니다. 모든 툴킷의 기본 제공 앱은 툴킷 앱 스토어를 사용하여 업데이트 및 릴리즈를 트래킹하고, 다음과 비슷한 형식의 위치 태그를 갖게 됩니다.

location: {name: tk-multi-setframerange, type: app_store, version: v0.1.7}

이 태그를 통해 툴킷(예: tank updates 명령)은 업데이트가 있으면 이를 확인하여 매우 안전한 방식으로 구성을 업데이트 및 관리할 수 있습니다. 새 버전이 나올 때마다 툴킷은 코드를 자동으로 다운로드하여, 디스크의 로컬 "앱 캐시"에 배치하고, 사용자들이 여기에 액세스할 수 있는지 확인합니다.

내부 도구의 경우 같은 원리를 이용하면 되지만 툴킷 앱 스토어 대신 git의 태그를 사용하면 됩니다. 즉, 새 앱의 경우 새 태그를 생성하여 git에 푸시하십시오. 초보자 앱을 복제한 경우에는 이미 태그가 정의되어 있습니다. 태그를 생성할 때에는 유의적 버전을 사용하는 것이 좋습니다(http://semver.org 참조). 툴킷은 이 버전 번호를 사용하여 어느 버전이 최신인지 판단하고, 규칙 vX.Y.Z를 준수함으로써 앱 버전이 툴킷과 호환됩니다.

프로덕션 구성에 변경 사항 설치

git에 첫 번째 태그를 생성하고 나면(예: v1.0.0) 이를 프로덕션 구성에 안전하게 설치할 수 있습니다. 즉, 프로덕션에 포함된 모두가 새 도구에 액세스할 수 있게 됩니다. 앱 설치는 앱 설치 명령을 통해 이루어집니다. 설치 명령을 실행할 때에는 기본 프로덕션 구성에 속한 tank 명령을 사용하고 있는지 확인하십시오.

> cd /your/primary/tank/configuration
> ./tank install_app shot_step tk-maya user@remotehost:/path_to/tk-multi-mynewapp.git

이렇게 하면 git에서 가장 높은 버전 태그를 찾아 환경에 설치합니다. 설치하고 나면 tank updates를 간단히 실행할 수 있고, 새 태그가 생성되었다면 업그레이드할지 묻는 메시지가 나타납니다. 이제 워크플로우는 공식 앱 스토어 앱의 경우와 동일합니다.

기존 앱 수정

빈 초보자 템플릿으로 시작하는 것보다 기존 앱(예: Shotgun 소프트웨어의 표준 앱 중 하나)에 마이너한 기능을 추가하는 것이 좋을 때도 있습니다. 수정된 버전의 앱으로 작업할 때에는 보통 소스 앱과 비교하여 차이점을 '트래킹'하면서 변경 사항이나 버그 픽스를 정기적으로 끌어오는 방식을 사용합니다.

이러한 유형의 개발을 진행할 때에는 부모 코드를 픽업한 다음 일부 변경 사항을 적용하고, 이를 파이프라인에 릴리즈합니다. 릴리즈는 실질적으로 앱의 기본 버전과 여러분이 적용한 로컬 변경 사항으로 구성됩니다. 기존 버전 번호에 버전 접미사를 추가하는 것이 좋습니다. 이렇게 하면 툴킷과 매끄럽게 연동되고, 비교적 직관적인 방법입니다. 다음 워크플로우는 진행 방식을 보여 주는 것입니다.

  • 부모 앱을 분기(fork)하고, 자체 리포지토리를 생성합니다. 분기(fork)를 통해 모든 git 태그를 가져옵니다. 최신 태그는 v0.2.12라고 불리고, 마스터 분기는 기본적으로 이 태그의 컨텐츠와 동일합니다.
  • 변경 사항을 적용하고 마스터로 커밋합니다. 이제 기본적으로 v0.2.12 및 변경 사항이 준비되었습니다. 이를 프로덕션으로 릴리즈할 때 태그를 생성해야 합니다. 태그 이름을 v0.2.12.1로 지정하여 코드가 v0.2.12를 기반으로 하고 있으며, 이것이 첫 번째 릴리즈임을 나타냅니다.
  • 누군가가 수정 사항에서 버그를 발견합니다. 버그를 수정하고, 태그를 지정한 다음 v0.2.12.2를 릴리즈합니다.
  • 다수의 중요한 버그 픽스가 부모 리포지토리에 릴리즈되었습니다. 이를 여러분의 리포지토리로 끌어옵니다. 이제 가장 최신 태그는 부모 리포지토리에서 이루어진 릴리즈로 인해 v0.2.15가 됩니다. 변경 사항을 마스터와 병합하고, 테스트합니다. 이제 기본적으로 부모 앱 v0.2.15에 변경 사항이 병합됩니다. v0.2.15.1에 태그를 지정합니다.

위에서 설명한 태그 지정 체계를 따르면 툴킷 업데이트가 올바로 작동하고, 분기(fork)의 각 태그가 어느 코드를 기반으로 하고 있는지 빠르고 쉽게 확인할 수 있습니다.

설명서 자료

이 문서와 별개로 앱 개발 시 유용하게 참고할 수 있는 다양한 설명서 자료가 있습니다.

Core API 참조 설명서에는 컨텍스트, 파일 시스템 템플릿, 기타 시스템 내 핵심 메커니즘을 조작하는 데 사용하는 모든 명령이 포함되어 있습니다.

플랫폼 API 참조 설명서는 엔진 및 앱 기본 클래스를 다루고 있으며, 앱 코드를 작성할 때 어떤 옵션이 있는지 자세한 정보를 포함합니다.

앱 구성 참조 설명서는 앱의 매개변수 및 구성을 설정할 수 있는 다양한 방법을 다룹니다.

툴킷에 대한 대화식 액세스

단지, 대화식으로 툴킷을 다뤄보고 싶다면 툴킷 엔진을 시작한 다음 예시 Nuke 또는 Maya 내부에서 간단한 동작을 해보면서 Shotgun 메뉴를 확인하면 됩니다. 현재 실행 중인 엔진을 통해 모든 툴킷에 액세스할 수 있으며, 이 엔진은 다음과 같이 Maya 또는 Nuke의 Python 셸 내부에서 검색할 수 있습니다.

import sgtk
engine = sgtk.platform.current_engine()

엔진에 액세스하고 나면 현재 로드된 환경의 대부분의 다른 요소에도 접근할 수 있습니다.

# A Shotgun API instance
engine.shotgun

# The toolkit API instance
engine.sgtk

# The current work area object
engine.context

# All the apps currently loaded
engine.apps

tank 명령에 액세스할 수 있는 명령 셸에 있는 경우 간단히 tank shell 명령을 실행하여 대화식 Python 세션을 열 수 있습니다. 툴킷은 가능한 한 많은 시스템을 시작하려고 하지만 컨텍스트에 따라 액세서 세트는 제한될 수 있습니다.

> tank Shot ABC123 shell

Welcome to the Shotgun Pipeline Toolkit!
For documentation, see https://support.shotgunsoftware.com
Will search across all Shotgun Projects.
- Found Shot ABC123 (Project 'Chasing the Light')
- Using configuration 'Primary' and Core v0.14.214
- Setting the Context to Shot ABC123.
- Started Shell Engine version v0.3.4
- Environment: /mnt/software/tank/chasing_v2/config/env/shot.yml.
- Running command shell...

----------------------------------------------------------------------
Command: Shell
----------------------------------------------------------------------

Welcome to Shotgun Pipeline Toolkit Python!
2.7.1 (r271:86832, Jul 31 2011, 19:30:53) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)]
Running on darwin

- A tk API handle is available via the tk variable
- A Shotgun API handle is available via the shotgun variable
- Your current context is stored in the context variable
- The shell engine can be accessed via the engine variable
>>>

툴킷 셸은 빠른 디버깅을 수행하거나 작은 스크립트 조각을 실행하고 싶을 때 유용합니다.

Big Buck Bunny - footage 제공: (CC) Blender Foundation, www.blender.org
팔로우

0 댓글

댓글을 남기려면 로그인하세요.