12가지 요소 앱: 최신 사례 및 Leapcell 가이드
The Twelve-Factor App은 견고하고 확장 가능하며 유지 관리 가능한 최신 웹 애플리케이션 구축을 위한 방법론으로, 원래 Heroku의 개발자들이 제시했습니다. 특히 클라우드 네이티브 시대에 애플리케이션 개발 및 운영에서 흔히 발생하는 문제를 해결하기 위한 제도적 프레임워크를 제공합니다.
이 12가지 요소를 따르면 개발자는 지속적인 배포, 높은 이식성 및 원활한 확장에 최적화된 애플리케이션을 만들 수 있습니다.
Leapcell은 12가지 요소 앱 플랫폼으로 설계되었습니다. Twelve-Factor 방법론을 따르면 Leapcell의 기능을 활용하여 애플리케이션을 보다 효율적으로 구축하고 배포할 수 있습니다.
이 문서는 기존의 12가지 요소를 기반으로 Leapcell 플랫폼의 최신 해석 및 우수 사례를 추가하여 보완된 것입니다.
12가지 요소 현대적 해석 및 Leapcell 사례
I. 하나의 서비스를 위한 코드베이스
리비전 컨트롤에서 추적되는 하나의 코드베이스, 많은 배포.
애플리케이션의 모든 코드는 Git과 같은 버전 제어 시스템을 사용하여 단일 저장소에 저장되어야 합니다. 여러 배포 환경(예: 개발, 프로덕션)이 존재할 수 있지만 모두 동일한 코드베이스에서 시작되어야 합니다.
Leapcell의 배포 모델은 근본적으로 이 원칙에 기반합니다. Git 커밋 기록의 명확성을 높이고 프로젝트 관리 및 이해를 크게 단순화하는 “리포지토리당 하나의 서비스”라는 모범 사례를 옹호합니다.
II. 매니페스트 파일에서 종속성 선언
매니페스트 파일에서 종속성을 명시적으로 선언합니다.
모든 종속성은 매니페스트 파일(예: package.json
, requirements.txt
)을 통해 명시적으로 선언하고 적절한 격리 도구를 사용하여 관리해야 합니다.
정확한 종속성 관리는 서비스 이식성을 보장하는 데 매우 중요합니다. 빌드 프로세스가 복잡한 경우(예:
apt-get
을 통한 시스템 패키지와pip
을 통한 언어별 라이브러리 모두 필요)build.sh
스크립트를 생성하여 빌드 단계를 통합하고 일관된 환경을 보장하는 것이 좋습니다.
III. 환경 변수를 구성으로 사용
환경에 구성을 저장합니다.
구성(예: 데이터베이스 URL, API 키)을 코드와 엄격하게 분리하고 환경 변수를 통해 주입합니다.
최신 모범 사례는 로컬 개발에
.env
파일을 사용하는 것입니다. Leapcell 플랫폼에서 구성된 환경 변수는 런타임 환경에 자동으로 주입되므로 애플리케이션이 원활하게 액세스하고 로컬에서 프로덕션으로 원활하게 전환할 수 있습니다.
IV. 백업 서비스
백업 서비스를 연결된 리소스로 취급합니다.
앱이 네트워크를 통해 사용하는 모든 서비스(예: 데이터베이스 또는 캐시)는 구성에 저장된 URL 또는 자격 증명을 통해 연결된 플러그 가능 리소스로 취급해야 합니다.
Leapcell의 서버리스 서비스는
/tmp
디렉토리를 제외하고 읽기 전용 파일 시스템을 특징으로 하는 이 철학을 구현합니다. 이 설계는 상태의 외부화를 강제하여 인프라의 고속 동적 스케줄링을 가능하게 하고 최대 속도로 컴퓨팅 리소스가 프로비저닝되도록 보장합니다. 또한 Leapcell은 상태 지속성의 부담을 효과적으로 줄이기 위해 가용성이 높은 PostgreSQL, Redis 및 객체 스토리지 서비스를 제공합니다.
V. 빌드, 릴리스, 실행
빌드, 릴리스, 실행 단계를 엄격하게 분리합니다.
이러한 분리를 통해 릴리스가 변경 불가능하고 쉽게 롤백할 수 있습니다. 최신 CI/CD 파이프라인은 이 프로세스를 자동화하여 빠르고 안정적인 배포를 가능하게 합니다.
Leapcell은 프로덕션 브랜치(예:
main
)와 개발 브랜치 간의 명확한 구분을 권장합니다. 프로덕션 브랜치에 대한 모든 새 커밋에 대해 Leapcell은 자동으로 새 빌드 및 릴리스를 트리거하여 최신 코드를 프로덕션에 배포하고 CI/CD 워크플로를 완전히 수용합니다.
VI. 상태 비저장 프로세스
앱을 하나 이상의 상태 비저장 프로세스로 실행합니다.
애플리케이션은 “공유하지 않 음” 상태 비저장 프로세스로 실행되어야 합니다. 유지해야 하는 모든 데이터는 상태 저장 백업 서비스에 저장해야 합니다.
이 원칙은 빠른 수평 확장을 달성하고 상태 손실 없이 언제든지 프로세스를 시작하거나 중지할 수 있도록 하는 데 매우 중요합니다. Leapcell의 서버리스 서비스는 이를 염두에 두고 설계되어 상태 비저장 프로세스의 원활한 확장 및 관리를 가능하게 합니다.
VII. 포트 바인딩
포트 바인딩을 통해 서비스를 내보냅니다.
애플리케이션은 자체 포함되어 있어야 하며 포트에 바인딩하여 요청을 수신해야 합니다.
플랫폼은 외부 트래픽의 라우팅을 관리하기 위해 애플리케이션 구성에서 제공하는 포트를 사용합니다.
VIII. 동시성
프로세스 모델을 통해 확장합니다.
단일 프로세스를 더 강력하게 만드는 수직적 확장 대신 수평적 확장(더 많은 프로세스 추가)을 통해 증가된 부하를 처리합니다.
Leapcell의 서버리스 모드는 들어오는 트래픽을 기반으로 인스턴스를 자동으로 확장하여 최적의 리소스 활용률과 응답성을 보장하고 상태 비저장 프로세스 모델의 이점을 활용합니다.