12 Factors
PaaS를 제공하는 heroku에서 제시한 Cloud Native Architecute를 개발하거나 운영할 때 고려해야 할 항목
Basic code
- 버전을 제어하기 위한 목적
- 형상 관리를 위해 코드를 한 곳에서 관리
- 배포를 위한 코드의 통일적인 관리
Dependency isolation
- 각 마이크로 서비스는 전체 시스템에 영향을 주지 않고 변경될 수 있어야 한다.
Configurations
- 시스템 코드 외부에서 작업들을 제어할 수 있어야 함
Linkable backing services
- 메시징, 캐시 등을 이용해서 마이크로 서비스가 가져야 할 기능들을 추가로 지원해야 한다.
Stages of creation
- 빌드, 릴리즈, 실행 환경을 분리한다.
- 각각의 환경은 자동화된 시스템을 구축해야 하고, 이전 단계로 돌아갈 수 있어야 한다.
Stateless processes
- 독립적으로 실행되어야 한다.
- 필요한 자원이 있다면 외부와 데이터를 동기화해야 한다.
Port binding
Concurrency
- 부하 분산
- 수 많은 프로세스에 대해 동시성을 가져야 한다.
Disposability
- 서비스의 인스턴스가 삭제 가능해야 한다.
- Docker 등의 컨테이너를 이용하면 추가/삭제가 용이
Development & Production parity
- 수명 주기 전반에 걸쳐 다른 서비스와 종속되지 않아야 함
Logs
- 로그를 출력하는 로직은 어플리케이션과 분리되어야 한다.
- 모니터링 도구를 사용할 수 있다.
Admin processes for eventual processes
- 리소스가 어떻게 사용되는지 관리할 수 있는 도구가 있어야 한다.
- 리포트하고 분석할 수 있는 도구
+3 ?!
pivotal이 12 Factors에서 3가지 항목을 추가했다?!
API first
- 가지고 있는 모든 마이크로서비스에 대해 API로 제공되어야 한다.
- 사용자가 어떻게 쓸지를 우선해서 고려해서 개발해야 한다.
Telemetry
- 모든 지표는 수치화/시각화하여 제공되어야 한다.
Authentication and authorization
- 인증 제공이 필수적
- 적절한 인증을 가진 리소스를 통해 데이터가 제공되어야 한다.