12 Factors

클라우드 네이티브 어플리케이션을 개바하거나 서비스를 운영할 때 고려해야 될 항목을 정리 한 것
Heroku라는 회사에서 자사의 고객들을 상대로 클라우드 서비스 시 발생했던 문제점이라든가 개선점
그리고 시행착오를 바탕으로 해서 이러한 가이드라인을 만들어서 배포를 했다고 함
12 Factors에서는 코드의 통합, 종속성의 배제, 환경설정에 대해서 외부관리, 백업서비스의 분리, 개발환경과 테스트, 운영환경의 통일성 유지, 로그의 분리, 관리 프로세스 등 소개를 하고있음
1. Base Code - 코드베이스
- 하나의 애플리케이션에는 하나의 코드베이스를 사용한다.
- 그런 코드베이스에 의해서 여러 배포 환경으로부터 분기가 가능하도록 구축하는 것이 좋다.
2. Dependency Isolation - 의존성
- 외부 라이브러리라든가 패키지는 명시적으로 선언하고 환경에 독립적으로 관리해야 된다.
3. Configuration - 설정 정보
- 설정 정보는 환경 변수로 분리를 하고 코드와 구성을 철저하게 분리해서 사용해야한다.
4. Linkable Backing Services - 백킹 서비스
- 데이터베이스, 메시지 큐, Redis와 같이 외부 서비스를 내부 구성요소처럼 취급하지 않고 독립된 리소스로 연결해서 사용해야한다.
5. Build, Release, Run
- 어플리케이션을 빌드하고 구성적용을 하고 실행 단계를 명확히 분리 해야한다.
6. Stateless Processes
- 어플리케이션 자체가 상태를 갖고 있지 않은 상태의 프로세스로 구성이 되어야 한다.
- 공유된 상태는 외부 저장소에 보관해야한다.
7. Port Binding - 포트 바인딩
- 자체 웹서버를 실행해서 포트를 바인딩해서 사용해야된다.
8. Concurrency
- 프로세스를 여러 개 실행해서 수평 확장을 가능하도록 해야한다.
- 워크로드, 웹서비스, 큐 이런식으로 역할 구분을 가능하게 해줘야한다.
9. Disposability
- 어플리케이션의 프로세스가 빠르게 시작되고 정상적으로 빠르게 종료되어야한다.
- 무중단 재배포, 장애복구가 가능하도록 구축해야한다.
10. Development & Production Parity
- 개발과 스테이징, 운영 환경간의 분리를 해야한다.
11. LOGS
- 웹 어플리케이션의 내부에서 관리하지 않고 표준 출력이라든가 외부에 있는 로그 수집기, 분석기를 통해 처리할 수 있어야한다.
12. Admin Process
- 데이터 마이그레이션, 초기화, 일관성 관리 작업은 앱코드와 같은 방식으로 처리를 해줘야한다.
12Factors에서 강조하는 것
- 구성과 코드를 분리하라.
- 외부 의존성은 격리하고 선언하라.
- 상태 없는 프로세스로 구성하고 빠르게 시작하고 종료할 수 있도록 하라.
- 환경 간 차이를 최소화하고, 일관된 배포 및 실행 흐름을 갖춰라.
- 로그나 관리 작업은 외부시스템에서 제어하라.
최근에는 피보탈이라는 회사에서 API First, Telemetry, Authentication&Authorization이라는 세가지 항목을 추가시켜
12Factors에서 얘기했던 우선순위를 바꾸기도 했음
'MSA' 카테고리의 다른 글
| Monolith vs Microservices (0) | 2026.01.02 |
|---|---|
| Cloud Native Application (0) | 2026.01.02 |
| [MSA-초기세팅]🏗️ MSA 환경 구성 (1) (0) | 2025.10.09 |
| [MSA-기획/설계] DDD기반 설계 EventStorming 도입하기 (0) | 2025.10.09 |