12 팩터 앱

헤로쿠 사에서 클라우드-네이티브 아키텍처를 구축하면서 나온 패턴들이 12-팩터 앱 가이드로 정착.
단일 유닛으로 이뤄진 어플리케이션 아키텍처를 declarative configuration, statelessness, deployment independence에 초점을 두고 설계하는 안내서

MSA에 적용

12 factor

  • 코드베이스
  • 의존성
  • 설정
  • 백엔드 서비스
  • 빌드, 릴리즈, 실행
  • 프로세스
  • 포트 바인딩
  • 동시성
  • 폐기 가능 (쓰고 버리기)
  • 환경 일치
  • 로그
  • 관리 프로세스

코드베이스

  • codebase
  • 하나의 코드베이스는 VCS 에서 여러 배포버전을 기록하며, 하나의 앱은 하나의 코드베이스를 기반으로 소스 코드를 형상관리
  • 코드는 여러 대의 분산처리 운영서버나 여러 개발자의 컴퓨터로 배포, 실행될 수 있다

의존성

  • dependency
  • 의존성은 명시적으로 선언하되 격리한다
  • 인터넷이 차단된 개발 환경의 의존성을 어떻게 패키징할지도 고민 대상
  • 시스템 유틸리티에 의존하지 않는다

설정

  • configuratioon
  • 여러 서버의 접속 정보 등을 설정을 코드에 저장하지 않는다
  • 가변적인 것들은 환경변수를 이용한다

백엔드 서비스

  • backing service
  • 기반 서비스
  • 부가 리소스로 취급하며 URL 를 통해 서비스에 접속한다

빌드, 릴리즈, 실행

  • 빌드와 실행단계를 엄격히 구분한다
  • CI / CD 와 연관된다

프로세스

  • 단일/다수의 무상태 프로세스로 앱을 실행한다
  • 프로세스 사이에 아무 것도 공유하지 않고, 내부 상태를 갖고 있지 않는다
  • 모든 데이터는 백엔드 서비스로 다뤄야한다

포트 바인딩

  • 서비스는 포트를 바인딩하여 내보낸다
  • 한 앱이 다른 앱의 서비스가 될 수 있다

동시성

  • concurrency
  • 프로세스 모델 중심으로 scale out
  • 개별 프로세스는 멀티스레딩하면 된다
  • 같은 일하는 프로세스는 수직적, 다른일 하는 프로세스는 수평적

폐기 가능

  • disposability
  • 프로세스는 쓰고 바로 버릴 수 있어야한다
  • 프로세스가 갑자기 죽어도 서비스 장애가 발생해서는 안 된다

같은 환경

  • environment parity
  • 개발, 스테이징, 운영 환경을 최대한 비슷하게 유지한다

로그

  • 표준 콘솔창 (stdout)에 로그를 출력한다

관리 프로세스

  • admin process
  • 관리자가 수행하는 작업(DB migration, batch, at 등)은 일회성 프로세스로 실행한다
  • 데이터베이스를 직접 수정하지 않는다

참고

  • The Tweleve-Factor App
  • Django 자습, 12 팩터 앱
  • 스프링부트 워크북, 12-팩터 앱 가이드