12 팩터 앱
개요
헤로쿠 사에서 클라우드-네이티브 아키텍처를 구축하면서 나온 패턴들이 12-팩터 앱 가이드로 정착. 단일 유닛으로 이뤄진 어플리케이션 아키텍처를 declarative configuration, statelessness, deployment independence에 초점을 두고 설계하는 안내서
MSA에 적용
12 factor
- 코드베이스
- 의존성
- 설정
- 백엔드 서비스
- 빌드, 릴리즈, 실행
- 프로세스
- 포트 바인딩
- 동시성
- 폐기 가능 (쓰고 버리기)
- 환경 일치
- 로그
- 관리 프로세스
코드베이스
- codebase
- 하나의 코드베이스는 VCS 에서 여러 배포버전을 기록하며, 하나의 앱은 하나의 코드베이스를 기반으로 소스 코드를 형상관리
- 코드는 여러 대의 분산처리 운영서버나 여러 개발자의 컴퓨터로 배포, 실행될 수 있다
의존성
- dependency
- 의존성은 명시적으로 선언하되 격리한다
- 인터넷이 차단된 개발 환경의 의존성을 어떻게 패키징할지도 고민 대상
- 시스템 유틸리티에 의존하지 않는다
설정
- configuration
- 여러 서버의 접속 정보 등을 설정을 코드에 저장하지 않는다
- 가변적인 것들은 환경변수를 이용한다
백엔드 서비스
- backing service
- 기반 서비스
- 부가 리소스로 취급하며 URL 를 통해 서비스에 접속한다
빌드, 릴리즈, 실행
- 빌드와 실행단계를 엄격히 구분한다
- CI / CD 와 연관된다
프로세스
- 단일/다수의 무상태 프로세스로 앱을 실행한다
- 프로세스 사이에 아무 것도 공유하지 않고, 내부 상태를 갖고 있지 않는다
- 모든 데이터는 백엔드 서비스로 다뤄야한다
포트 바인딩
- 서비스는 포트를 바인딩하여 내보낸다
- 한 앱이 다른 앱의 서비스가 될 수 있다
동시성
- concurrency
- 프로세스 모델 중심으로 scale out
- 개별 프로세스는 멀티스레딩하면 된다
- 같은 일하는 프로세스는 수직적, 다른일 하는 프로세스는 수평적
폐기 가능
- disposability
- 프로세스는 쓰고 바로 버릴 수 있어야한다
- 프로세스가 갑자기 죽어도 서비스 장애가 발생해서는 안 된다
같은 환경
- environment parity
- 개발, 스테이징, 운영 환경을 최대한 비슷하게 유지한다
로그
- 표준 콘솔창 (stdout)에 로그를 출력한다
관리 프로세스
- admin process
- 관리자가 수행하는 작 업(DB migration, batch, at 등)은 일회성 프로세스로 실행한다
- 데이터베이스를 직접 수정하지 않는다