본문 바로가기

BackEnd/MSA

[MSA] 12 Factors + 3

12 Factors

 : 12 Factors는 클라우드 서비스 중 플랫폼 에저 서비스(파스라라는 형태의 서비스)를 제공하는 Heroku라는 개발
  회사에서 제시한 12가지 항목으로 클라우드 네이티브 어플리케이션을 개발/운영 시 고려해야 될 항목을 정리한 것이다.

  1. BASE CODE (코드 베이스)
    : 자체 레퍼지토리에 저장된 각 마이크로 서비스에 대한 단일 코드베이스를 뜻하며 버전을 제어하기 위한 목적을 갖는다.  즉 형상관리/배포(개발서버, 스테이징, 운영서버) 등을 위해 소스의 통일적인 관리가 필요하기 때문이다.
     
  2. DEPENDENCY ISOLATION (종속성)
    : 각 마이크로 서비스는 자체 종속성을 가지고 패키지 되어 있어 전체 시스템에 영향을 주지 않는 상태에서 변경되고 내용을 수정할 수 있어야 한다는 뜻이다.
  3. CONFIGURATIONS (설정)
    : 모든 설정 정보는 코드로부터 분리된 공간에 저장되어야 하고, 런타임에서 코드에 의해 읽혀야 한다.  
  4. LINKABLE BACKING SERVICES (서비스 지원)
    : 데이터베이스/캐시/메시징 서비스/브로커 이런 것들을 이용해 마이크로 서비스가 가져야 될 어떤 기능들을 추가로 지원할 수 있는것을 의미한다.  응용 프로그램 자체에서 필요한 백킹 시스템 리소스를 분리됨으로 서로 상호 가능한 서비스 자체를 우리가 코드 디펜던시를 갖지 않은 상태에서 작업할 수 있다.
  5. STAGES OF CREATION
    : 코드베이스는 build/release/run의 단계를 거쳐 배포로 변환되며, 각 단계는 엄격하게 분리되어야 한다.
    각각의 고유한 아이디로 태그를 가지고 있어야 하며 이전 상태로 돌아가는 롤백 기능을 지원해야 한다.
    CI/CD 시스템을 완벽하게 이용을 해 자동화된 시스템을 구축해야 한다.
  6. STATELESS PROCESSES (프로세스)
    : 각각의 마이크로 서비스는 실행 중인 다른 서비스와 분리되어 자체 프로세스를 운영할 수 있어야 한다.
    즉 하나의 마이크로 서비스는 다른 쪽에 있는 마이크로 서비스와 분리되어 독립적으로 실행할 수 있어야 한다.
    필요한 자원이 있을 시에는 캐시/데이터 저장소와 같은 형태를 이용해 외부와 데이터 교환을 해 동기화하면 된다.
  7. PORT BINDING (포트 바인딩)
    : 포트 바인딩을 통해 서비스를 공개한다.  각각의 마이크로 서비스는 자체 포트에서 노출되는 인터페이스 및 기능과 함께 노출된 포트로 들어오는 요청을 기다려야 한다.
  8. CONCURRENCY (동시성)
    : 6. STATELESS PROCESSES (프로세스) 모델을 통한 확장이 가능하다.  사용자가 많을 경우 동일한 마이크로 서비스가 여러 인스턴스에 동일한 형태로 복사해 운영을 할 경우 부하를 분산할 수 있다.  즉 그 서비스가 여러 PC, 여러 인스턴스로 나뉘어 서비스가 되는걸 동시성이라고 한다.
  9. DISPOSABILITY (폐기 기능)
    : 서비스 인스턴스 자체가 삭제가 가능해야 된다.  


  10.  DEVELOPEMNT & PRODUCTION PARITY (개발단계 & 운영단계의 일치)
    : 개발단계와 운영단계는 큰 차이가 있으나 최대한 줄이기 위해 노력해야 한다.  
    - 시간의 차이 : 개발자가 작성한 코드는 몇시간/몇분 후에 배포되어야 한다.
    - 담당자의 차이 : 코드를 작성한 개발자들이 배포와 운영에서의 모니터링에 깊게 신경써야 한다.
    - 툴의 차이 : 개발과 운영 환경을 최대한 비슷하게 유지한다.
  11. LOGS (로깅 시스템)
    : 로그를 이벤트 스트림으로 취급해 분리시켜 어플리케이션 자체가 실행되지 않는 상태에서도 로그만은 정상적으로 확인이 가능하도록 해야한다.  즉 운영이나 스테이징의 로그 스트림은 수집 후 보관을 위해 하나 이상의 특정 목적지로 전달하여야 한다.
  12. ADMIN PROCESSES FOR EVENTUAL PROCESSES (ADMIN 프로세스)
    : 관리라는 현재 운영되고 있는 모든 마이크로 서비스들을 어떤 상태로 사용되고 있으며 리소스가 어떻게 현재 쓰고 있는지 파악하기 위한 적절한 관리도구가 있어야 된다.  또한 데이터 정리 및 데이터를 분석하는 기능이 포함될 수 있다.

참고강의 : https://www.inflearn.com/course/스프링-클라우드-마이크로서비스

 

 

 

 

 

'BackEnd > MSA' 카테고리의 다른 글

[MSA] 소프트웨어 아키텍처  (0) 2024.08.01