12요소 (twelve factors) 애플리케이션

개요

본 포스트에서는 Heroku 플랫폼을 통해 소개된 개념인 12-Factor 애플리케이션 요소에 대해 정리한다. SaaS(Software As A Service) 개발 방법론 관점에서 고안해 낸 개념인데, 어떤 애플리케이션이 Cloud 환경에서 잘 동작할 수 있으려면 아래의 12가지 규칙을 잘 준수해야 한다고 하는 것이다.

 

12요소 (twelve factors)

  1. 코드베이스(codebase)
  2. 의존성(dependencies)
  3. 설정(config)
  4. 백엔드 서비스(backing services)
  5. 빌드, 릴리즈, 실행(build, release, run)
  6. 프로세스(processes)
  7. 포트 바인딩(port binding)
  8. 동시성(concurrency)
  9. 폐기가능(disposability)
  10. 개발/프로덕션 환경 동일화(dev/prod parity)
  11. 로그(logs)
  12. 어드민 프로세스(admin process)

 


 

1. 코드베이스

  • 코드베이스는 버전 컨트롤하여 관리한다.
  • 하나의 동일한 코드 베이스로부터 develop, stage, production 등의 환경에 배포할 수 있다.

 

2. 의존성

  • 의존성 선언: 의존성을 엄격하게 선언함
  • 의존성 분리: 실행시 의존성의 바운더리를 정하여, 실행되는 환경의 의존성이 독립적으로 보장되도록 보장

 

3. 설정

  • 배포 환경(develop, stage, production)에 따라 달라질 수 있는 것들
    • 데이터베이스, cache 서버 등 리소스 주소
    • 외부 인증 정보
  • 설정을 환경변수에 저장함

 

4. 백엔드 서비스

  • DB, Cache, Messaging System 등과 같은 백엔드 서비스를 연결된 리소스로 취급함
  • 백엔드 서비스의 URL 등을 설정으로 빼놓고, 코드상에서는 설정을 참조하여 백엔드 리소스에 접근한다.
  • 애플리케이션 코드를 수정하지 않고, 설정에 있는 리소스 핸들만 변경할 수 있어야 한다.
  • 즉, 백엔드 서비스들과 느슨하게 결합되어야 한다.

 

5. 빌드, 릴리즈, 실행

  • 배포 절차를 빌드/릴리즈/실행의 세 단계로 명확히 분리한다.
    • 빌드: 소스 코드 repository로부터 실행 가능한 artifact로 만듬
    • 릴리즈: 코드가 빌드되면, 배포의 설정을 적용함. 릴리즈가 완료되면 실행할 준비가 완료됨.
    • 실행: 실제 실행할 환경(runtime)에서 프로그램을 동작시킴

 

6. 프로세스

  • 한 개 혹은 여러 개의 stateless 프로세스로 구성됨
  • stateless이며, 아무 것도 공유하지 않음. 유지되어야 하는 데이터는 DB 등과 같은 백엔드 서비스를 활용한다.
  • stateless 여야 확장 가능함.

 

7. 포트 바인딩

  • 어떤 서비스나 애플리케이션을 네트워크 포트 번호로 구별할 수 있어야 함.
  • DNS 이름보다는 오히려 포트 번호를 기준으로 특정 서비스를 구별할 수 있도록 하는 것이 보다 정확할 것임.
  • 예)
    • HTTP: 80
    • HTTPS: 443
    • SSH: 22
    • MySQL: 3306

 

반응형

 

8. 동시성 (Concurrency)

  • stateless 프로세스로 만들어야 함
  • 절대 대몬화하지 말 것

 

9. 폐기 가능 (Disposability)

  • 빠른 시작(fast stratup)과 점진적인 종료(graceful shutdown)

 

10. 개발/ 프로덕션 환경 일치

  • 개발/스테이지/운영 환경을 최대한 비슷하게 유지
  • 시간 차이: 개발자가 작성한 코드가 몇 분~ 몇 시간 내 배포될 수 있음
  • 담당자의 차이: 개발자가 작성한 코드를 시스템 엔지니어가 배포
  • 툴의 차이: 개발환경(혹은 개발자)과 실제 운영환경상 시스템 불일치

 

11. 로그

  • 로그를 이벤트 스트림처럼 처리하자.
  • 로그는 로컬에 저장하지 않고, 별도의 저장소에 보관한다.

 

12. 어드민 프로세스

  • admin/maintenance 작업을 일회성 프로세스로 실행해야 함
  • 일회성 관리/ 유지보수 작업 지원 필요
    • 데이터 마이그레이션 실행시
    • 일회성 스크립트 실행시

댓글

Designed by JB FACTORY