The Twelve-Factor App

12. 관리 프로세스(Admin processes)

관리 작업을 일회용 프로세스로 실행하기

프로세스 포메이션이란 어플리케이션이 실행되는 동안에 어플리케이션에서 처리되는 각각의 역할(예를 들어 웹 리퀘스트 처리, 백그라운드 작업 등)을 처리하기 위한 프로세스 집합을 일컫는다. 이러한 프로세스 이외에 프로그래머는 어플리케이션 관리나 유지보수를 위해 딱 한번만 실행되는 작업을 실행해야할 수도 있다. 아래와 같은 경우들이 일회성 작업의 예이다.

한 번만 실행되는 프로세스들은 장시간에 걸쳐 실행되는 프로세스들과 같은 환경에서 실행되어야한다. 이러한 프로세스는 특정 릴리스에 대해서 실행되어야한다. 이 때 이 릴리스에 대해서 실행되는 모든 프로세스들은 같은 코드설정을 사용해야한다. 관리 목적으로 사용되는 코드(스크립트)는 동기화 문제를 피하기 위해 어플리케이션과 함께 배포되어야한다.

또한 일반적인 어플리케이션 프로세스와 관리용 프로세스는 같은 의존성 분리 방법을 통해 실행되어야한다. 예를 들어 루비 웹 프로세스가 bundle exec thin start로 실행된다면, 데이터베이스 마이그레이션도 같은 디렉토리에서 bundle exec rake db:migrate 명령어를 통해서 실행되어야한다. 마찬가지로 파이썬 어플리케이션에서 Virtualenv를 사용하고 있다면, Tornado 웹서버는 가상환경에 있는 bin/python을 통해 실행되어야하며, 모든 manage.py를 사용하는 관리 명령어도 같은 bin/python을 사용해서 실행되어야 한다.

REPL을 사용하면 일회성 스크립트를 쉽게 실행할 수 있으며, 따라서 Twelve-factor App은 REPL을 잘 지원하는 언어를 선호한다. 로컬 배포에서 개발자는 일회성 관리 프로세스를 어플리케이션을 체크아웃한 디렉토리 안에서 직접 실행한다. 프로덕션 배포 시에는 SSH나 프로덕션 배포 환경이 제공하는 다른 원격 도구를 사용해 관리 프로세스를 실행할 수 있다.