MSA

12 Factors

MinCodeHub 2026. 1. 2. 14:30

12 Factors 

https://12factor.net/

 

클라우드 네이티브 어플리케이션을 개바하거나 서비스를 운영할 때 고려해야 될 항목을 정리 한 것

 

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에서 얘기했던 우선순위를 바꾸기도 했음