12 Factor App이란? 클라우드 네이티브 앱 설계 원칙

12 Factor App의 정의

12 Factor App은 2011년 Heroku의 엔지니어들이 정리한 애플리케이션 설계 방법론으로, 클라우드 환경에서 확장 가능하고 유지보수하기 쉬운 SaaS 앱을 만들기 위한 12가지 원칙을 담고 있습니다. 특정 언어나 프레임워크에 종속되지 않는 일반적인 가이드라인이며, 오늘날 마이크로서비스와 컨테이너 기반 아키텍처의 이론적 토대로 널리 인용됩니다.

쉽게 비유하면 ‘이사 다니기 쉬운 집’을 짓는 규칙과 같습니다. 가구가 벽에 못으로 고정되어 있지 않고, 필요한 물건은 목록으로 정리되어 있으며, 언제든 다른 곳으로 옮겨도 문제없이 생활할 수 있는 구조를 만드는 것이 핵심입니다.

핵심 원칙과 동작 예시

12가지 항목 중 실무에서 특히 자주 언급되는 원칙들은 다음과 같습니다.

  • Codebase: 하나의 앱은 하나의 코드베이스(Git 저장소)로 관리하고, 여러 환경에 동일한 코드를 배포합니다.
  • Config: 데이터베이스 접속 정보나 API 키 같은 설정값은 코드에 하드코딩하지 않고 환경변수로 분리합니다. 예를 들어 ‘DATABASE_URL’ 값을 코드에 직접 쓰는 대신 환경변수로 주입하면, 운영 환경마다 코드를 수정할 필요가 없습니다.
  • Dependencies: 필요한 라이브러리는 ‘package.json’이나 ‘requirements.txt’ 같은 파일로 명시적으로 선언해, 어떤 서버에서든 동일하게 설치되도록 합니다.
  • Processes: 앱은 상태를 갖지 않는(stateless) 프로세스로 실행되어야 하며, 세션 정보 같은 상태는 Redis 같은 외부 저장소에 보관합니다.
  • Disposability: 프로세스는 빠르게 시작되고 종료될 수 있어야 하며, 이는 오토스케일링이나 배포 시 안정성을 높여줍니다.
  • Logs: 로그를 파일로 직접 관리하지 않고 표준 출력(stdout)으로 흘려보내, 로그 수집 시스템이 처리하도록 위임합니다.

실무에서 왜 중요한가

이 원칙들이 실무에서 중요한 이유는 컨테이너와 쿠버네티스 같은 클라우드 네이티브 인프라의 동작 방식과 정확히 맞닿아 있기 때문입니다. 예를 들어 쿠버네티스는 파드를 언제든 새로 만들고 없앨 수 있다는 전제로 동작하는데, 앱이 stateless하지 않으면 파드가 재시작될 때 데이터가 유실될 수 있습니다.

또한 Config를 환경변수로 분리해두면 개발, 스테이징, 운영 환경에 동일한 컨테이너 이미지를 그대로 배포할 수 있어 ‘내 로컬에서는 되는데 서버에서는 안 된다’는 문제를 크게 줄일 수 있습니다. 결국 12 Factor App은 특정 기술 스택이 아니라, 클라우드 환경에서 안정적으로 확장하고 배포하기 위한 사고방식에 가깝습니다.

댓글 남기기