이 문서에 기여한 사람들은 수백개 앱의 개발과 배포에 직접 참여했으며, Heroku 플랫폼을 통해서 방대한 앱의 개발, 운영, 확장을 간접적으로 관찰했다.
이 문서는 실제로 쓰이는 다양한 SaaS 앱에 대한 경험과 관찰을 종합한 결과물이다. 특히 시간이 지나면서 앱이 유기적으로 성장하는 부분, 앱 코드베이스에서 작업하는 개발자들 간의 협업, 시간이 지나면서 망가지는 소프트웨어 유지비용을 줄이는 법에 집중하여 이상적인 앱 개발 방법을 찾고자 했다.
- Codebase코드베이스
One codebase
tracked in revision control, many deploys
- 버전 관리되는 하나의 코드베이스와 다양한 배포
- Dependencies종속성
- Explicitly
declare and isolate
dependencies
- 명시적으로 선언되고 분리된 종속성
- Config 설정
- Store
config in the environment
- 환경(environment)에 저장된 설정
- Backing services 백엔드 서비스
- Treat backing services as
attached resources
- 백엔드 서비스를 연결된 리소스로 취급
- Build, release, run 빌드, 릴리즈, 실행
- Strictly
separate build and run stages
- 철저하게 분리된 빌드와 실행 단계
- Processes 프로세스
- Execute the app as one or more
stateless processes
- 애플리케이션을 하나 혹은 여러개의 무상태(stateless) 프로세스로 실행
- Port binding 포트 바인딩
- Export services via
port binding
- 포트 바인딩을 사용해서 서비스를 공개함
- Concurrency 동시성
Scale out
via the process model
- 프로세스 모델을 사용한 확장
- Disposability 폐기 가능
- Maximize robustness with
fast startup and graceful shutdown
- 빠른 시작과 그레이스풀 셧다운을 통한 안정성 극대화
- Dev/prod parity 개발/프로덕션환경 일치
- Keep development, staging, and production
as similar as possible
- 개발, 스테이징, 프로덕션 환경을 최대한 비슷하게 유지
- Logging 로그
- Treat logs as
event streams
- 로그를 이벤트 스트림으로 취급
- Admin processes Admin 프로세스
- Run admin/management tasks as
one-off processes
- admin/maintenance 작업을 일회성 프로세스로 실행

