목차

마이크로 서비스 아키텍처 (MSA)

12-Factor App 방법론

최근 소프트웨어를 서비스 형태로 제공하는게 일반화 되면서, 웹앱 또는 SaaS(Software As A Service)라고 부르게 되었다.
12-Factor App은 아래 특징을 가진 SaaS앱을 만들기 위한 방법론이다.

12-Factor방법론은 어떤 프로그래밍 언어로 작성된 앱에도 적용할 수 있고 백엔드 서비스(데이터베이스, 큐, 메모리 캐쉬 등)와 다양한 조합으로 사용할 수 있다.

  1. 코드베이스 (Codebase)
    • 버전 관리되는 하나의 코드베이스로 여러 곳에 배포
  2. 종속성 (Dependencies)
    • 의존 관계를 명시적으로 선언하고 분리
    • 환경에 의존하지 않도록 함
  3. 설정 (Config)
    • 설정 정보는 애플리케이션 코드와 분리하고 환경 변수에 저장
  4. 백엔드 서비스 (Backing services)
    • 백엔드 서비스를 연결된 리소스로 취급
  5. 빌드, 릴리스, 실행 (Build, Release, Run)
    • 빌드, 릴리스, 실행의 3단계를 엄격하게 분리
  6. 프로세스 (Processes)
    • 응용 프로그램을 하나 또는 여러 개의 독립적인 프로세스로 실행
  7. 포트 바인딩 (Port binding)
    • 포트 바인딩을 통해 서비스를 공개
  8. 동시성 (Concurrency)
    • 프로세스 모델에 따라 수평적 확장
  9. 폐기 용이성 (Disposability)
    • 빠른 시작이 가능하며, Graceful Shutdown시 서비스에 영향을 미치지 않도록 하여 안정성 극대화
    • Graceful Shutdown : 정상적인 종료로써 소프트웨어 기능으로 컴퓨터를 끄거나 OS가 프로세스를 안전하게 종료하고 연결을 해제하는 작업을 수행할 수 있는 경우이다.
  10. 개발/운영 일치 (Dev/prod parity)
    • 개발 환경과 운영 환경을 최대한 동일하게 유지
    • CI/CD (Continuous Integration/Continuous Delivery)환경이 갖춰져 있어야 함
  11. 로그 (Logs)
    • 로그를 이벤트 스트림으로 취급함
    • 중앙 집권적인 서비스를 통해 로그 이벤트를 수집하고, 인덱싱하여 분석하는 환경이 가능해야 함
  12. 관리 프로세스 (Admin processes)
    • 관리 작업(admin/maintenance)을 일회성 프로세스로 실행

참고자료