주요 콘텐츠로 건너뛰기

12-Factor 앱: 최신 사례 및 Leapcell 가이드

The Twelve-Factor App은 견고하고 확장 가능하며 유지 관리가 용이한 최신 웹 애플리케이션을 구축하기 위한 방법론으로, 원래 Heroku 개발자가 제안했습니다. 클라우드 네이티브 시대의 앱 개발 및 운영의 공통 과제를 해결하기 위한 체계적인 프레임워크를 제공합니다.

12가지 요소를 따르면 개발자는 지속적인 배포, 높은 이식성, 원활한 확장에 최적화된 애플리케이션을 만들 수 있습니다.

Leapcell은 12-Factor App 원칙에 따라 설계되었습니다. 이러한 원칙을 따르면 Leapcell 기능을 활용하여 애플리케이션을 보다 효율적으로 구축 및 배포할 수 있습니다.

이 문서는 고전적인 12가지 요소를 기반으로 Leapcell 플랫폼에서 현대적인 해석과 모범 사례를 보완하는 것입니다.


12-Factor의 현대적 해석과 Leapcell의 사례

TL;DR

#Factor개요Leapcell 사례
ICodebase for One Service앱 1개당 리포지토리 1개, 여러 번 배포리포지토리 1개당 서비스 1개; Git 기록 명확화
IIDeclare Dependencies종속성을 명시적으로 선언매니페스트 파일 사용 + 필요한 경우 build.sh로 빌드 통합
IIIEnv as Config설정을 코드에서 분리하고 환경 변수로 주입로컬에서는 .env 사용; 플랫폼에서 자동으로 환경 변수 주입
IVBacking Services외부 서비스는 플러그 가능한 리소스로 취급/tmp 쓰기 가능한 서버리스 서비스; PostgreSQL, Redis, 객체 스토리지 제공
VBuild, Release, Run빌드, 릴리스, 실행 분리프로덕션 브랜치에서 빌드/릴리스 자동 트리거; CI/CD 워크플로
VIStateless Processes프로세스는 상태가 없어야 함상태 비저장 설계로 수평 확장 가능
VIIPort Binding포트에 바인딩하여 서비스 제공구성된 포트로 외부 트래픽 라우팅
VIIIConcurrency프로세스를 추가하여 확장트래픽에 따라 서버리스 인스턴스 자동 확장
IXDisposability빠른 시작/정상 종료응답이 없는 프로세스는 SIGKILL 전송; 앱에서 정리 가능
XDev/prod Parity개발/스테이징/프로덕션을 최대한 일치동일한 코드베이스; 브랜치 + env.local로 환경별 설정
XILogs로그는 이벤트 스트림으로 취급중앙 집중식 로그 관리; stdout에 이벤트 스트림 출력
XIIAdmin Processes관리 작업은 일회성으로 실행빌드 중 또는 수동으로 실행; 사전 시작 명령은 제공되지 않음

I. Codebase for One Service

하나의 코드베이스로 수정 버전을 관리하고 여러 번 배포합니다.

애플리케이션 코드는 단일 리포지토리에서 관리해야 합니다. 여러 환경이 있더라도 동일한 코드베이스에서 파생되어야 합니다.

Leapcell 배포 모델은 이 원칙에 기반합니다. "리포지토리당 1개 서비스"를 권장하며, Git 기록을 명확히 하고 프로젝트 관리를 간소화할 수 있습니다.

II. Declare Dependencies in a Manifest File

매니페스트에서 종속성을 명시합니다.

종속성은 매니페스트(package.json, requirements.txt)에 명시적으로 선언하고 적절한 분리 도구로 관리합니다.

종속성 관리는 서비스 이식성을 위해 중요합니다. 복잡한 빌드의 경우 build.sh를 만들어 절차를 통합하는 것이 좋습니다.

III. Env as Config

설정은 환경에 저장합니다.

설정(DB URL, API 키 등)은 코드에서 분리하고 환경 변수로 주입합니다.

로컬 개발에서는 .env를 사용합니다. Leapcell에서는 설정된 환경 변수가 런타임에 자동으로 주입되어 로컬과 프로덕션 간의 전환이 원활합니다.

IV. Backing Services

백엔드 서비스는 플러그 가능한 리소스로 취급합니다.

네트워크를 통해 사용하는 서비스는 URL 또는 인증 정보로 연결합니다.

Leapcell 서버리스는 /tmp를 제외하고 읽기 전용 FS입니다. 상태를 외부화하여 고속 동적 스케줄링이 가능합니다. PostgreSQL, Redis, 객체 스토리지도 제공합니다.

V. Build, Release, Run

빌드, 릴리스, 실행을 분리합니다.

릴리스는 변경할 수 없으며 쉽게 롤백할 수 있습니다. CI/CD로 자동화합니다.

프로덕션 브랜치에 커밋하면 빌드/릴리스가 자동으로 트리거됩니다. 최신 코드를 프로덕션에 배포합니다.

VI. Stateless Processes

앱은 상태 비저장 프로세스로 실행합니다.

영구 보관해야 하는 데이터는 백엔드 서비스에 저장합니다.

상태 비저장 설계로 수평 확장이 용이합니다. Leapcell 서버리스는 이를 지원합니다.

VII. Port Binding

포트 바인딩으로 서비스를 제공합니다.

플랫폼은 설정된 포트로 외부 트래픽을 라우팅합니다.

VIII. Concurrency

수평 확장으로 부하에 대응합니다.

트래픽에 따라 서버리스 인스턴스가 자동으로 확장됩니다.

IX. Disposability

빠른 시작과 정상 종료로 견고성을 향상합니다.

응답이 없는 프로세스는 SIGKILL입니다. 앱은 필요한 정리를 처리할 수 있습니다.

X. Dev/prod Parity

개발, 스테이징, 프로덕션을 최대한 일치시킵니다.

동일한 코드베이스, 브랜치 + env.local로 환경별 설정을 합니다.

XI. Logs

로그는 이벤트 스트림으로 취급합니다.

모든 로그는 중앙 집중식으로 관리되고 stdout에 출력되어 분석할 수 있습니다.

XII. Admin Processes

관리 작업은 일회성으로 실행합니다.

Leapcell은 사전 시작 명령이 없습니다. 빌드 중 또는 수동으로 실행할 수 있습니다.